diff --git a/CHANGELOG.md b/CHANGELOG.md index 04ed37f4..e835b4d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,15 @@ # Release Notes -## [Vulkan Profiles Tools 1.4.XXX](https://github.com/KhronosGroup/Vulkan-Profiles/tree/sdk-1.4.XXX.0) - February 2026 +## [Vulkan Profiles Tools 1.4.XXX](https://github.com/KhronosGroup/Vulkan-Profiles/tree/main) - May 2026 + +### Features: +- Add Vulkan 1.4 minimum requirements profile + +### Bugfixes: +- Fix Vulkan Profiles library crash when checking capabilities of unsupported extensions + +## [Vulkan Profiles Tools 1.4.341](https://github.com/KhronosGroup/Vulkan-Profiles/tree/sdk-1.4.341.0) - February 2026 ### Features: - Add VP_ANDROID_17_requirements and VP_ANDROID_vulkan_profile_2025 profiles diff --git a/CMakeLists.txt b/CMakeLists.txt index ee2fd0ea..a6a2ecaa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ # ~~~ -# Copyright (c) 2020-2025 LunarG, Inc. +# Copyright (c) 2020-2026 LunarG, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/layer/CMakeLists.txt b/layer/CMakeLists.txt index 87316aa9..2fba9a41 100644 --- a/layer/CMakeLists.txt +++ b/layer/CMakeLists.txt @@ -1,5 +1,5 @@ # ~~~ -# Copyright (c) 2021-2025 LunarG, Inc. +# Copyright (c) 2021-2026 LunarG, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/layer/profiles.h b/layer/profiles.h index 0ba72a2e..cfcc683d 100644 --- a/layer/profiles.h +++ b/layer/profiles.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2015-2025 Valve Corporation - * Copyright (C) 2015-2025 LunarG, Inc. + * Copyright (C) 2015-2026 Valve Corporation + * Copyright (C) 2015-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/profiles_interface.cpp b/layer/profiles_interface.cpp index b8a142f6..eb96e027 100644 --- a/layer/profiles_interface.cpp +++ b/layer/profiles_interface.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2022-2025 Valve Corporation - * Copyright (C) 2022-2025 LunarG, Inc. + * Copyright (C) 2022-2026 Valve Corporation + * Copyright (C) 2022-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/profiles_interface.h b/layer/profiles_interface.h index 76b168bb..b4c6ac2b 100644 --- a/layer/profiles_interface.h +++ b/layer/profiles_interface.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2022-2025 Valve Corporation - * Copyright (C) 2022-2025 LunarG, Inc. + * Copyright (C) 2022-2026 Valve Corporation + * Copyright (C) 2022-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/profiles_json.cpp b/layer/profiles_json.cpp index 424ba86f..ae84c731 100644 --- a/layer/profiles_json.cpp +++ b/layer/profiles_json.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2022-2025 Valve Corporation - * Copyright (C) 2022-2025 LunarG, Inc. + * Copyright (C) 2022-2026 Valve Corporation + * Copyright (C) 2022-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/profiles_json.h b/layer/profiles_json.h index 7a929579..4ef7ffbf 100644 --- a/layer/profiles_json.h +++ b/layer/profiles_json.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2022-2025 Valve Corporation - * Copyright (C) 2022-2025 LunarG, Inc. + * Copyright (C) 2022-2026 Valve Corporation + * Copyright (C) 2022-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/profiles_settings.cpp b/layer/profiles_settings.cpp index 53024058..99765f61 100644 --- a/layer/profiles_settings.cpp +++ b/layer/profiles_settings.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2022-2025 Valve Corporation - * Copyright (C) 2022-2025 LunarG, Inc. + * Copyright (C) 2022-2026 Valve Corporation + * Copyright (C) 2022-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/profiles_settings.h b/layer/profiles_settings.h index d7515039..59cbc91b 100644 --- a/layer/profiles_settings.h +++ b/layer/profiles_settings.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2022-2025 Valve Corporation - * Copyright (C) 2022-2025 LunarG, Inc. + * Copyright (C) 2022-2026 Valve Corporation + * Copyright (C) 2022-2026 LunarG, Inc. * Copyright (c) 2024 RasterGrid Kft. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/layer/profiles_util.cpp b/layer/profiles_util.cpp index a13b4c1b..a0557169 100644 --- a/layer/profiles_util.cpp +++ b/layer/profiles_util.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2022-2025 Valve Corporation - * Copyright (C) 2022-2025 LunarG, Inc. + * Copyright (C) 2022-2026 Valve Corporation + * Copyright (C) 2022-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/profiles_util.h b/layer/profiles_util.h index bdd13a64..31b8a9f6 100644 --- a/layer/profiles_util.h +++ b/layer/profiles_util.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2022-2025 Valve Corporation - * Copyright (C) 2022-2025 LunarG, Inc. + * Copyright (C) 2022-2026 Valve Corporation + * Copyright (C) 2022-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/tests/CMakeLists.txt b/layer/tests/CMakeLists.txt index 08bb8d87..5eb12a5e 100644 --- a/layer/tests/CMakeLists.txt +++ b/layer/tests/CMakeLists.txt @@ -1,6 +1,6 @@ # ~~~ # Copyright (c) 2021-2024 Valve Corporation -# Copyright (c) 2021-2025 LunarG, Inc. +# Copyright (c) 2021-2026 LunarG, Inc. # Copyright (c) 2024 RasterGrid Kft. # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/layer/tests/profiles_test_helper.cpp b/layer/tests/profiles_test_helper.cpp index d1c72abb..4a3cdc3c 100644 --- a/layer/tests/profiles_test_helper.cpp +++ b/layer/tests/profiles_test_helper.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021-2025 Valve Corporation - * Copyright (c) 2021-2025 LunarG, Inc. + * Copyright (c) 2021-2026 Valve Corporation + * Copyright (c) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/tests/tests.cpp b/layer/tests/tests.cpp index caa79824..fe12b025 100644 --- a/layer/tests/tests.cpp +++ b/layer/tests/tests.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/tests/tests_combine_intersection.cpp b/layer/tests/tests_combine_intersection.cpp index 40ccdd25..717cb031 100644 --- a/layer/tests/tests_combine_intersection.cpp +++ b/layer/tests/tests_combine_intersection.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * Copyright (c) 2024 RasterGrid Kft. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/layer/tests/tests_combine_union.cpp b/layer/tests/tests_combine_union.cpp index 9671b350..4f8ba24e 100644 --- a/layer/tests/tests_combine_union.cpp +++ b/layer/tests/tests_combine_union.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * Copyright (c) 2024 RasterGrid Kft. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/layer/tests/tests_mechanism.cpp b/layer/tests/tests_mechanism.cpp index bf9384f4..cb49899d 100644 --- a/layer/tests/tests_mechanism.cpp +++ b/layer/tests/tests_mechanism.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/tests/tests_mechanism_api_version.cpp b/layer/tests/tests_mechanism_api_version.cpp index c3d0baaa..06449b48 100644 --- a/layer/tests/tests_mechanism_api_version.cpp +++ b/layer/tests/tests_mechanism_api_version.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/tests/tests_mechanism_check_values.cpp b/layer/tests/tests_mechanism_check_values.cpp index 571d21dd..8803298f 100644 --- a/layer/tests/tests_mechanism_check_values.cpp +++ b/layer/tests/tests_mechanism_check_values.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/tests/tests_mechanism_format.cpp b/layer/tests/tests_mechanism_format.cpp index f02ee5ac..fb9e6504 100644 --- a/layer/tests/tests_mechanism_format.cpp +++ b/layer/tests/tests_mechanism_format.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/tests/tests_mechanism_video_profiles.cpp b/layer/tests/tests_mechanism_video_profiles.cpp index 773092d1..43d981a4 100644 --- a/layer/tests/tests_mechanism_video_profiles.cpp +++ b/layer/tests/tests_mechanism_video_profiles.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * Copyright (c) 2024 RasterGrid Kft. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/layer/tests/tests_promoted.cpp b/layer/tests/tests_promoted.cpp index 967dd6d0..17b1ca89 100644 --- a/layer/tests/tests_promoted.cpp +++ b/layer/tests/tests_promoted.cpp @@ -1,6 +1,6 @@ /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/tests/vktestframework.cpp b/layer/tests/vktestframework.cpp index 8df2b02d..d6698ecf 100644 --- a/layer/tests/vktestframework.cpp +++ b/layer/tests/vktestframework.cpp @@ -1,7 +1,7 @@ /* * Copyright (c) 2015-2025 The Khronos Group Inc. - * Copyright (c) 2015-2025 Valve Corporation - * Copyright (c) 2015-2025 LunarG, Inc. + * Copyright (c) 2015-2026 Valve Corporation + * Copyright (c) 2015-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/layer/vk_layer_table.cpp b/layer/vk_layer_table.cpp index 12a5c888..6afa9524 100644 --- a/layer/vk_layer_table.cpp +++ b/layer/vk_layer_table.cpp @@ -1,6 +1,6 @@ /* Copyright (c) 2015-2025 The Khronos Group Inc. - * Copyright (c) 2015-2025 Valve Corporation - * Copyright (c) 2015-2025 LunarG, Inc. + * Copyright (c) 2015-2026 Valve Corporation + * Copyright (c) 2015-2026 LunarG, Inc. * Copyright (c) 2015-2025 Google, Inc. * Copyright (c) 2023-2023 RasterGrid Kft. * diff --git a/layer/vk_layer_table.h b/layer/vk_layer_table.h index 29d92cd8..6373f814 100644 --- a/layer/vk_layer_table.h +++ b/layer/vk_layer_table.h @@ -1,6 +1,6 @@ /* Copyright (c) 2015-2025 The Khronos Group Inc. - * Copyright (c) 2015-2025 Valve Corporation - * Copyright (c) 2015-2025 LunarG, Inc. + * Copyright (c) 2015-2026 Valve Corporation + * Copyright (c) 2015-2026 LunarG, Inc. * Copyright (c) 2023-2023 RasterGrid Kft. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/library/test/CMakeLists.txt b/library/test/CMakeLists.txt index c1786229..859644de 100644 --- a/library/test/CMakeLists.txt +++ b/library/test/CMakeLists.txt @@ -1,5 +1,5 @@ # ~~~ -# Copyright (c) 2021-2025 LunarG, Inc. +# Copyright (c) 2021-2026 LunarG, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/library/test/test_api_create_device.cpp b/library/test/test_api_create_device.cpp index 9e77145c..bc906cd2 100644 --- a/library/test/test_api_create_device.cpp +++ b/library/test/test_api_create_device.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021-2025 Valve Corporation - * Copyright (c) 2021-2025 LunarG, Inc. + * Copyright (c) 2021-2026 Valve Corporation + * Copyright (c) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -92,6 +92,14 @@ TEST(api_create_device_profile, check_support_vulkan_1_3) { EXPECT_TRUE(supported == VK_TRUE); } +TEST(api_create_device_profile, check_support_vulkan_1_4) { + const VpProfileProperties profile = {VP_LUNARG_MINIMUM_REQUIREMENTS_1_4_NAME, VP_LUNARG_MINIMUM_REQUIREMENTS_1_4_SPEC_VERSION}; + + VkBool32 supported = VK_FALSE; + VkResult result = vpGetPhysicalDeviceProfileSupport(scaffold->instance, scaffold->physicalDevice, &profile, &supported); + EXPECT_TRUE(result == VK_SUCCESS); +} + #ifdef VKU_FORCE_EXTRA_TESTS TEST(api_create_device_profile, check_support_desktop_2022) { const VpProfileProperties profile = {VP_LUNARG_DESKTOP_BASELINE_2022_NAME, VP_LUNARG_DESKTOP_BASELINE_2022_SPEC_VERSION}; @@ -144,7 +152,6 @@ TEST(api_create_device_profile, check_support_roadmap_2026) { VkBool32 supported = VK_FALSE; VkResult result = vpGetPhysicalDeviceProfileSupport(scaffold->instance, scaffold->physicalDevice, &profile, &supported); EXPECT_TRUE(result == VK_SUCCESS); - EXPECT_TRUE(supported == VK_TRUE); } TEST(api_create_device_profile, create_roadmap_2022) { @@ -221,8 +228,7 @@ TEST(api_create_device_profile, create_roadmap_2026) { VkDevice device = VK_NULL_HANDLE; VkResult res = vpCreateDevice(scaffold->physicalDevice, &profileInfo, nullptr, &device); - EXPECT_TRUE(res == VK_SUCCESS); - EXPECT_TRUE(device != VK_NULL_HANDLE); + EXPECT_TRUE(res == VK_SUCCESS || res == VK_ERROR_EXTENSION_NOT_PRESENT); } TEST(api_create_device_profile, overrite_with_profile_only) { diff --git a/library/test/test_api_profile_object.cpp b/library/test/test_api_profile_object.cpp index b09c39d6..0173c7a2 100644 --- a/library/test/test_api_profile_object.cpp +++ b/library/test/test_api_profile_object.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021-2025 Valve Corporation - * Copyright (c) 2021-2025 LunarG, Inc. + * Copyright (c) 2021-2026 Valve Corporation + * Copyright (c) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -302,24 +302,23 @@ TEST(api_capabilities_object, get_profile_feature_structure_types) { const VpProfileProperties profileProperties = {VP_KHR_ROADMAP_2022_NAME, VP_KHR_ROADMAP_2022_SPEC_VERSION}; - uint32_t propertyCount = 0; + uint32_t featureCount = 0; VkResult result0 = vpGetProfileFeatureStructureTypes( - object.handle, &profileProperties, nullptr, &propertyCount, nullptr); + object.handle, &profileProperties, nullptr, &featureCount, nullptr); EXPECT_EQ(VK_SUCCESS, result0); - EXPECT_EQ(4, propertyCount); - - propertyCount = 5; + EXPECT_EQ(5, featureCount); - std::vector properties(propertyCount); + std::vector features(featureCount); VkResult result1 = vpGetProfileFeatureStructureTypes( - object.handle, &profileProperties, nullptr, &propertyCount, &properties[0]); + object.handle, &profileProperties, nullptr, &featureCount, &features[0]); EXPECT_EQ(VK_SUCCESS, result1); - EXPECT_EQ(4, propertyCount); + EXPECT_EQ(5, featureCount); - EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, properties[0]); - EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, properties[1]); - EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, properties[2]); - EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, properties[3]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, features[0]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, features[1]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, features[2]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, features[3]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, features[4]); } TEST(api_capabilities_object, get_profile_Property_structure_types) { @@ -333,8 +332,6 @@ TEST(api_capabilities_object, get_profile_Property_structure_types) { EXPECT_EQ(VK_SUCCESS, result0); EXPECT_EQ(4, propertyCount); - propertyCount = 5; - std::vector properties(propertyCount); VkResult result1 = vpGetProfilePropertyStructureTypes( object.handle, &profileProperties, nullptr, &propertyCount, &properties[0]); diff --git a/library/test/test_api_reflection.cpp b/library/test/test_api_reflection.cpp index 22605439..a3d5cef9 100644 --- a/library/test/test_api_reflection.cpp +++ b/library/test/test_api_reflection.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021-2025 Valve Corporation - * Copyright (c) 2021-2025 LunarG, Inc. + * Copyright (c) 2021-2026 Valve Corporation + * Copyright (c) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -232,41 +232,42 @@ TEST(api_get_profile_structures, get_features) { EXPECT_EQ(VK_FALSE, deviceVulkan12Features.shaderOutputLayer); } -TEST(api_get_profile_feature_structure_types, properties_full) { +TEST(api_get_profile_feature_structure_types, features_full) { const VpProfileProperties profile = {VP_KHR_ROADMAP_2022_NAME, VP_KHR_ROADMAP_2022_SPEC_VERSION}; - uint32_t propertyCount = 0; - VkResult result0 = vpGetProfileFeatureStructureTypes(&profile, nullptr, &propertyCount, nullptr); + uint32_t featureCount = 0; + VkResult result0 = vpGetProfileFeatureStructureTypes(&profile, nullptr, &featureCount, nullptr); EXPECT_EQ(VK_SUCCESS, result0); - EXPECT_EQ(4, propertyCount); + EXPECT_EQ(5, featureCount); - propertyCount = 5; + featureCount = 6; - std::vector properties(propertyCount); - VkResult result1 = vpGetProfileFeatureStructureTypes(&profile, nullptr, &propertyCount, &properties[0]); + std::vector features(featureCount); + VkResult result1 = vpGetProfileFeatureStructureTypes(&profile, nullptr, &featureCount, &features[0]); EXPECT_EQ(VK_SUCCESS, result1); - EXPECT_EQ(4, propertyCount); + EXPECT_EQ(5, featureCount); - EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, properties[0]); - EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, properties[1]); - EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, properties[2]); - EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, properties[3]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, features[0]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, features[1]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, features[2]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, features[3]); + EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, features[4]); } -TEST(api_get_profile_feature_structure_types, properties_partial) { +TEST(api_get_profile_feature_structure_types, features_partial) { const VpProfileProperties profile = {VP_KHR_ROADMAP_2022_NAME, VP_KHR_ROADMAP_2022_SPEC_VERSION}; - uint32_t propertyCount = 0; - VkResult result0 = vpGetProfileFeatureStructureTypes(&profile, nullptr, &propertyCount, nullptr); + uint32_t featureCount = 0; + VkResult result0 = vpGetProfileFeatureStructureTypes(&profile, nullptr, &featureCount, nullptr); EXPECT_EQ(VK_SUCCESS, result0); - EXPECT_EQ(4, propertyCount); + EXPECT_EQ(5, featureCount); - propertyCount = 3; + featureCount = 3; - std::vector properties(propertyCount); - VkResult result1 = vpGetProfileFeatureStructureTypes(&profile, nullptr, &propertyCount, &properties[0]); + std::vector properties(featureCount); + VkResult result1 = vpGetProfileFeatureStructureTypes(&profile, nullptr, &featureCount, &properties[0]); EXPECT_EQ(VK_INCOMPLETE, result1); - EXPECT_EQ(3, propertyCount); + EXPECT_EQ(3, featureCount); EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, properties[0]); EXPECT_EQ(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, properties[1]); diff --git a/library/test/test_mocked_api_create_device.cpp b/library/test/test_mocked_api_create_device.cpp index ef429c6f..b5c52aa0 100644 --- a/library/test/test_mocked_api_create_device.cpp +++ b/library/test/test_mocked_api_create_device.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021-2025 Valve Corporation - * Copyright (c) 2021-2025 LunarG, Inc. + * Copyright (c) 2021-2026 Valve Corporation + * Copyright (c) 2021-2026 LunarG, Inc. * Copyright (c) 2024 RasterGrid Kft. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -37,10 +37,10 @@ TEST(mocked_api_create_device, default_extensions) { inCreateInfo.pQueueCreateInfos = &queueCreateInfo; std::vector outExtensions( - sizeof(detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions) / - sizeof(detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions[0])); + sizeof(detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions) / + sizeof(detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions[0])); for (size_t i = 0; i < outExtensions.size(); ++i) { - outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions[i].extensionName; + outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions[i].extensionName; } VkDeviceCreateInfo outCreateInfo = inCreateInfo; @@ -90,9 +90,9 @@ TEST(mocked_api_create_device, merge_extensions) { inCreateInfo.ppEnabledExtensionNames = inExtensions.data(); std::vector outExtensions( - std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions)); + std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions)); for (size_t i = 0; i < outExtensions.size(); ++i) { - outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions[i].extensionName; + outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions[i].extensionName; } outExtensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME); @@ -136,9 +136,9 @@ TEST(mocked_api_create_device, default_features) { inCreateInfo.pQueueCreateInfos = &queueCreateInfo; std::vector outExtensions( - std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions)); + std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions)); for (size_t i = 0; i < outExtensions.size(); ++i) { - outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions[i].extensionName; + outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions[i].extensionName; } VkDeviceCreateInfo outCreateInfo = inCreateInfo; @@ -189,9 +189,9 @@ TEST(mocked_api_create_device, legacy_enabled_features) { inCreateInfo.pEnabledFeatures = &inFeatures.features; std::vector outExtensions( - std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions)); + std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions)); for (size_t i = 0; i < outExtensions.size(); ++i) { - outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions[i].extensionName; + outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions[i].extensionName; } VkDeviceCreateInfo outCreateInfo = inCreateInfo; @@ -237,9 +237,9 @@ TEST(mocked_api_create_device, disable_robust_buffer_access) { inCreateInfo.pQueueCreateInfos = &queueCreateInfo; std::vector outExtensions( - std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions)); + std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions)); for (size_t i = 0; i < outExtensions.size(); ++i) { - outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions[i].extensionName; + outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions[i].extensionName; } VkDeviceCreateInfo outCreateInfo = inCreateInfo; @@ -285,9 +285,9 @@ TEST(mocked_api_create_device, disable_robust_image_access) { inCreateInfo.pQueueCreateInfos = &queueCreateInfo; std::vector outExtensions( - std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions)); + std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions)); for (size_t i = 0; i < outExtensions.size(); ++i) { - outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions[i].extensionName; + outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions[i].extensionName; } VkDeviceCreateInfo outCreateInfo = inCreateInfo; @@ -332,9 +332,9 @@ TEST(mocked_api_create_device, disable_robust_access) { inCreateInfo.pQueueCreateInfos = &queueCreateInfo; std::vector outExtensions( - std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions)); + std::size(detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions)); for (size_t i = 0; i < outExtensions.size(); ++i) { - outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkan13requirements_roadmap2022::deviceExtensions[i].extensionName; + outExtensions[i] = detail::VP_KHR_ROADMAP_2022::blocks::vulkanextensionrequirements_roadmap2022_promoted_vulkan14::deviceExtensions[i].extensionName; } VkDeviceCreateInfo outCreateInfo = inCreateInfo; diff --git a/library/test/test_mocked_api_create_instance.cpp b/library/test/test_mocked_api_create_instance.cpp index 189114c8..6392ae0b 100644 --- a/library/test/test_mocked_api_create_instance.cpp +++ b/library/test/test_mocked_api_create_instance.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021-2025 Valve Corporation - * Copyright (c) 2021-2025 LunarG, Inc. + * Copyright (c) 2021-2026 Valve Corporation + * Copyright (c) 2021-2026 LunarG, Inc. * Copyright (c) 2024 RasterGrid Kft. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/library/test/test_mocked_api_get_instance_profile_support.cpp b/library/test/test_mocked_api_get_instance_profile_support.cpp index 2d960e54..85ff2c4c 100644 --- a/library/test/test_mocked_api_get_instance_profile_support.cpp +++ b/library/test/test_mocked_api_get_instance_profile_support.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021-2025 Valve Corporation - * Copyright (c) 2021-2025 LunarG, Inc. + * Copyright (c) 2021-2026 Valve Corporation + * Copyright (c) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/library/test/test_mocked_api_get_physdev_profile_support.cpp b/library/test/test_mocked_api_get_physdev_profile_support.cpp index 9cea8e21..b2fca540 100644 --- a/library/test/test_mocked_api_get_physdev_profile_support.cpp +++ b/library/test/test_mocked_api_get_physdev_profile_support.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021-2025 Valve Corporation - * Copyright (c) 2021-2025 LunarG, Inc. + * Copyright (c) 2021-2026 Valve Corporation + * Copyright (c) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -226,11 +226,12 @@ TEST(mocked_api_get_physdev_profile_support, vulkan10_unsupported_version) { VkPhysicalDeviceVulkan13Features vulkan13Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; VkPhysicalDeviceVulkan12Features vulkan12Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, &vulkan13Features}; VkPhysicalDeviceVulkan11Features vulkan11Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, &vulkan12Features}; - VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkan11Features}; + VkPhysicalDeviceGlobalPriorityQueryFeatures vulkanGlobalPriorityFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, &vulkan11Features}; + VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkanGlobalPriorityFeatures}; vpGetProfileFeatures(&profile, nullptr, &features); mock.SetFeatures({ - VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features) + VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features), VK_STRUCT(vulkanGlobalPriorityFeatures) }); VkPhysicalDeviceVulkan13Properties vulkan13Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES}; @@ -661,10 +662,11 @@ TEST(mocked_api_get_physdev_profile_support, vulkan11_unsupported_version) { VkPhysicalDeviceVulkan13Features vulkan13Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; VkPhysicalDeviceVulkan12Features vulkan12Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, &vulkan13Features}; VkPhysicalDeviceVulkan11Features vulkan11Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, &vulkan12Features}; - VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkan11Features}; + VkPhysicalDeviceGlobalPriorityQueryFeatures vulkanGlobalPriorityFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, &vulkan11Features}; + VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkanGlobalPriorityFeatures}; vpGetProfileFeatures(&profile, nullptr, &features); - mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features)}); + mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features), VK_STRUCT(vulkanGlobalPriorityFeatures)}); VkPhysicalDeviceVulkan13Properties vulkan13Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES}; VkPhysicalDeviceVulkan12Properties vulkan12Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES, &vulkan13Properties}; @@ -774,12 +776,13 @@ TEST(mocked_api_get_physdev_profile_support, vulkan13_unsupported_feature) { VkPhysicalDeviceVulkan13Features vulkan13Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; VkPhysicalDeviceVulkan12Features vulkan12Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, &vulkan13Features}; VkPhysicalDeviceVulkan11Features vulkan11Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, &vulkan12Features}; - VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkan11Features}; + VkPhysicalDeviceGlobalPriorityQueryFeatures vulkanGlobalPriorityFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, &vulkan11Features}; + VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkanGlobalPriorityFeatures}; vpGetProfileFeatures(&profile, nullptr, &features); features.features.fullDrawIndexUint32 = VK_FALSE; - mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features)}); + mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features), VK_STRUCT(vulkanGlobalPriorityFeatures)}); VkPhysicalDeviceVulkan13Properties vulkan13Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES}; VkPhysicalDeviceVulkan12Properties vulkan12Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES, &vulkan13Properties}; @@ -817,11 +820,11 @@ TEST(mocked_api_get_physdev_profile_support, vulkan13_unsupported_property) { VkPhysicalDeviceVulkan13Features vulkan13Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; VkPhysicalDeviceVulkan12Features vulkan12Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, &vulkan13Features}; VkPhysicalDeviceVulkan11Features vulkan11Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, &vulkan12Features}; - VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkan11Features}; + VkPhysicalDeviceGlobalPriorityQueryFeatures vulkanGlobalPriorityFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, &vulkan11Features}; + VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkanGlobalPriorityFeatures}; vpGetProfileFeatures(&profile, nullptr, &features); - - mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features)}); + mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features), VK_STRUCT(vulkanGlobalPriorityFeatures)}); VkPhysicalDeviceVulkan13Properties vulkan13Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES}; VkPhysicalDeviceVulkan12Properties vulkan12Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES, &vulkan13Properties}; @@ -922,10 +925,11 @@ TEST(mocked_api_get_physdev_profile_support, vulkan13_supported_queue_family) { VkPhysicalDeviceVulkan13Features vulkan13Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; VkPhysicalDeviceVulkan12Features vulkan12Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, &vulkan13Features}; VkPhysicalDeviceVulkan11Features vulkan11Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, &vulkan12Features}; - VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkan11Features}; + VkPhysicalDeviceGlobalPriorityQueryFeatures vulkanGlobalPriorityFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, &vulkan11Features}; + VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkanGlobalPriorityFeatures}; vpGetProfileFeatures(&profile, nullptr, &features); - mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features)}); + mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features), VK_STRUCT(vulkanGlobalPriorityFeatures)}); VkPhysicalDeviceVulkan13Properties vulkan13Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES}; VkPhysicalDeviceVulkan12Properties vulkan12Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES, &vulkan13Properties}; @@ -994,10 +998,11 @@ TEST(mocked_api_get_physdev_profile_support, vulkan13_supported_version) { VkPhysicalDeviceVulkan13Features vulkan13Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES}; VkPhysicalDeviceVulkan12Features vulkan12Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, &vulkan13Features}; VkPhysicalDeviceVulkan11Features vulkan11Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, &vulkan12Features}; - VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkan11Features}; + VkPhysicalDeviceGlobalPriorityQueryFeatures vulkanGlobalPriorityFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, &vulkan11Features}; + VkPhysicalDeviceFeatures2 features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, &vulkanGlobalPriorityFeatures}; vpGetProfileFeatures(&profile, nullptr, &features); - mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features)}); + mock.SetFeatures({VK_STRUCT(features), VK_STRUCT(vulkan11Features), VK_STRUCT(vulkan12Features), VK_STRUCT(vulkan13Features), VK_STRUCT(vulkanGlobalPriorityFeatures)}); VkPhysicalDeviceVulkan13Properties vulkan13Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES}; VkPhysicalDeviceVulkan12Properties vulkan12Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES, &vulkan13Properties}; diff --git a/library/test/test_util.cpp b/library/test/test_util.cpp index abed3070..df33d4a5 100644 --- a/library/test/test_util.cpp +++ b/library/test/test_util.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2021-2025 Valve Corporation - * Copyright (c) 2021-2025 LunarG, Inc. + * Copyright (c) 2021-2026 Valve Corporation + * Copyright (c) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/profiles/VP_LUNARG_minimum_requirements.json b/profiles/VP_LUNARG_minimum_requirements.json index f8c1b55a..acba8ba6 100644 --- a/profiles/VP_LUNARG_minimum_requirements.json +++ b/profiles/VP_LUNARG_minimum_requirements.json @@ -211,6 +211,12 @@ "vulkan12requirements": { "features": { "VkPhysicalDeviceVulkan12Features": { + "samplerMirrorClampToEdge": true, + "drawIndirectCount": true, + "descriptorIndexing": true, + "samplerFilterMinmax": true, + "shaderOutputViewportIndex": true, + "shaderOutputLayer": true, "uniformBufferStandardLayout": true, "subgroupBroadcastDynamicId": true, "imagelessFramebuffer": true, @@ -336,14 +342,132 @@ "maxBufferSize": 1073741824 } } + }, + "vulkan14requirements": { + "features": { + "VkPhysicalDeviceFeatures": { + "fullDrawIndexUint32": true, + "imageCubeArray": true, + "independentBlend": true, + "sampleRateShading": true, + "drawIndirectFirstInstance": true, + "depthClamp": true, + "depthBiasClamp": true, + "samplerAnisotropy": true, + "fragmentStoresAndAtomics": true, + "shaderStorageImageExtendedFormats": true, + "shaderUniformBufferArrayDynamicIndexing": true, + "shaderSampledImageArrayDynamicIndexing": true, + "shaderStorageBufferArrayDynamicIndexing": true, + "shaderStorageImageArrayDynamicIndexing": true, + "shaderImageGatherExtended": true, + "shaderInt16": true, + "largePoints": true + }, + "VkPhysicalDeviceVulkan11Features": { + "storageBuffer16BitAccess": true, + "variablePointersStorageBuffer": true, + "variablePointers": true, + "samplerYcbcrConversion": true + }, + "VkPhysicalDeviceVulkan12Features": { + "samplerMirrorClampToEdge": true, + "storageBuffer8BitAccess": true, + "scalarBlockLayout": true, + "shaderInt8": true, + "shaderUniformTexelBufferArrayDynamicIndexing": true, + "shaderStorageTexelBufferArrayDynamicIndexing": true + }, + "VkPhysicalDeviceVulkan14Features": { + "globalPriorityQuery": true, + "shaderSubgroupRotate": true, + "shaderSubgroupRotateClustered": true, + "shaderFloatControls2": true, + "shaderExpectAssume": true, + "bresenhamLines": true, + "vertexAttributeInstanceRateDivisor": true, + "indexTypeUint8": true, + "dynamicRenderingLocalRead": true, + "maintenance5": true, + "maintenance6": true, + "pushDescriptor": true, + "pipelineRobustness": true + } + }, + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { + "maxImageDimension1D": 8192, + "maxImageDimension2D": 8192, + "maxImageDimension3D": 512, + "maxImageDimensionCube": 8192, + "maxImageArrayLayers": 2048, + "maxUniformBufferRange": 65536, + "maxPushConstantsSize": 256, + "bufferImageGranularity": 4096, + "maxBoundDescriptorSets": 7, + "maxPerStageDescriptorUniformBuffers": 15, + "maxPerStageResources": 200, + "maxDescriptorSetUniformBuffers": 90, + "maxDescriptorSetStorageBuffers": 96, + "maxDescriptorSetStorageImages": 144, + "maxFragmentCombinedOutputResources": 16, + "maxComputeWorkGroupInvocations": 256, + "maxComputeWorkGroupSize": [ + 256, + 256, + 64 + ], + "subTexelPrecisionBits": 8, + "mipmapPrecisionBits": 6, + "maxSamplerLodBias": 14, + "maxViewportDimensions": [ + 7680, + 7680 + ], + "viewportBoundsRange": [ + -15360, + 15359 + ], + "maxFramebufferWidth": 7680, + "maxFramebufferHeight": 7680, + "maxColorAttachments": 8, + "timestampComputeAndGraphics": true, + "pointSizeRange": [ + 1.0, + 256.0 + ], + "pointSizeGranularity": 0.125, + "lineWidthGranularity": 0.5, + "standardSampleLocations": true + } + }, + "VkPhysicalDeviceVulkan11Properties": { + "subgroupSupportedOperations": [ "VK_SUBGROUP_FEATURE_BASIC_BIT", "VK_SUBGROUP_FEATURE_CLUSTERED_BIT", "VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT" ] + }, + "VkPhysicalDeviceVulkan12Properties": { + "shaderSignedZeroInfNanPreserveFloat16": true, + "shaderSignedZeroInfNanPreserveFloat32": true + }, + "VkPhysicalDeviceVulkan14Properties": { + "maxPushDescriptors": 32 + } + } + }, + "vulkan14dependent": { + "features": { + "VkPhysicalDeviceVulkan14Features": { + "pipelineProtectedAccess": true + } + } } }, "profiles": { "VP_LUNARG_minimum_requirements_1_0": { "version": 1, "api-version": "1.0.68", - "label": "Vulkan Core 1.0 Minimum Requirements", - "description": "Vulkan Core 1.0 Minimum Requirements.", + "label": "Vulkan 1.0 Minimum Requirements", + "description": "Vulkan 1.0 Minimum Requirements.", "capabilities": [ "vulkan10requirements" ] @@ -351,8 +475,8 @@ "VP_LUNARG_minimum_requirements_1_1": { "version": 1, "api-version": "1.1.108", - "label": "Vulkan Core 1.1 Minimum Requirements", - "description": "Vulkan Core 1.1 Minimum Requirements.", + "label": "Vulkan 1.1 Minimum Requirements", + "description": "Vulkan 1.1 Minimum Requirements.", "capabilities": [ "vulkan10requirements", "vulkan11requirements_split" @@ -361,8 +485,8 @@ "VP_LUNARG_minimum_requirements_1_2": { "version": 1, "api-version": "1.2.131", - "label": "Vulkan Core 1.2 Minimum Requirements", - "description": "Vulkan Core 1.2 Minimum Requirements.", + "label": "Vulkan 1.2 Minimum Requirements", + "description": "Vulkan 1.2 Minimum Requirements.", "capabilities": [ "vulkan10requirements", "vulkan11requirements", @@ -372,14 +496,30 @@ "VP_LUNARG_minimum_requirements_1_3": { "version": 1, "api-version": "1.3.204", - "label": "Vulkan Core 1.3 Minimum Requirements", - "description": "Vulkan Core 1.3 Minimum Requirements.", + "label": "Vulkan 1.3 Minimum Requirements", + "description": "Vulkan 1.3 Minimum Requirements.", "capabilities": [ "vulkan10requirements", "vulkan11requirements", "vulkan12requirements", "vulkan13requirements" ] + }, + "VP_LUNARG_minimum_requirements_1_4": { + "version": 1, + "api-version": "1.4.304", + "label": "Vulkan 1.4 Minimum Requirements", + "description": "Vulkan 1.4 Minimum Requirements.", + "capabilities": [ + "vulkan10requirements", + "vulkan11requirements", + "vulkan12requirements", + "vulkan13requirements", + "vulkan14requirements" + ], + "optionals": [ + "vulkan14dependent" + ] } }, "contributors": { @@ -390,6 +530,12 @@ } }, "history": [ + { + "revision": 2, + "date": "2026-03-05", + "author": "Christophe Riccio", + "comment": "Add Vulkan 1.4 Minimum Requirements profile" + }, { "revision": 1, "date": "2023-11-01", diff --git a/profiles/hack/VP_KHR_roadmap.json b/profiles/hack/VP_KHR_roadmap.json index 87a4288f..cad5d877 100644 --- a/profiles/hack/VP_KHR_roadmap.json +++ b/profiles/hack/VP_KHR_roadmap.json @@ -24,6 +24,7 @@ "vulkan12requirements": { "features": { "VkPhysicalDeviceVulkan12Features": { + "samplerMirrorClampToEdge": true, "uniformBufferStandardLayout": true, "subgroupBroadcastDynamicId": true, "imagelessFramebuffer": true, @@ -125,6 +126,124 @@ } } }, + "vulkan14requirements": { + "features": { + "VkPhysicalDeviceFeatures": { + "fullDrawIndexUint32": true, + "imageCubeArray": true, + "independentBlend": true, + "sampleRateShading": true, + "drawIndirectFirstInstance": true, + "depthClamp": true, + "depthBiasClamp": true, + "samplerAnisotropy": true, + "fragmentStoresAndAtomics": true, + "shaderStorageImageExtendedFormats": true, + "shaderUniformBufferArrayDynamicIndexing": true, + "shaderSampledImageArrayDynamicIndexing": true, + "shaderStorageBufferArrayDynamicIndexing": true, + "shaderStorageImageArrayDynamicIndexing": true, + "shaderImageGatherExtended": true, + "shaderInt16": true, + "largePoints": true + }, + "VkPhysicalDeviceVulkan11Features": { + "storageBuffer16BitAccess": true, + "variablePointersStorageBuffer": true, + "variablePointers": true, + "samplerYcbcrConversion": true + }, + "VkPhysicalDeviceVulkan12Features": { + "samplerMirrorClampToEdge": true, + "storageBuffer8BitAccess": true, + "scalarBlockLayout": true, + "shaderInt8": true, + "shaderUniformTexelBufferArrayDynamicIndexing": true, + "shaderStorageTexelBufferArrayDynamicIndexing": true + }, + "VkPhysicalDeviceVulkan14Features": { + "globalPriorityQuery": true, + "shaderSubgroupRotate": true, + "shaderSubgroupRotateClustered": true, + "shaderFloatControls2": true, + "shaderExpectAssume": true, + "bresenhamLines": true, + "vertexAttributeInstanceRateDivisor": true, + "indexTypeUint8": true, + "dynamicRenderingLocalRead": true, + "maintenance5": true, + "maintenance6": true, + "pushDescriptor": true, + "pipelineRobustness": true + } + }, + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { + "maxImageDimension1D": 8192, + "maxImageDimension2D": 8192, + "maxImageDimension3D": 512, + "maxImageDimensionCube": 8192, + "maxImageArrayLayers": 2048, + "maxUniformBufferRange": 65536, + "maxPushConstantsSize": 256, + "bufferImageGranularity": 4096, + "maxBoundDescriptorSets": 7, + "maxPerStageDescriptorUniformBuffers": 15, + "maxPerStageResources": 200, + "maxDescriptorSetUniformBuffers": 90, + "maxDescriptorSetStorageBuffers": 96, + "maxDescriptorSetStorageImages": 144, + "maxFragmentCombinedOutputResources": 16, + "maxComputeWorkGroupInvocations": 256, + "maxComputeWorkGroupSize": [ + 256, + 256, + 64 + ], + "subTexelPrecisionBits": 8, + "mipmapPrecisionBits": 6, + "maxSamplerLodBias": 14, + "maxViewportDimensions": [ + 7680, + 7680 + ], + "viewportBoundsRange": [ + -15360, + 15359 + ], + "maxFramebufferWidth": 7680, + "maxFramebufferHeight": 7680, + "maxColorAttachments": 8, + "timestampComputeAndGraphics": true, + "pointSizeRange": [ + 1.0, + 256.0 + ], + "pointSizeGranularity": 0.125, + "lineWidthGranularity": 0.5, + "standardSampleLocations": true + } + }, + "VkPhysicalDeviceVulkan11Properties": { + "subgroupSupportedOperations": [ "VK_SUBGROUP_FEATURE_BASIC_BIT", "VK_SUBGROUP_FEATURE_CLUSTERED_BIT", "VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT" ] + }, + "VkPhysicalDeviceVulkan12Properties": { + "shaderSignedZeroInfNanPreserveFloat16": true, + "shaderSignedZeroInfNanPreserveFloat32": true + }, + "VkPhysicalDeviceVulkan14Properties": { + "maxPushDescriptors": 32 + } + } + }, + "vulkan14dependent": { + "features": { + "VkPhysicalDeviceVulkan14Features": { + "pipelineProtectedAccess": true + } + } + }, "vulkan10optionals_roadmap2022": { "features": { "VkPhysicalDeviceFeatures": { @@ -158,7 +277,6 @@ "vulkan12requirements_roadmap2022": { "features": { "VkPhysicalDeviceVulkan12Features": { - "samplerMirrorClampToEdge": true, "descriptorIndexing": true, "shaderUniformTexelBufferArrayDynamicIndexing": true, "shaderStorageTexelBufferArrayDynamicIndexing": true, @@ -203,12 +321,19 @@ } }, "vulkan13requirements_roadmap2022": { + "features": { + "VkPhysicalDeviceVulkan13Features": { + "descriptorBindingInlineUniformBlockUpdateAfterBind": true + } + } + }, + "vulkanextensionrequirements_roadmap2022_promoted_vulkan14": { "extensions": { "VK_KHR_global_priority": 1 }, "features": { - "VkPhysicalDeviceVulkan13Features": { - "descriptorBindingInlineUniformBlockUpdateAfterBind": true + "VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR": { + "globalPriorityQuery": true } } }, @@ -273,7 +398,7 @@ } } }, - "vulkanextensionrequirements_roadmap2024_only": { + "vulkanextensionrequirements_roadmap2024_promoted_vulkan14": { "extensions": { "VK_KHR_dynamic_rendering": 1, "VK_KHR_shader_subgroup_rotate": 1, @@ -296,14 +421,6 @@ "VkPhysicalDeviceShaderExpectAssumeFeaturesKHR": { "shaderExpectAssume": true }, - "VkPhysicalDeviceLineRasterizationFeaturesKHR": { - "rectangularLines": true, - "bresenhamLines": true, - "smoothLines": true, - "stippledRectangularLines": true, - "stippledBresenhamLines": true, - "stippledSmoothLines": true - }, "VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR": { "vertexAttributeInstanceRateDivisor": true }, @@ -318,6 +435,66 @@ } } }, + "vulkanextensionrequirements_roadmap2024_line0": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceLineRasterizationFeaturesKHR": { + "rectangularLines": true + } + } + }, + "vulkanextensionrequirements_roadmap2024_line1": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceLineRasterizationFeaturesKHR": { + "bresenhamLines": true + } + } + }, + "vulkanextensionrequirements_roadmap2024_line2": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceLineRasterizationFeaturesKHR": { + "smoothLines": true + } + } + }, + "vulkanextensionrequirements_roadmap2024_line3": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceLineRasterizationFeaturesKHR": { + "stippledRectangularLines": true + } + } + }, + "vulkanextensionrequirements_roadmap2024_line4": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceLineRasterizationFeaturesKHR": { + "stippledBresenhamLines": true + } + } + }, + "vulkanextensionrequirements_roadmap2024_line5": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceLineRasterizationFeaturesKHR": { + "stippledSmoothLines": true + } + } + }, "vulkan10requirements_roadmap2026": { "properties": { "VkPhysicalDeviceProperties": { @@ -349,6 +526,7 @@ "vulkan14requirements_roadmap2026": { "features": { "VkPhysicalDeviceVulkan14Features": { + "globalPriorityQuery": true, "shaderSubgroupRotate": true, "shaderExpectAssume": true, "shaderFloatControls2": true, @@ -367,13 +545,72 @@ } } }, + "vulkan14requirements_roadmap2026_line0": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceVulkan14Features": { + "rectangularLines": true + } + } + }, + "vulkan14requirements_roadmap2026_line1": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceVulkan14Features": { + "bresenhamLines": true + } + } + }, + "vulkan14requirements_roadmap2026_line2": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceVulkan14Features": { + "smoothLines": true + } + } + }, + "vulkan14requirements_roadmap2026_line3": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceVulkan14Features": { + "stippledRectangularLines": true + } + } + }, + "vulkan14requirements_roadmap2026_line4": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceVulkan14Features": { + "stippledBresenhamLines": true + } + } + }, + "vulkan14requirements_roadmap2026_line5": { + "extensions": { + "VK_KHR_line_rasterization": 1 + }, + "features": { + "VkPhysicalDeviceVulkan14Features": { + "stippledSmoothLines": true + } + } + }, "vulkanextensionrequirements_roadmap2026": { "extensions": { "VK_KHR_dynamic_rendering": 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_maintenance5": 1, @@ -455,30 +692,53 @@ "VkPhysicalDeviceCooperativeMatrixFeaturesKHR": { "cooperativeMatrix": true } + }, + "properties": { + "VkPhysicalDeviceMaintenance7PropertiesKHR": { + "maxDescriptorSetTotalUniformBuffersDynamic": 8, + "maxDescriptorSetTotalStorageBuffersDynamic": 4, + "maxDescriptorSetTotalBuffersDynamic": 12, + "maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic": 8, + "maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic": 4, + "maxDescriptorSetUpdateAfterBindTotalBuffersDynamic": 12 + } } } }, "profiles": { "VP_KHR_roadmap_2026": { - "version": 1, + "version": 2, "api-version": "1.4.328", "label": "Khronos Vulkan Roadmap 2026 profile", "description": "This roadmap profile is intended to be supported by newer devices shipping in 2026 across mainstream smartphone, tablet, laptops, console and desktop devices.", - "profiles": [ - "VP_KHR_roadmap_2022" - ], "capabilities": [ + "vulkan10requirements", + "vulkan11requirements", + "vulkan12requirements", + "vulkan13requirements", + "vulkan10requirements_roadmap2022", + "vulkan11requirements_roadmap2022", + "vulkan12requirements_roadmap2022", + "vulkan13requirements_roadmap2022", "vulkan10requirements_roadmap2024", "vulkan11requirements_roadmap2024", "vulkan12requirements_roadmap2024", "vulkanextensionrequirements_roadmap2024", "vulkan10requirements_roadmap2026", "vulkan14requirements_roadmap2026", + [ + "vulkan14requirements_roadmap2026_line0", + "vulkan14requirements_roadmap2026_line1", + "vulkan14requirements_roadmap2026_line2", + "vulkan14requirements_roadmap2026_line3", + "vulkan14requirements_roadmap2026_line4", + "vulkan14requirements_roadmap2026_line5" + ], "vulkanextensionrequirements_roadmap2026" ] }, "VP_KHR_roadmap_2024": { - "version": 1, + "version": 2, "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.", @@ -490,23 +750,32 @@ "vulkan11requirements_roadmap2024", "vulkan12requirements_roadmap2024", "vulkanextensionrequirements_roadmap2024", - "vulkanextensionrequirements_roadmap2024_only" + "vulkanextensionrequirements_roadmap2024_promoted_vulkan14", + [ + "vulkanextensionrequirements_roadmap2024_line0", + "vulkanextensionrequirements_roadmap2024_line1", + "vulkanextensionrequirements_roadmap2024_line2", + "vulkanextensionrequirements_roadmap2024_line3", + "vulkanextensionrequirements_roadmap2024_line4", + "vulkanextensionrequirements_roadmap2024_line5" + ] ] }, "VP_KHR_roadmap_2022": { - "version": 1, + "version": 2, "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.", "capabilities": [ "vulkan10requirements", - "vulkan10requirements_roadmap2022", "vulkan11requirements", - "vulkan11requirements_roadmap2022", "vulkan12requirements", - "vulkan12requirements_roadmap2022", "vulkan13requirements", - "vulkan13requirements_roadmap2022" + "vulkan10requirements_roadmap2022", + "vulkan11requirements_roadmap2022", + "vulkan12requirements_roadmap2022", + "vulkan13requirements_roadmap2022", + "vulkanextensionrequirements_roadmap2022_promoted_vulkan14" ], "optionals": [ "vulkan10optionals_roadmap2022" @@ -526,6 +795,12 @@ } }, "history": [ + { + "revision": 12, + "date": "2026-03-03", + "author": "Christophe Riccio", + "comment": "Fix `globalPriorityQuery` missing from profiles" + }, { "revision": 11, "date": "2026-01-28", diff --git a/profiles/test/CMakeLists.txt b/profiles/test/CMakeLists.txt index 93e036da..2d382873 100644 --- a/profiles/test/CMakeLists.txt +++ b/profiles/test/CMakeLists.txt @@ -1,5 +1,5 @@ # ~~~ -# Copyright (c) 2021-2025 LunarG, Inc. +# Copyright (c) 2021-2026 LunarG, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/profiles/test/test_validate.cpp b/profiles/test/test_validate.cpp index 3de2afd6..e36a623c 100644 --- a/profiles/test/test_validate.cpp +++ b/profiles/test/test_validate.cpp @@ -143,7 +143,7 @@ struct JsonValidator { std::string message; }; -TEST(test_validate, VP_LUNARG_test_structure_simple) { +TEST(test_validate_unit, VP_LUNARG_test_structure_simple) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_structure_simple.json"; @@ -151,7 +151,7 @@ TEST(test_validate, VP_LUNARG_test_structure_simple) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_structure_complex) { +TEST(test_validate_unit, VP_LUNARG_test_structure_complex) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_structure_complex.json"; @@ -159,7 +159,7 @@ TEST(test_validate, VP_LUNARG_test_structure_complex) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_structure_fallback) { +TEST(test_validate_unit, VP_LUNARG_test_structure_fallback) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_structure_fallback.json"; @@ -167,7 +167,7 @@ TEST(test_validate, VP_LUNARG_test_structure_fallback) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_vkformatproperties) { +TEST(test_validate_unit, VP_LUNARG_test_vkformatproperties) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_vkformatproperties.json"; @@ -175,7 +175,7 @@ TEST(test_validate, VP_LUNARG_test_vkformatproperties) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_vkqueuefamilyproperties) { +TEST(test_validate_unit, VP_LUNARG_test_vkqueuefamilyproperties) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_vkqueuefamilyproperties.json"; @@ -183,7 +183,7 @@ TEST(test_validate, VP_LUNARG_test_vkqueuefamilyproperties) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_api) { +TEST(test_validate_unit, VP_LUNARG_test_api) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_api.json"; @@ -191,7 +191,7 @@ TEST(test_validate, VP_LUNARG_test_api) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_api_alternate) { +TEST(test_validate_unit, VP_LUNARG_test_api_alternate) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_api_alternate.json"; @@ -199,7 +199,7 @@ TEST(test_validate, VP_LUNARG_test_api_alternate) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_promoted_api) { +TEST(test_validate_unit, VP_LUNARG_test_promoted_api) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_promoted_api.json"; @@ -207,7 +207,7 @@ TEST(test_validate, VP_LUNARG_test_promoted_api) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_api_generated) { +TEST(test_validate_unit, VP_LUNARG_test_api_generated) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_api_generated.json"; @@ -215,7 +215,7 @@ TEST(test_validate, VP_LUNARG_test_api_generated) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_duplicated) { +TEST(test_validate_unit, VP_LUNARG_test_duplicated) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_duplicated.json"; @@ -223,7 +223,7 @@ TEST(test_validate, VP_LUNARG_test_duplicated) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_test_formats) { +TEST(test_validate_unit, VP_LUNARG_test_formats) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_test_formats.json"; @@ -231,7 +231,7 @@ TEST(test_validate, VP_LUNARG_test_formats) { EXPECT_TRUE(validator.Check(document)); } -TEST(test_validate, VP_LUNARG_desktop_max_2024) { +TEST(test_validate_unit, VP_LUNARG_desktop_max_2024) { JsonValidator validator; const std::string path = std::string(JSON_TEST_FILES_PATH) + "VP_LUNARG_desktop_max_2024.json"; @@ -239,7 +239,7 @@ TEST(test_validate, VP_LUNARG_desktop_max_2024) { EXPECT_TRUE(validator.Check(json_document2)); } -TEST(test_validate, VP_LUNARG_minimum_requirements) { +TEST(test_validate_sdk, VP_LUNARG_minimum_requirements) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "VP_LUNARG_minimum_requirements.json"; @@ -247,7 +247,7 @@ TEST(test_validate, VP_LUNARG_minimum_requirements) { EXPECT_TRUE(validator.Check(json_document2)); } -TEST(test_validate, VP_LUNARG_desktop_baseline) { +TEST(test_validate_sdk, VP_LUNARG_desktop_baseline) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "VP_LUNARG_desktop_baseline.json"; @@ -255,7 +255,7 @@ TEST(test_validate, VP_LUNARG_desktop_baseline) { EXPECT_TRUE(validator.Check(json_document2)); } -TEST(test_validate, VP_KHR_roadmap) { +TEST(test_validate_sdk, VP_KHR_roadmap) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "VP_KHR_roadmap.json"; @@ -263,7 +263,7 @@ TEST(test_validate, VP_KHR_roadmap) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_baseline_2021) { +TEST(test_validate_android_deprecated, VP_ANDROID_baseline_2021) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "VP_ANDROID_baseline_2021.json"; @@ -271,7 +271,7 @@ TEST(test_validate, VP_ANDROID_baseline_2021) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_baseline_2022) { +TEST(test_validate_android_deprecated, VP_ANDROID_baseline_2022) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "VP_ANDROID_baseline_2022.json"; @@ -279,7 +279,7 @@ TEST(test_validate, VP_ANDROID_baseline_2022) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_15_minimums) { +TEST(test_validate_android_deprecated, VP_ANDROID_15_minimums) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "VP_ANDROID_15_minimums.json"; @@ -287,7 +287,7 @@ TEST(test_validate, VP_ANDROID_15_minimums) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_16_minimums) { +TEST(test_validate_android_deprecated, VP_ANDROID_16_minimums) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "VP_ANDROID_16_minimums.json"; @@ -295,7 +295,7 @@ TEST(test_validate, VP_ANDROID_16_minimums) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_vulkan_profile_2021) { +TEST(test_validate_android, VP_ANDROID_vulkan_profile_2021) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "Android/VP_ANDROID_vulkan_profile_2021.json"; @@ -303,7 +303,7 @@ TEST(test_validate, VP_ANDROID_vulkan_profile_2021) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_vulkan_profile_2022) { +TEST(test_validate_android, VP_ANDROID_vulkan_profile_2022) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "Android/VP_ANDROID_vulkan_profile_2022.json"; @@ -311,7 +311,7 @@ TEST(test_validate, VP_ANDROID_vulkan_profile_2022) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_vulkan_profile_2025) { +TEST(test_validate_android, VP_ANDROID_vulkan_profile_2025) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "Android/VP_ANDROID_vulkan_profile_2025.json"; @@ -319,7 +319,7 @@ TEST(test_validate, VP_ANDROID_vulkan_profile_2025) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_15_requirements) { +TEST(test_validate_android, VP_ANDROID_15_requirements) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "Android/VP_ANDROID_15_requirements.json"; @@ -327,7 +327,7 @@ TEST(test_validate, VP_ANDROID_15_requirements) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_16_requirements) { +TEST(test_validate_android, VP_ANDROID_16_requirements) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "Android/VP_ANDROID_16_requirements.json"; @@ -335,7 +335,7 @@ TEST(test_validate, VP_ANDROID_16_requirements) { EXPECT_TRUE(validator.Check(json_document3)); } -TEST(test_validate, VP_ANDROID_17_requirements) { +TEST(test_validate_android, VP_ANDROID_17_requirements) { JsonValidator validator; const std::string path = std::string(PROFILE_FILES_PATH) + "Android/VP_ANDROID_17_requirements.json"; diff --git a/scripts/gen_profiles_layer.py b/scripts/gen_profiles_layer.py index 583b7c31..c3b398ac 100644 --- a/scripts/gen_profiles_layer.py +++ b/scripts/gen_profiles_layer.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 # -# Copyright (c) 2021-2025 LunarG, Inc. +# Copyright (c) 2021-2026 LunarG, Inc. # Copyright (c) 2023-2024 RasterGrid Kft. # # Licensed under the Apache License, Version 2.0 (the "License") diff --git a/scripts/gen_profiles_solution.py b/scripts/gen_profiles_solution.py index bebf417b..5059aa03 100644 --- a/scripts/gen_profiles_solution.py +++ b/scripts/gen_profiles_solution.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 # -# Copyright (c) 2021-2025 LunarG, Inc. +# Copyright (c) 2021-2026 LunarG, Inc. # Copyright (c) 2023-2024 RasterGrid Kft. # # Licensed under the Apache License, Version 2.0 (the "License") @@ -72,8 +72,8 @@ def stripNonmatchingAPIs(tree, apiName, actuallyDelete = True): COPYRIGHT_HEADER = ''' /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License") * you may not use this file except in compliance with the License. @@ -1888,51 +1888,55 @@ def stripNonmatchingAPIs(tree, apiName, actuallyDelete = True): userData.variant = &variant_desc; - VkPhysicalDeviceFeatures2KHR features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR }; - userData.variant->chainers.pfnFeature( - static_cast(static_cast(&features)), &userData, - [](VkBaseOutStructure* p, void* pUser) { - UserData* pUserData = static_cast(pUser); - pUserData->gpdp2.pfnGetPhysicalDeviceFeatures2( - pUserData->physicalDevice, - static_cast(static_cast(p))); - - pUserData->supported = true; - while (p != nullptr) { - if (!pUserData->variant->feature.pfnComparator(p)) { - pUserData->supported = false; + if (supported_variant) { + VkPhysicalDeviceFeatures2KHR features{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR }; + userData.variant->chainers.pfnFeature( + static_cast(static_cast(&features)), &userData, + [](VkBaseOutStructure* p, void* pUser) { + UserData* pUserData = static_cast(pUser); + pUserData->gpdp2.pfnGetPhysicalDeviceFeatures2( + pUserData->physicalDevice, + static_cast(static_cast(p))); + + pUserData->supported = true; + while (p != nullptr) { + if (!pUserData->variant->feature.pfnComparator(p)) { + pUserData->supported = false; + } + p = p->pNext; } - p = p->pNext; } + ); + if (!userData.supported) { + supported_variant = false; } - ); - if (!userData.supported) { - supported_variant = false; } - VkPhysicalDeviceProperties2KHR device_properties2{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR }; - userData.variant->chainers.pfnProperty( - static_cast(static_cast(&device_properties2)), &userData, - [](VkBaseOutStructure* p, void* pUser) { - UserData* pUserData = static_cast(pUser); - pUserData->gpdp2.pfnGetPhysicalDeviceProperties2( - pUserData->physicalDevice, - static_cast(static_cast(p))); - - pUserData->supported = true; - while (p != nullptr) { - if (!pUserData->variant->property.pfnComparator(p)) { - pUserData->supported = false; + if (supported_variant) { + VkPhysicalDeviceProperties2KHR device_properties2{ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR }; + userData.variant->chainers.pfnProperty( + static_cast(static_cast(&device_properties2)), &userData, + [](VkBaseOutStructure* p, void* pUser) { + UserData* pUserData = static_cast(pUser); + pUserData->gpdp2.pfnGetPhysicalDeviceProperties2( + pUserData->physicalDevice, + static_cast(static_cast(p))); + + pUserData->supported = true; + while (p != nullptr) { + if (!pUserData->variant->property.pfnComparator(p)) { + pUserData->supported = false; + } + p = p->pNext; } - p = p->pNext; } + ); + if (!userData.supported) { + supported_variant = false; } - ); - if (!userData.supported) { - supported_variant = false; } - if (userData.variant->queueFamilyCount > 0) { + if (supported_variant && userData.variant->queueFamilyCount > 0) { uint32_t queue_family_count = 0; userData.gpdp2.pfnGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, &queue_family_count, nullptr); std::vector queueFamilyProps(queue_family_count, { VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR }); @@ -1971,7 +1975,7 @@ def stripNonmatchingAPIs(tree, apiName, actuallyDelete = True): } } - for (uint32_t format_index = 0; format_index < userData.variant->formatCount && supported_variant; ++format_index) { + for (uint32_t format_index = 0; supported_variant && (format_index < userData.variant->formatCount); ++format_index) { userData.index = format_index; VkFormatProperties2KHR format_properties2{ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR }; userData.variant->chainers.pfnFormat( @@ -1997,7 +2001,7 @@ def stripNonmatchingAPIs(tree, apiName, actuallyDelete = True): } #ifdef VK_KHR_video_queue - if (userData.variant->videoProfileCount > 0) { + if (supported_variant && (userData.variant->videoProfileCount > 0)) { VkVideoProfileListInfoKHR profile_list{ VK_STRUCTURE_TYPE_VIDEO_PROFILE_LIST_INFO_KHR }; profile_list.profileCount = 1; profile_list.pProfiles = &userData.video.profileInfo; @@ -2236,6 +2240,10 @@ def stripNonmatchingAPIs(tree, apiName, actuallyDelete = True): for (std::size_t caps_index = 0, caps_count = pProfileDesc->requiredCapabilityCount; caps_index < caps_count; ++caps_index) { const detail::VpCapabilitiesDesc* pCapsDesc = &pProfileDesc->pRequiredCapabilities[caps_index]; + if (pCapsDesc->variantCount > 1) { + continue; // Multiple variants are not supported by this version of vpCreateDevice + } + for (std::size_t variant_index = 0, variant_count = pCapsDesc->variantCount; variant_index < variant_count; ++variant_index) { const detail::VpVariantDesc* variant = &pCapsDesc->pVariants[variant_index]; @@ -5223,6 +5231,22 @@ def gen_structChainerFunc(self, structDefs, baseStruct): ' },\n') return gen + def gen_structFeaturesChainerFunc(self, structDefs, caps, baseStruct): + gen = ' [](VkBaseOutStructure* p, void* pUser, PFN_vpStructChainerCb pfnCb) {\n' + if structDefs: + pNext = 'nullptr' + for structDef in structDefs: + if structDef.name in caps: + if structDef.name != baseStruct: + varName = structDef.name[2].lower() + structDef.name[3:] + gen += ' {0} {1}{{ {2}, {3} }};\n'.format(structDef.name, varName, structDef.sType, pNext) + pNext = '&' + varName + gen += ' p->pNext = static_cast(static_cast({0}));\n'.format(pNext) + + gen += (' pfnCb(p, pUser);\n' + ' },\n') + return gen + def gen_structArrayChainerFunc(self, structDefs, baseStruct): gen = ' [](uint32_t count, VkBaseOutStructure* p, void* pUser, PFN_vpStructArrayChainerCb pfnCb) {\n' @@ -5337,7 +5361,7 @@ def gen_structDesc(self, capabilities, debugMessages): # Structure chaining descriptors gen += ('\n' 'static const VpStructChainerDesc chainerDesc = {\n') - gen += self.gen_structChainerFunc(self.structs.feature, 'VkPhysicalDeviceFeatures2KHR') + gen += self.gen_structFeaturesChainerFunc(self.structs.feature, capabilities.features, 'VkPhysicalDeviceFeatures2KHR') gen += self.gen_structChainerFunc(self.structs.property, 'VkPhysicalDeviceProperties2KHR') gen += self.gen_structArrayChainerFunc(self.structs.queueFamily, 'VkQueueFamilyProperties2KHR') gen += self.gen_structChainerFunc(self.structs.format, 'VkFormatProperties2KHR') @@ -6624,7 +6648,7 @@ def gen_videoFormats(self, definitions): DOC_MD_HEADER = '''

LunarG

-

Copyright (c) 2021-2025 LunarG, Inc.

+

Copyright (c) 2021-2026 LunarG, Inc.

diff --git a/scripts/gen_profiles_tests.py b/scripts/gen_profiles_tests.py index 0590e7b0..b615c48f 100644 --- a/scripts/gen_profiles_tests.py +++ b/scripts/gen_profiles_tests.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 # -# Copyright (c) 2021-2025 LunarG, Inc. +# Copyright (c) 2021-2026 LunarG, Inc. # Copyright (c) 2024 RasterGrid Kft. # # Licensed under the Apache License, Version 2.0 (the "License") @@ -62,8 +62,8 @@ TESTS_HEADER = ''' /* - * Copyright (C) 2021-2025 Valve Corporation - * Copyright (C) 2021-2025 LunarG, Inc. + * Copyright (C) 2021-2026 Valve Corporation + * Copyright (C) 2021-2026 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.