// *** THIS FILE IS GENERATED - DO NOT EDIT *** // See extension_helper_generator.py for modifications /*************************************************************************** * * Copyright (c) 2015-2024 The Khronos Group Inc. * Copyright (c) 2015-2024 Valve Corporation * Copyright (c) 2015-2024 LunarG, Inc. * Copyright (c) 2015-2024 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. ****************************************************************************/ // NOLINTBEGIN #pragma once #include <string> #include <utility> #include <array> #include <vector> #include <cassert> #include <vulkan/vulkan.h> #include "containers/custom_containers.h" #include "generated/vk_api_version.h" #include "generated/error_location_helper.h" // Extensions (unlike functions, struct, etc) are passed in as strings. // The goal is to turn the string to a enum and pass that around the layers. // Only when we need to print an error do we try and turn it back into a string vvl::Extension GetExtension(std::string extension); enum ExtEnabled : unsigned char { … }; // Map of promoted extension information per version (a separate map exists for instance and device extensions). // The map is keyed by the version number (e.g. VK_API_VERSION_1_1) and each value is a pair consisting of the // version string (e.g. "VK_VERSION_1_1") and the set of name of the promoted extensions. PromotedExtensionInfoMap; const PromotedExtensionInfoMap &GetInstancePromotionInfoMap(); const PromotedExtensionInfoMap &GetDevicePromotionInfoMap(); /* This function is a helper to know if the extension is enabled. Times to use it - To determine the VUID - The VU mentions the use of the extension - Extension exposes property limits being validated - Checking not enabled - if (!IsExtEnabled(...)) { } - Special extensions that being EXPOSED alters the VUs - IsExtEnabled(device_extensions.vk_khr_portability_subset) - Special extensions that alter behaviour of enabled - IsExtEnabled(device_extensions.vk_khr_maintenance*) Times to NOT use it - If checking if a struct or enum is being used. There are a stateless checks to make sure the new Structs/Enums are not being used without this enabled. - If checking if the extension's feature enable status, because if the feature is enabled, then we already validated that extension is enabled. - Some variables (ex. viewMask) require the extension to be used if non-zero */ [[maybe_unused]] static bool IsExtEnabled(ExtEnabled extension) { … } [[maybe_unused]] static bool IsExtEnabledByCreateinfo(ExtEnabled extension) { … } struct InstanceExtensions { … }; struct DeviceExtensions : public InstanceExtensions { … }; const InstanceExtensions::Info &GetInstanceVersionMap(const char *version); const DeviceExtensions::Info &GetDeviceVersionMap(const char *version); constexpr bool IsInstanceExtension(vvl::Extension extension) { … } constexpr bool IsDeviceExtension(vvl::Extension extension) { … } // NOLINTEND