diff --git a/BUILD.gn b/BUILD.gn index e5c36a5411c..ccf8e94520b 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -222,8 +222,8 @@ object_lifetimes_sources = [ ] stateless_validation_sources = [ - "layers/vulkan/generated/parameter_validation.cpp", - "layers/vulkan/generated/parameter_validation.h", + "layers/vulkan/generated/stateless_validation_helper.cpp", + "layers/vulkan/generated/stateless_validation_helper.h", "layers/vulkan/generated/enum_flag_bits.h", "layers/stateless/parameter_name.h", "layers/stateless/sl_buffer.cpp", @@ -288,8 +288,8 @@ chassis_sources = [ "$vulkan_headers_dir/include/vulkan/vk_layer.h", "$vulkan_headers_dir/include/vulkan/vulkan.h", "layers/vulkan/generated/chassis.cpp", - "layers/vulkan/generated/valid_param_values.cpp", - "layers/vulkan/generated/valid_param_values.h", + "layers/vulkan/generated/valid_enum_values.cpp", + "layers/vulkan/generated/valid_enum_values.h", "layers/vulkan/generated/chassis.h", "layers/vulkan/generated/chassis_dispatch_helper.h", "layers/vulkan/generated/layer_chassis_dispatch.cpp", diff --git a/build-android/jni/Android.mk b/build-android/jni/Android.mk index b3418c3ff1c..9a315283df5 100644 --- a/build-android/jni/Android.mk +++ b/build-android/jni/Android.mk @@ -112,14 +112,14 @@ LOCAL_SRC_FILES += $(SRC_DIR)/layers/sync/sync_validation.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/utils/convert_utils.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/vulkan/generated/layer_chassis_dispatch.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/vulkan/generated/chassis.cpp -LOCAL_SRC_FILES += $(SRC_DIR)/layers/vulkan/generated/valid_param_values.cpp +LOCAL_SRC_FILES += $(SRC_DIR)/layers/vulkan/generated/valid_enum_values.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/layer_options.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/core_checks/cc_query.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/core_checks/cc_queue.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/core_checks/cc_ray_tracing.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/core_checks/cc_wsi.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/core_checks/cc_ycbcr.cpp -LOCAL_SRC_FILES += $(SRC_DIR)/layers/vulkan/generated/parameter_validation.cpp +LOCAL_SRC_FILES += $(SRC_DIR)/layers/vulkan/generated/stateless_validation_helper.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/stateless/sl_buffer.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/stateless/sl_cmd_buffer_dynamic.cpp LOCAL_SRC_FILES += $(SRC_DIR)/layers/stateless/sl_cmd_buffer.cpp diff --git a/layers/CMakeLists.txt b/layers/CMakeLists.txt index 3df9578c2ef..63dfb85d628 100644 --- a/layers/CMakeLists.txt +++ b/layers/CMakeLists.txt @@ -243,17 +243,18 @@ target_sources(vvl PRIVATE ${API_TYPE}/generated/best_practices.cpp ${API_TYPE}/generated/best_practices.h ${API_TYPE}/generated/chassis.cpp - ${API_TYPE}/generated/valid_param_values.cpp + ${API_TYPE}/generated/valid_enum_values.cpp + ${API_TYPE}/generated/valid_enum_values.h ${API_TYPE}/generated/command_validation.cpp ${API_TYPE}/generated/dynamic_state_helper.cpp ${API_TYPE}/generated/enum_flag_bits.h ${API_TYPE}/generated/layer_chassis_dispatch.cpp ${API_TYPE}/generated/object_tracker.cpp ${API_TYPE}/generated/object_tracker.h - ${API_TYPE}/generated/parameter_validation.cpp - ${API_TYPE}/generated/parameter_validation.h ${API_TYPE}/generated/spirv_grammar_helper.cpp ${API_TYPE}/generated/spirv_validation_helper.cpp + ${API_TYPE}/generated/stateless_validation_helper.cpp + ${API_TYPE}/generated/stateless_validation_helper.h ${API_TYPE}/generated/sync_validation_types.cpp ${API_TYPE}/generated/thread_safety.cpp ${API_TYPE}/generated/thread_safety_commands.h diff --git a/layers/stateless/sl_ray_tracing.cpp b/layers/stateless/sl_ray_tracing.cpp index 569346a5505..97c3252e120 100644 --- a/layers/stateless/sl_ray_tracing.cpp +++ b/layers/stateless/sl_ray_tracing.cpp @@ -167,7 +167,7 @@ bool StatelessValidation::ValidateAccelerationStructureInfoNV(const VkAccelerati } } skip |= - ValidateFlags(func_name, "info.flags", "VkBuildAccelerationStructureFlagBitsNV", AllVkBuildAccelerationStructureFlagBitsNV, + ValidateFlags(func_name, "info.flags", "VkBuildAccelerationStructureFlagBitsNV", AllVkBuildAccelerationStructureFlagBitsKHR, info.flags, kOptionalFlags, "VUID-VkAccelerationStructureInfoNV-flags-parameter"); return skip; } diff --git a/layers/stateless/stateless_validation.h b/layers/stateless/stateless_validation.h index 383a2cb9852..37c1fc83a9f 100644 --- a/layers/stateless/stateless_validation.h +++ b/layers/stateless/stateless_validation.h @@ -1140,5 +1140,5 @@ class StatelessValidation : public ValidationObject { bool manual_PreCallValidateExportMetalObjectsEXT(VkDevice device, VkExportMetalObjectsInfoEXT *pMetalObjectsInfo) const; #endif // VK_USE_PLATFORM_METAL_EXT -#include "generated/parameter_validation.h" +#include "generated/stateless_validation_helper.h" }; // Class StatelessValidation diff --git a/layers/vulkan/generated/chassis.h b/layers/vulkan/generated/chassis.h index c5c5a30b0b0..10cdb579390 100644 --- a/layers/vulkan/generated/chassis.h +++ b/layers/vulkan/generated/chassis.h @@ -6302,4 +6302,4 @@ class ValidationObject { }; extern small_unordered_map layer_data_map; -#include "valid_param_values.h" +#include "valid_enum_values.h" diff --git a/layers/vulkan/generated/enum_flag_bits.h b/layers/vulkan/generated/enum_flag_bits.h index 53f428fb53d..e70b73ffd1b 100644 --- a/layers/vulkan/generated/enum_flag_bits.h +++ b/layers/vulkan/generated/enum_flag_bits.h @@ -1,146 +1,150 @@ -/* *** THIS FILE IS GENERATED - DO NOT EDIT! *** - * See parameter_validation_generator.py for modifications - * - * Copyright (c) 2015-2023 The Khronos Group Inc. - * Copyright (c) 2015-2023 LunarG, Inc. - * Copyright (C) 2015-2023 Google Inc. - * Copyright (c) 2015-2023 Valve Corporation - * - * 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 FILE IS GENERATED - DO NOT EDIT *** +// See enum_flag_bits_generator.py for modifications +/*************************************************************************** +* +* Copyright (c) 2015-2023 The Khronos Group Inc. +* Copyright (c) 2015-2023 Valve Corporation +* Copyright (c) 2015-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. +****************************************************************************/ +// NOLINTBEGIN #pragma once #include #include "vulkan/vulkan.h" - const uint32_t GeneratedVulkanHeaderVersion = 255; const VkAccessFlags AllVkAccessFlagBits = VK_ACCESS_INDIRECT_COMMAND_READ_BIT|VK_ACCESS_INDEX_READ_BIT|VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT|VK_ACCESS_UNIFORM_READ_BIT|VK_ACCESS_INPUT_ATTACHMENT_READ_BIT|VK_ACCESS_SHADER_READ_BIT|VK_ACCESS_SHADER_WRITE_BIT|VK_ACCESS_COLOR_ATTACHMENT_READ_BIT|VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT|VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT|VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT|VK_ACCESS_TRANSFER_READ_BIT|VK_ACCESS_TRANSFER_WRITE_BIT|VK_ACCESS_HOST_READ_BIT|VK_ACCESS_HOST_WRITE_BIT|VK_ACCESS_MEMORY_READ_BIT|VK_ACCESS_MEMORY_WRITE_BIT|VK_ACCESS_NONE|VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT|VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT|VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT|VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT|VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT|VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR|VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR|VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT|VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR|VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV|VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV; -const VkAttachmentDescriptionFlags AllVkAttachmentDescriptionFlagBits = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT; -const VkBufferCreateFlags AllVkBufferCreateFlagBits = VK_BUFFER_CREATE_SPARSE_BINDING_BIT|VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT|VK_BUFFER_CREATE_SPARSE_ALIASED_BIT|VK_BUFFER_CREATE_PROTECTED_BIT|VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT|VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; -const VkBufferUsageFlags AllVkBufferUsageFlagBits = VK_BUFFER_USAGE_TRANSFER_SRC_BIT|VK_BUFFER_USAGE_TRANSFER_DST_BIT|VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT|VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT|VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT|VK_BUFFER_USAGE_STORAGE_BUFFER_BIT|VK_BUFFER_USAGE_INDEX_BUFFER_BIT|VK_BUFFER_USAGE_VERTEX_BUFFER_BIT|VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT|VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT|VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR|VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR|VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT|VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT|VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT|VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR|VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR|VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR|VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR|VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR|VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT|VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT|VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT|VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT|VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT; -const VkColorComponentFlags AllVkColorComponentFlagBits = VK_COLOR_COMPONENT_R_BIT|VK_COLOR_COMPONENT_G_BIT|VK_COLOR_COMPONENT_B_BIT|VK_COLOR_COMPONENT_A_BIT; -const VkCommandBufferResetFlags AllVkCommandBufferResetFlagBits = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT; -const VkCommandBufferUsageFlags AllVkCommandBufferUsageFlagBits = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT|VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT|VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT; -const VkCommandPoolCreateFlags AllVkCommandPoolCreateFlagBits = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT|VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT|VK_COMMAND_POOL_CREATE_PROTECTED_BIT; -const VkCommandPoolResetFlags AllVkCommandPoolResetFlagBits = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT; -const VkCullModeFlags AllVkCullModeFlagBits = VK_CULL_MODE_NONE|VK_CULL_MODE_FRONT_BIT|VK_CULL_MODE_BACK_BIT|VK_CULL_MODE_FRONT_AND_BACK; -const VkDependencyFlags AllVkDependencyFlagBits = VK_DEPENDENCY_BY_REGION_BIT|VK_DEPENDENCY_DEVICE_GROUP_BIT|VK_DEPENDENCY_VIEW_LOCAL_BIT|VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT; -const VkDescriptorPoolCreateFlags AllVkDescriptorPoolCreateFlagBits = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT|VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT|VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT; -const VkDescriptorSetLayoutCreateFlags AllVkDescriptorSetLayoutCreateFlagBits = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT|VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR|VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT|VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT|VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT; +const VkImageAspectFlags AllVkImageAspectFlagBits = VK_IMAGE_ASPECT_COLOR_BIT|VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT|VK_IMAGE_ASPECT_METADATA_BIT|VK_IMAGE_ASPECT_PLANE_0_BIT|VK_IMAGE_ASPECT_PLANE_1_BIT|VK_IMAGE_ASPECT_PLANE_2_BIT|VK_IMAGE_ASPECT_NONE|VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT|VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT|VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT|VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT; +const VkInstanceCreateFlags AllVkInstanceCreateFlagBits = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; const VkDeviceQueueCreateFlags AllVkDeviceQueueCreateFlagBits = VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT; -const VkEventCreateFlags AllVkEventCreateFlagBits = VK_EVENT_CREATE_DEVICE_ONLY_BIT; +const VkPipelineStageFlags AllVkPipelineStageFlagBits = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT|VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT|VK_PIPELINE_STAGE_VERTEX_INPUT_BIT|VK_PIPELINE_STAGE_VERTEX_SHADER_BIT|VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT|VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT|VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT|VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT|VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT|VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT|VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT|VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT|VK_PIPELINE_STAGE_TRANSFER_BIT|VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT|VK_PIPELINE_STAGE_HOST_BIT|VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT|VK_PIPELINE_STAGE_ALL_COMMANDS_BIT|VK_PIPELINE_STAGE_NONE|VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT|VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT|VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR|VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR|VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT|VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR|VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV|VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT|VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT; +const VkSparseMemoryBindFlags AllVkSparseMemoryBindFlagBits = VK_SPARSE_MEMORY_BIND_METADATA_BIT; const VkFenceCreateFlags AllVkFenceCreateFlagBits = VK_FENCE_CREATE_SIGNALED_BIT; -const VkFormatFeatureFlags AllVkFormatFeatureFlagBits = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT|VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT|VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT|VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT|VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT|VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT|VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT|VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT|VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT|VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT|VK_FORMAT_FEATURE_BLIT_SRC_BIT|VK_FORMAT_FEATURE_BLIT_DST_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT|VK_FORMAT_FEATURE_TRANSFER_SRC_BIT|VK_FORMAT_FEATURE_TRANSFER_DST_BIT|VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT|VK_FORMAT_FEATURE_DISJOINT_BIT|VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT|VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR|VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR|VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR|VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT|VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT|VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR|VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR|VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR; -const VkFramebufferCreateFlags AllVkFramebufferCreateFlagBits = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT; -const VkImageAspectFlags AllVkImageAspectFlagBits = VK_IMAGE_ASPECT_COLOR_BIT|VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT|VK_IMAGE_ASPECT_METADATA_BIT|VK_IMAGE_ASPECT_PLANE_0_BIT|VK_IMAGE_ASPECT_PLANE_1_BIT|VK_IMAGE_ASPECT_PLANE_2_BIT|VK_IMAGE_ASPECT_NONE|VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT|VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT|VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT|VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT; +const VkEventCreateFlags AllVkEventCreateFlagBits = VK_EVENT_CREATE_DEVICE_ONLY_BIT; +const VkQueryPipelineStatisticFlags AllVkQueryPipelineStatisticFlagBits = 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_FRAGMENT_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT|VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT|VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT|VK_QUERY_PIPELINE_STATISTIC_CLUSTER_CULLING_SHADER_INVOCATIONS_BIT_HUAWEI; +const VkBufferCreateFlags AllVkBufferCreateFlagBits = VK_BUFFER_CREATE_SPARSE_BINDING_BIT|VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT|VK_BUFFER_CREATE_SPARSE_ALIASED_BIT|VK_BUFFER_CREATE_PROTECTED_BIT|VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT|VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT; +const VkBufferUsageFlags AllVkBufferUsageFlagBits = VK_BUFFER_USAGE_TRANSFER_SRC_BIT|VK_BUFFER_USAGE_TRANSFER_DST_BIT|VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT|VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT|VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT|VK_BUFFER_USAGE_STORAGE_BUFFER_BIT|VK_BUFFER_USAGE_INDEX_BUFFER_BIT|VK_BUFFER_USAGE_VERTEX_BUFFER_BIT|VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT|VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT|VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR|VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR|VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT|VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT|VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT|VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR|VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR|VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR|VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR|VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR|VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT|VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT|VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT|VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT|VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT; const VkImageCreateFlags AllVkImageCreateFlagBits = VK_IMAGE_CREATE_SPARSE_BINDING_BIT|VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT|VK_IMAGE_CREATE_SPARSE_ALIASED_BIT|VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT|VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT|VK_IMAGE_CREATE_ALIAS_BIT|VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT|VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT|VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT|VK_IMAGE_CREATE_EXTENDED_USAGE_BIT|VK_IMAGE_CREATE_PROTECTED_BIT|VK_IMAGE_CREATE_DISJOINT_BIT|VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV|VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT|VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT|VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT|VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT|VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT|VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM; +const VkSampleCountFlags AllVkSampleCountFlagBits = VK_SAMPLE_COUNT_1_BIT|VK_SAMPLE_COUNT_2_BIT|VK_SAMPLE_COUNT_4_BIT|VK_SAMPLE_COUNT_8_BIT|VK_SAMPLE_COUNT_16_BIT|VK_SAMPLE_COUNT_32_BIT|VK_SAMPLE_COUNT_64_BIT; const VkImageUsageFlags AllVkImageUsageFlagBits = VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_STORAGE_BIT|VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT|VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT|VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR|VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR|VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR|VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT|VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR|VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR|VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR|VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR|VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT|VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI|VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM|VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM; const VkImageViewCreateFlags AllVkImageViewCreateFlagBits = VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT|VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT|VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT; -const VkInstanceCreateFlags AllVkInstanceCreateFlagBits = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; const VkPipelineCacheCreateFlags AllVkPipelineCacheCreateFlagBits = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT; -const VkPipelineColorBlendStateCreateFlags AllVkPipelineColorBlendStateCreateFlagBits = VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT; +const VkPipelineShaderStageCreateFlags AllVkPipelineShaderStageCreateFlagBits = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT|VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT; +const VkShaderStageFlags AllVkShaderStageFlagBits = 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|VK_SHADER_STAGE_COMPUTE_BIT|VK_SHADER_STAGE_ALL_GRAPHICS|VK_SHADER_STAGE_ALL|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|VK_SHADER_STAGE_CALLABLE_BIT_KHR|VK_SHADER_STAGE_TASK_BIT_EXT|VK_SHADER_STAGE_MESH_BIT_EXT|VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI|VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI; const VkPipelineCreateFlags AllVkPipelineCreateFlagBits = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT|VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT|VK_PIPELINE_CREATE_DERIVATIVE_BIT|VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT|VK_PIPELINE_CREATE_DISPATCH_BASE_BIT|VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT|VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT|VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR|VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT|VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR|VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR|VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR|VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR|VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR|VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR|VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR|VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV|VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR|VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR|VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV|VK_PIPELINE_CREATE_LIBRARY_BIT_KHR|VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT|VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT|VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT|VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV|VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT|VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT|VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT|VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV|VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT|VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT; +const VkCullModeFlags AllVkCullModeFlagBits = VK_CULL_MODE_NONE|VK_CULL_MODE_FRONT_BIT|VK_CULL_MODE_BACK_BIT|VK_CULL_MODE_FRONT_AND_BACK; const VkPipelineDepthStencilStateCreateFlags AllVkPipelineDepthStencilStateCreateFlagBits = 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_EXT; +const VkColorComponentFlags AllVkColorComponentFlagBits = VK_COLOR_COMPONENT_R_BIT|VK_COLOR_COMPONENT_G_BIT|VK_COLOR_COMPONENT_B_BIT|VK_COLOR_COMPONENT_A_BIT; +const VkPipelineColorBlendStateCreateFlags AllVkPipelineColorBlendStateCreateFlagBits = VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT; const VkPipelineLayoutCreateFlags AllVkPipelineLayoutCreateFlagBits = VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT; -const VkPipelineShaderStageCreateFlags AllVkPipelineShaderStageCreateFlagBits = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT|VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT; -const VkPipelineStageFlags AllVkPipelineStageFlagBits = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT|VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT|VK_PIPELINE_STAGE_VERTEX_INPUT_BIT|VK_PIPELINE_STAGE_VERTEX_SHADER_BIT|VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT|VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT|VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT|VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT|VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT|VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT|VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT|VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT|VK_PIPELINE_STAGE_TRANSFER_BIT|VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT|VK_PIPELINE_STAGE_HOST_BIT|VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT|VK_PIPELINE_STAGE_ALL_COMMANDS_BIT|VK_PIPELINE_STAGE_NONE|VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT|VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT|VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR|VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR|VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT|VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR|VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV|VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT|VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT; -const VkQueryControlFlags AllVkQueryControlFlagBits = VK_QUERY_CONTROL_PRECISE_BIT; -const VkQueryPipelineStatisticFlags AllVkQueryPipelineStatisticFlagBits = 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_FRAGMENT_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT|VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT|VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT|VK_QUERY_PIPELINE_STATISTIC_CLUSTER_CULLING_SHADER_INVOCATIONS_BIT_HUAWEI; -const VkQueryResultFlags AllVkQueryResultFlagBits = VK_QUERY_RESULT_64_BIT|VK_QUERY_RESULT_WAIT_BIT|VK_QUERY_RESULT_WITH_AVAILABILITY_BIT|VK_QUERY_RESULT_PARTIAL_BIT|VK_QUERY_RESULT_WITH_STATUS_BIT_KHR; -const VkRenderPassCreateFlags AllVkRenderPassCreateFlagBits = VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM; -const VkSampleCountFlags AllVkSampleCountFlagBits = VK_SAMPLE_COUNT_1_BIT|VK_SAMPLE_COUNT_2_BIT|VK_SAMPLE_COUNT_4_BIT|VK_SAMPLE_COUNT_8_BIT|VK_SAMPLE_COUNT_16_BIT|VK_SAMPLE_COUNT_32_BIT|VK_SAMPLE_COUNT_64_BIT; const VkSamplerCreateFlags AllVkSamplerCreateFlagBits = VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT|VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT|VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT|VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT|VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM; -const VkShaderStageFlags AllVkShaderStageFlagBits = 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|VK_SHADER_STAGE_COMPUTE_BIT|VK_SHADER_STAGE_ALL_GRAPHICS|VK_SHADER_STAGE_ALL|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|VK_SHADER_STAGE_CALLABLE_BIT_KHR|VK_SHADER_STAGE_TASK_BIT_EXT|VK_SHADER_STAGE_MESH_BIT_EXT|VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI|VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI; -const VkSparseMemoryBindFlags AllVkSparseMemoryBindFlagBits = VK_SPARSE_MEMORY_BIND_METADATA_BIT; -const VkStencilFaceFlags AllVkStencilFaceFlagBits = VK_STENCIL_FACE_FRONT_BIT|VK_STENCIL_FACE_BACK_BIT|VK_STENCIL_FACE_FRONT_AND_BACK; +const VkDescriptorPoolCreateFlags AllVkDescriptorPoolCreateFlagBits = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT|VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT|VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT; +const VkDescriptorSetLayoutCreateFlags AllVkDescriptorSetLayoutCreateFlagBits = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT|VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR|VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT|VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT|VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT; +const VkAttachmentDescriptionFlags AllVkAttachmentDescriptionFlagBits = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT; +const VkFramebufferCreateFlags AllVkFramebufferCreateFlagBits = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT; const VkSubpassDescriptionFlags AllVkSubpassDescriptionFlagBits = VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX|VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX|VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM|VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM|VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT|VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT|VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT|VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT; -const VkExternalFenceHandleTypeFlags AllVkExternalFenceHandleTypeFlagBits = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT|VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT|VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT|VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT; +const VkDependencyFlags AllVkDependencyFlagBits = VK_DEPENDENCY_BY_REGION_BIT|VK_DEPENDENCY_DEVICE_GROUP_BIT|VK_DEPENDENCY_VIEW_LOCAL_BIT|VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT; +const VkRenderPassCreateFlags AllVkRenderPassCreateFlagBits = VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM; +const VkCommandPoolCreateFlags AllVkCommandPoolCreateFlagBits = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT|VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT|VK_COMMAND_POOL_CREATE_PROTECTED_BIT; +const VkQueryControlFlags AllVkQueryControlFlagBits = VK_QUERY_CONTROL_PRECISE_BIT; +const VkCommandBufferUsageFlags AllVkCommandBufferUsageFlagBits = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT|VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT|VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT; +const VkMemoryAllocateFlags AllVkMemoryAllocateFlagBits = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT|VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT|VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT; const VkExternalMemoryHandleTypeFlags AllVkExternalMemoryHandleTypeFlagBits = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT|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|VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID|VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT|VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA|VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV|VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX; +const VkExternalFenceHandleTypeFlags AllVkExternalFenceHandleTypeFlagBits = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT|VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT|VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT|VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT; const VkExternalSemaphoreHandleTypeFlags AllVkExternalSemaphoreHandleTypeFlagBits = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT|VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA; -const VkFenceImportFlags AllVkFenceImportFlagBits = VK_FENCE_IMPORT_TEMPORARY_BIT; -const VkMemoryAllocateFlags AllVkMemoryAllocateFlagBits = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT|VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT|VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT; -const VkSemaphoreImportFlags AllVkSemaphoreImportFlagBits = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT; const VkDescriptorBindingFlags AllVkDescriptorBindingFlagBits = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT|VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT|VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT|VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT; const VkResolveModeFlags AllVkResolveModeFlagBits = VK_RESOLVE_MODE_NONE|VK_RESOLVE_MODE_SAMPLE_ZERO_BIT|VK_RESOLVE_MODE_AVERAGE_BIT|VK_RESOLVE_MODE_MIN_BIT|VK_RESOLVE_MODE_MAX_BIT; const VkSemaphoreWaitFlags AllVkSemaphoreWaitFlagBits = VK_SEMAPHORE_WAIT_ANY_BIT; -const VkAccessFlags2 AllVkAccessFlagBits2 = VK_ACCESS_2_NONE|VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT|VK_ACCESS_2_INDEX_READ_BIT|VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT|VK_ACCESS_2_UNIFORM_READ_BIT|VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT|VK_ACCESS_2_SHADER_READ_BIT|VK_ACCESS_2_SHADER_WRITE_BIT|VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT|VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT|VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT|VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT|VK_ACCESS_2_TRANSFER_READ_BIT|VK_ACCESS_2_TRANSFER_WRITE_BIT|VK_ACCESS_2_HOST_READ_BIT|VK_ACCESS_2_HOST_WRITE_BIT|VK_ACCESS_2_MEMORY_READ_BIT|VK_ACCESS_2_MEMORY_WRITE_BIT|VK_ACCESS_2_SHADER_SAMPLED_READ_BIT|VK_ACCESS_2_SHADER_STORAGE_READ_BIT|VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT|VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR|VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR|VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR|VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR|VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT|VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT|VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT|VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT|VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV|VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV|VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR|VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR|VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR|VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT|VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT|VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT|VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI|VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR|VK_ACCESS_2_MICROMAP_READ_BIT_EXT|VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT|VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV|VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV; const VkPipelineStageFlags2 AllVkPipelineStageFlagBits2 = VK_PIPELINE_STAGE_2_NONE|VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT|VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT|VK_PIPELINE_STAGE_2_VERTEX_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_FRAGMENT_SHADER_BIT|VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT|VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT|VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT|VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT|VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT|VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT|VK_PIPELINE_STAGE_2_HOST_BIT|VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT|VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT|VK_PIPELINE_STAGE_2_COPY_BIT|VK_PIPELINE_STAGE_2_RESOLVE_BIT|VK_PIPELINE_STAGE_2_BLIT_BIT|VK_PIPELINE_STAGE_2_CLEAR_BIT|VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT|VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT|VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT|VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR|VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR|VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT|VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT|VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV|VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR|VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR|VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR|VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT|VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT|VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT|VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI|VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI|VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR|VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT|VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI|VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV; -// mask of all the VK_PIPELINE_STAGE_*_SHADER_BIT stages -const VkPipelineStageFlagBits2 allVkPipelineShaderStageBits2 = 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_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR | VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT | VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT | VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI; -const VkRenderingFlags AllVkRenderingFlagBits = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT|VK_RENDERING_SUSPENDING_BIT|VK_RENDERING_RESUMING_BIT|VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT|VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT; +const VkAccessFlags2 AllVkAccessFlagBits2 = VK_ACCESS_2_NONE|VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT|VK_ACCESS_2_INDEX_READ_BIT|VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT|VK_ACCESS_2_UNIFORM_READ_BIT|VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT|VK_ACCESS_2_SHADER_READ_BIT|VK_ACCESS_2_SHADER_WRITE_BIT|VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT|VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT|VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT|VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT|VK_ACCESS_2_TRANSFER_READ_BIT|VK_ACCESS_2_TRANSFER_WRITE_BIT|VK_ACCESS_2_HOST_READ_BIT|VK_ACCESS_2_HOST_WRITE_BIT|VK_ACCESS_2_MEMORY_READ_BIT|VK_ACCESS_2_MEMORY_WRITE_BIT|VK_ACCESS_2_SHADER_SAMPLED_READ_BIT|VK_ACCESS_2_SHADER_STORAGE_READ_BIT|VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT|VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR|VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR|VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR|VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR|VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT|VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT|VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT|VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT|VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV|VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV|VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR|VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR|VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR|VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT|VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT|VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT|VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI|VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR|VK_ACCESS_2_MICROMAP_READ_BIT_EXT|VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT|VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV|VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV; const VkSubmitFlags AllVkSubmitFlagBits = VK_SUBMIT_PROTECTED_BIT; -const VkCompositeAlphaFlagsKHR AllVkCompositeAlphaFlagBitsKHR = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR|VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR|VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR|VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR; +const VkRenderingFlags AllVkRenderingFlagBits = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT|VK_RENDERING_SUSPENDING_BIT|VK_RENDERING_RESUMING_BIT|VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT; +const VkSwapchainCreateFlagsKHR AllVkSwapchainCreateFlagBitsKHR = VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR|VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR|VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR|VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT; const VkSurfaceTransformFlagsKHR AllVkSurfaceTransformFlagBitsKHR = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR|VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR|VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR|VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR|VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR|VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR|VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR|VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR|VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR; +const VkCompositeAlphaFlagsKHR AllVkCompositeAlphaFlagBitsKHR = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR|VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR|VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR|VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR; const VkDeviceGroupPresentModeFlagsKHR AllVkDeviceGroupPresentModeFlagBitsKHR = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR|VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR|VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR|VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR; -const VkSwapchainCreateFlagsKHR AllVkSwapchainCreateFlagBitsKHR = VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR|VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR|VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR|VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR|VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT; const VkDisplayPlaneAlphaFlagsKHR AllVkDisplayPlaneAlphaFlagBitsKHR = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR|VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR|VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR|VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR; -const VkVideoChromaSubsamplingFlagsKHR AllVkVideoChromaSubsamplingFlagBitsKHR = VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_KHR|VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR|VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR|VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR|VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR; const VkVideoCodecOperationFlagsKHR AllVkVideoCodecOperationFlagBitsKHR = VK_VIDEO_CODEC_OPERATION_NONE_KHR|VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT|VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT|VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR|VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR; -const VkVideoCodingControlFlagsKHR AllVkVideoCodingControlFlagBitsKHR = VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR|VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR|VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR; +const VkVideoChromaSubsamplingFlagsKHR AllVkVideoChromaSubsamplingFlagBitsKHR = VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_KHR|VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR|VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR|VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR|VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR; const VkVideoComponentBitDepthFlagsKHR AllVkVideoComponentBitDepthFlagBitsKHR = VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR|VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR|VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR|VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR; const VkVideoSessionCreateFlagsKHR AllVkVideoSessionCreateFlagBitsKHR = VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR|VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR; +const VkVideoCodingControlFlagsKHR AllVkVideoCodingControlFlagBitsKHR = VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR|VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR|VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR; const VkVideoDecodeUsageFlagsKHR AllVkVideoDecodeUsageFlagBitsKHR = VK_VIDEO_DECODE_USAGE_DEFAULT_KHR|VK_VIDEO_DECODE_USAGE_TRANSCODING_BIT_KHR|VK_VIDEO_DECODE_USAGE_OFFLINE_BIT_KHR|VK_VIDEO_DECODE_USAGE_STREAMING_BIT_KHR; const VkVideoDecodeH264PictureLayoutFlagsKHR AllVkVideoDecodeH264PictureLayoutFlagBitsKHR = VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_PROGRESSIVE_KHR|VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_INTERLEAVED_LINES_BIT_KHR|VK_VIDEO_DECODE_H264_PICTURE_LAYOUT_INTERLACED_SEPARATE_PLANES_BIT_KHR; -#ifdef VK_ENABLE_BETA_EXTENSIONS -const VkVideoEncodeContentFlagsKHR AllVkVideoEncodeContentFlagBitsKHR = VK_VIDEO_ENCODE_CONTENT_DEFAULT_KHR|VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR|VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR|VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR; -#endif +const VkSemaphoreImportFlags AllVkSemaphoreImportFlagBits = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT; +const VkFenceImportFlags AllVkFenceImportFlagBits = VK_FENCE_IMPORT_TEMPORARY_BIT; #ifdef VK_ENABLE_BETA_EXTENSIONS const VkVideoEncodeFeedbackFlagsKHR AllVkVideoEncodeFeedbackFlagBitsKHR = VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR|VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR|VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_HAS_OVERRIDES_BIT_KHR; -#endif -#ifdef VK_ENABLE_BETA_EXTENSIONS -const VkVideoEncodeRateControlModeFlagsKHR AllVkVideoEncodeRateControlModeFlagBitsKHR = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR|VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR|VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR|VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR; -#endif +#endif //VK_ENABLE_BETA_EXTENSIONS #ifdef VK_ENABLE_BETA_EXTENSIONS const VkVideoEncodeUsageFlagsKHR AllVkVideoEncodeUsageFlagBitsKHR = VK_VIDEO_ENCODE_USAGE_DEFAULT_KHR|VK_VIDEO_ENCODE_USAGE_TRANSCODING_BIT_KHR|VK_VIDEO_ENCODE_USAGE_STREAMING_BIT_KHR|VK_VIDEO_ENCODE_USAGE_RECORDING_BIT_KHR|VK_VIDEO_ENCODE_USAGE_CONFERENCING_BIT_KHR; -#endif +#endif //VK_ENABLE_BETA_EXTENSIONS +#ifdef VK_ENABLE_BETA_EXTENSIONS +const VkVideoEncodeContentFlagsKHR AllVkVideoEncodeContentFlagBitsKHR = VK_VIDEO_ENCODE_CONTENT_DEFAULT_KHR|VK_VIDEO_ENCODE_CONTENT_CAMERA_BIT_KHR|VK_VIDEO_ENCODE_CONTENT_DESKTOP_BIT_KHR|VK_VIDEO_ENCODE_CONTENT_RENDERED_BIT_KHR; +#endif //VK_ENABLE_BETA_EXTENSIONS +#ifdef VK_ENABLE_BETA_EXTENSIONS +const VkVideoEncodeRateControlModeFlagsKHR AllVkVideoEncodeRateControlModeFlagBitsKHR = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR|VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR|VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR|VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR; +#endif //VK_ENABLE_BETA_EXTENSIONS const VkDebugReportFlagsEXT AllVkDebugReportFlagBitsEXT = VK_DEBUG_REPORT_INFORMATION_BIT_EXT|VK_DEBUG_REPORT_WARNING_BIT_EXT|VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT|VK_DEBUG_REPORT_ERROR_BIT_EXT|VK_DEBUG_REPORT_DEBUG_BIT_EXT; #ifdef VK_ENABLE_BETA_EXTENSIONS const VkVideoEncodeH264RateControlFlagsEXT AllVkVideoEncodeH264RateControlFlagBitsEXT = VK_VIDEO_ENCODE_H264_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_EXT|VK_VIDEO_ENCODE_H264_RATE_CONTROL_REGULAR_GOP_BIT_EXT|VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_EXT|VK_VIDEO_ENCODE_H264_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_EXT|VK_VIDEO_ENCODE_H264_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_EXT; -#endif +#endif //VK_ENABLE_BETA_EXTENSIONS #ifdef VK_ENABLE_BETA_EXTENSIONS const VkVideoEncodeH265RateControlFlagsEXT AllVkVideoEncodeH265RateControlFlagBitsEXT = VK_VIDEO_ENCODE_H265_RATE_CONTROL_ATTEMPT_HRD_COMPLIANCE_BIT_EXT|VK_VIDEO_ENCODE_H265_RATE_CONTROL_REGULAR_GOP_BIT_EXT|VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_EXT|VK_VIDEO_ENCODE_H265_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_EXT|VK_VIDEO_ENCODE_H265_RATE_CONTROL_TEMPORAL_SUB_LAYER_PATTERN_DYADIC_BIT_EXT; -#endif +#endif //VK_ENABLE_BETA_EXTENSIONS const VkExternalMemoryHandleTypeFlagsNV AllVkExternalMemoryHandleTypeFlagBitsNV = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV|VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV|VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV|VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV; const VkConditionalRenderingFlagsEXT AllVkConditionalRenderingFlagBitsEXT = VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT; const VkSurfaceCounterFlagsEXT AllVkSurfaceCounterFlagBitsEXT = VK_SURFACE_COUNTER_VBLANK_BIT_EXT; const VkDebugUtilsMessageSeverityFlagsEXT AllVkDebugUtilsMessageSeverityFlagBitsEXT = 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; const VkDebugUtilsMessageTypeFlagsEXT AllVkDebugUtilsMessageTypeFlagBitsEXT = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT|VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT|VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT|VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT; -const VkBuildAccelerationStructureFlagsKHR AllVkBuildAccelerationStructureFlagBitsKHR = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR; -const VkBuildAccelerationStructureFlagsNV AllVkBuildAccelerationStructureFlagBitsNV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR; const VkGeometryFlagsKHR AllVkGeometryFlagBitsKHR = VK_GEOMETRY_OPAQUE_BIT_KHR|VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR; -const VkPresentGravityFlagsEXT AllVkPresentGravityFlagBitsEXT = VK_PRESENT_GRAVITY_MIN_BIT_EXT|VK_PRESENT_GRAVITY_MAX_BIT_EXT|VK_PRESENT_GRAVITY_CENTERED_BIT_EXT; const VkPresentScalingFlagsEXT AllVkPresentScalingFlagBitsEXT = VK_PRESENT_SCALING_ONE_TO_ONE_BIT_EXT|VK_PRESENT_SCALING_ASPECT_RATIO_STRETCH_BIT_EXT|VK_PRESENT_SCALING_STRETCH_BIT_EXT; -const VkIndirectCommandsLayoutUsageFlagsNV AllVkIndirectCommandsLayoutUsageFlagBitsNV = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV|VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV|VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV; +const VkPresentGravityFlagsEXT AllVkPresentGravityFlagBitsEXT = VK_PRESENT_GRAVITY_MIN_BIT_EXT|VK_PRESENT_GRAVITY_MAX_BIT_EXT|VK_PRESENT_GRAVITY_CENTERED_BIT_EXT; const VkIndirectStateFlagsNV AllVkIndirectStateFlagBitsNV = VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV; +const VkIndirectCommandsLayoutUsageFlagsNV AllVkIndirectCommandsLayoutUsageFlagBitsNV = VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV|VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV|VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV; const VkDeviceDiagnosticsConfigFlagsNV AllVkDeviceDiagnosticsConfigFlagBitsNV = VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV|VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV|VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV|VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV; #ifdef VK_USE_PLATFORM_METAL_EXT const VkExportMetalObjectTypeFlagsEXT AllVkExportMetalObjectTypeFlagBitsEXT = VK_EXPORT_METAL_OBJECT_TYPE_METAL_DEVICE_BIT_EXT|VK_EXPORT_METAL_OBJECT_TYPE_METAL_COMMAND_QUEUE_BIT_EXT|VK_EXPORT_METAL_OBJECT_TYPE_METAL_BUFFER_BIT_EXT|VK_EXPORT_METAL_OBJECT_TYPE_METAL_TEXTURE_BIT_EXT|VK_EXPORT_METAL_OBJECT_TYPE_METAL_IOSURFACE_BIT_EXT|VK_EXPORT_METAL_OBJECT_TYPE_METAL_SHARED_EVENT_BIT_EXT; -#endif +#endif //VK_USE_PLATFORM_METAL_EXT const VkGraphicsPipelineLibraryFlagsEXT AllVkGraphicsPipelineLibraryFlagBitsEXT = VK_GRAPHICS_PIPELINE_LIBRARY_VERTEX_INPUT_INTERFACE_BIT_EXT|VK_GRAPHICS_PIPELINE_LIBRARY_PRE_RASTERIZATION_SHADERS_BIT_EXT|VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT|VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT; +const VkImageCompressionFlagsEXT AllVkImageCompressionFlagBitsEXT = VK_IMAGE_COMPRESSION_DEFAULT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT|VK_IMAGE_COMPRESSION_DISABLED_EXT; +const VkImageCompressionFixedRateFlagsEXT AllVkImageCompressionFixedRateFlagBitsEXT = VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT|VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT; const VkDeviceAddressBindingFlagsEXT AllVkDeviceAddressBindingFlagBitsEXT = VK_DEVICE_ADDRESS_BINDING_INTERNAL_OBJECT_BIT_EXT; +const VkFormatFeatureFlags AllVkFormatFeatureFlagBits = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT|VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT|VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT|VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT|VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT|VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT|VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT|VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT|VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT|VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT|VK_FORMAT_FEATURE_BLIT_SRC_BIT|VK_FORMAT_FEATURE_BLIT_DST_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT|VK_FORMAT_FEATURE_TRANSFER_SRC_BIT|VK_FORMAT_FEATURE_TRANSFER_DST_BIT|VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT|VK_FORMAT_FEATURE_DISJOINT_BIT|VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT|VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR|VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR|VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR|VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT|VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT|VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR|VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR|VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR; #ifdef VK_USE_PLATFORM_FUCHSIA const VkImageConstraintsInfoFlagsFUCHSIA AllVkImageConstraintsInfoFlagBitsFUCHSIA = VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA|VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA|VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA|VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA|VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA; -#endif +#endif //VK_USE_PLATFORM_FUCHSIA const VkBuildMicromapFlagsEXT AllVkBuildMicromapFlagBitsEXT = VK_BUILD_MICROMAP_PREFER_FAST_TRACE_BIT_EXT|VK_BUILD_MICROMAP_PREFER_FAST_BUILD_BIT_EXT|VK_BUILD_MICROMAP_ALLOW_COMPACTION_BIT_EXT; const VkMicromapCreateFlagsEXT AllVkMicromapCreateFlagBitsEXT = VK_MICROMAP_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT; const VkMemoryDecompressionMethodFlagsNV AllVkMemoryDecompressionMethodFlagBitsNV = VK_MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV; -const VkOpticalFlowExecuteFlagsNV AllVkOpticalFlowExecuteFlagBitsNV = VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV; +const VkOpticalFlowUsageFlagsNV AllVkOpticalFlowUsageFlagBitsNV = VK_OPTICAL_FLOW_USAGE_UNKNOWN_NV|VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV|VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV|VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV|VK_OPTICAL_FLOW_USAGE_COST_BIT_NV|VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV; const VkOpticalFlowGridSizeFlagsNV AllVkOpticalFlowGridSizeFlagBitsNV = VK_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV|VK_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV|VK_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV|VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV|VK_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV; const VkOpticalFlowSessionCreateFlagsNV AllVkOpticalFlowSessionCreateFlagBitsNV = VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV|VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV|VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV|VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV|VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV; -const VkOpticalFlowUsageFlagsNV AllVkOpticalFlowUsageFlagBitsNV = VK_OPTICAL_FLOW_USAGE_UNKNOWN_NV|VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV|VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV|VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV|VK_OPTICAL_FLOW_USAGE_COST_BIT_NV|VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV; +const VkOpticalFlowExecuteFlagsNV AllVkOpticalFlowExecuteFlagBitsNV = VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV; const VkShaderCreateFlagsEXT AllVkShaderCreateFlagBitsEXT = VK_SHADER_CREATE_LINK_STAGE_BIT_EXT|VK_SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT|VK_SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT|VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT|VK_SHADER_CREATE_DISPATCH_BASE_BIT_EXT|VK_SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT|VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT; +const VkBuildAccelerationStructureFlagsKHR AllVkBuildAccelerationStructureFlagBitsKHR = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR|VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV|VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR; const VkAccelerationStructureCreateFlagsKHR AllVkAccelerationStructureCreateFlagBitsKHR = VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR|VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT|VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV; +const VkQueryResultFlags AllVkQueryResultFlagBits = VK_QUERY_RESULT_64_BIT|VK_QUERY_RESULT_WAIT_BIT|VK_QUERY_RESULT_WITH_AVAILABILITY_BIT|VK_QUERY_RESULT_PARTIAL_BIT|VK_QUERY_RESULT_WITH_STATUS_BIT_KHR; +const VkCommandPoolResetFlags AllVkCommandPoolResetFlagBits = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT; +const VkCommandBufferResetFlags AllVkCommandBufferResetFlagBits = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT; +const VkStencilFaceFlags AllVkStencilFaceFlagBits = VK_STENCIL_FACE_FRONT_BIT|VK_STENCIL_FACE_BACK_BIT|VK_STENCIL_FACE_FRONT_AND_BACK; +const VkPeerMemoryFeatureFlags AllVkPeerMemoryFeatureFlagBits = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT|VK_PEER_MEMORY_FEATURE_COPY_DST_BIT|VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT|VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT; + +// mask of all the VK_PIPELINE_STAGE_*_SHADER_BIT stages +const VkPipelineStageFlagBits2 allVkPipelineShaderStageBits2 = 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_FRAGMENT_SHADER_BIT|VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT|VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR|VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT|VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT|VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI; + [[maybe_unused]] constexpr std::array AllVkQueueFlags = {VK_QUEUE_GRAPHICS_BIT,VK_QUEUE_COMPUTE_BIT,VK_QUEUE_TRANSFER_BIT,VK_QUEUE_SPARSE_BINDING_BIT,VK_QUEUE_PROTECTED_BIT,VK_QUEUE_VIDEO_DECODE_BIT_KHR,VK_QUEUE_VIDEO_ENCODE_BIT_KHR,VK_QUEUE_OPTICAL_FLOW_BIT_NV}; [[maybe_unused]] constexpr std::array AllVkShaderStageFlags = {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,VK_SHADER_STAGE_COMPUTE_BIT,VK_SHADER_STAGE_ALL_GRAPHICS,VK_SHADER_STAGE_ALL,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,VK_SHADER_STAGE_CALLABLE_BIT_KHR,VK_SHADER_STAGE_TASK_BIT_EXT,VK_SHADER_STAGE_MESH_BIT_EXT,VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI,VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI}; +// NOLINTEND diff --git a/layers/vulkan/generated/parameter_validation.cpp b/layers/vulkan/generated/stateless_validation_helper.cpp similarity index 99% rename from layers/vulkan/generated/parameter_validation.cpp rename to layers/vulkan/generated/stateless_validation_helper.cpp index 1ca5d3c361c..663f9ddbd47 100644 --- a/layers/vulkan/generated/parameter_validation.cpp +++ b/layers/vulkan/generated/stateless_validation_helper.cpp @@ -16603,7 +16603,7 @@ bool StatelessValidation::PreCallValidateCreateAccelerationStructureNV( skip |= ValidateRangedEnum("vkCreateAccelerationStructureNV", "pCreateInfo->info.type", "VkAccelerationStructureTypeNV", pCreateInfo->info.type, "VUID-VkAccelerationStructureInfoNV-type-parameter"); - skip |= ValidateFlags("vkCreateAccelerationStructureNV", "pCreateInfo->info.flags", "VkBuildAccelerationStructureFlagBitsNV", AllVkBuildAccelerationStructureFlagBitsNV, pCreateInfo->info.flags, kOptionalFlags, "VUID-VkAccelerationStructureInfoNV-flags-parameter"); + skip |= ValidateFlags("vkCreateAccelerationStructureNV", "pCreateInfo->info.flags", "VkBuildAccelerationStructureFlagBitsKHR", AllVkBuildAccelerationStructureFlagBitsKHR, pCreateInfo->info.flags, kOptionalFlags, "VUID-VkAccelerationStructureInfoNV-flags-parameter"); skip |= ValidateStructTypeArray("vkCreateAccelerationStructureNV", "pCreateInfo->info.geometryCount", "pCreateInfo->info.pGeometries", "VK_STRUCTURE_TYPE_GEOMETRY_NV", pCreateInfo->info.geometryCount, pCreateInfo->info.pGeometries, VK_STRUCTURE_TYPE_GEOMETRY_NV, false, true, "VUID-VkGeometryNV-sType-sType", "VUID-VkAccelerationStructureInfoNV-pGeometries-parameter", kVUIDUndefined); @@ -16754,7 +16754,7 @@ bool StatelessValidation::PreCallValidateCmdBuildAccelerationStructureNV( skip |= ValidateRangedEnum("vkCmdBuildAccelerationStructureNV", "pInfo->type", "VkAccelerationStructureTypeNV", pInfo->type, "VUID-VkAccelerationStructureInfoNV-type-parameter"); - skip |= ValidateFlags("vkCmdBuildAccelerationStructureNV", "pInfo->flags", "VkBuildAccelerationStructureFlagBitsNV", AllVkBuildAccelerationStructureFlagBitsNV, pInfo->flags, kOptionalFlags, "VUID-VkAccelerationStructureInfoNV-flags-parameter"); + skip |= ValidateFlags("vkCmdBuildAccelerationStructureNV", "pInfo->flags", "VkBuildAccelerationStructureFlagBitsKHR", AllVkBuildAccelerationStructureFlagBitsKHR, pInfo->flags, kOptionalFlags, "VUID-VkAccelerationStructureInfoNV-flags-parameter"); skip |= ValidateStructTypeArray("vkCmdBuildAccelerationStructureNV", "pInfo->geometryCount", "pInfo->pGeometries", "VK_STRUCTURE_TYPE_GEOMETRY_NV", pInfo->geometryCount, pInfo->pGeometries, VK_STRUCTURE_TYPE_GEOMETRY_NV, false, true, "VUID-VkGeometryNV-sType-sType", "VUID-VkAccelerationStructureInfoNV-pGeometries-parameter", kVUIDUndefined); diff --git a/layers/vulkan/generated/parameter_validation.h b/layers/vulkan/generated/stateless_validation_helper.h similarity index 98% rename from layers/vulkan/generated/parameter_validation.h rename to layers/vulkan/generated/stateless_validation_helper.h index 137bef05fc1..6cf0a6a88ea 100644 --- a/layers/vulkan/generated/parameter_validation.h +++ b/layers/vulkan/generated/stateless_validation_helper.h @@ -1,27 +1,27 @@ -/* *** THIS FILE IS GENERATED - DO NOT EDIT! *** - * See parameter_validation_generator.py for modifications - * - * Copyright (c) 2015-2023 The Khronos Group Inc. - * Copyright (c) 2015-2023 LunarG, Inc. - * Copyright (C) 2015-2023 Google Inc. - * Copyright (c) 2015-2023 Valve Corporation - * - * 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 FILE IS GENERATED - DO NOT EDIT *** +// See stateless_validation_helper_generator.py for modifications +/*************************************************************************** +* +* Copyright (c) 2015-2023 The Khronos Group Inc. +* Copyright (c) 2015-2023 Valve Corporation +* Copyright (c) 2015-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. +****************************************************************************/ +// NOLINTBEGIN #pragma once - bool PreCallValidateCreateInstance( const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, @@ -1084,60 +1084,60 @@ bool PreCallValidateCreateXlibSurfaceKHR( const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_XLIB_KHR #ifdef VK_USE_PLATFORM_XLIB_KHR bool PreCallValidateGetPhysicalDeviceXlibPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID) const override; -#endif +#endif // VK_USE_PLATFORM_XLIB_KHR #ifdef VK_USE_PLATFORM_XCB_KHR bool PreCallValidateCreateXcbSurfaceKHR( VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_XCB_KHR #ifdef VK_USE_PLATFORM_XCB_KHR bool PreCallValidateGetPhysicalDeviceXcbPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id) const override; -#endif +#endif // VK_USE_PLATFORM_XCB_KHR #ifdef VK_USE_PLATFORM_WAYLAND_KHR bool PreCallValidateCreateWaylandSurfaceKHR( VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_WAYLAND_KHR #ifdef VK_USE_PLATFORM_WAYLAND_KHR bool PreCallValidateGetPhysicalDeviceWaylandPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display) const override; -#endif +#endif // VK_USE_PLATFORM_WAYLAND_KHR #ifdef VK_USE_PLATFORM_ANDROID_KHR bool PreCallValidateCreateAndroidSurfaceKHR( VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_ANDROID_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateCreateWin32SurfaceKHR( VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateGetPhysicalDeviceWin32PresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateGetPhysicalDeviceVideoCapabilitiesKHR( VkPhysicalDevice physicalDevice, const VkVideoProfileInfoKHR* pVideoProfile, @@ -1256,14 +1256,14 @@ bool PreCallValidateGetMemoryWin32HandleKHR( VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateGetMemoryWin32HandlePropertiesKHR( VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateGetMemoryFdKHR( VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, @@ -1281,13 +1281,13 @@ bool PreCallValidateGetPhysicalDeviceExternalSemaphorePropertiesKHR( bool PreCallValidateImportSemaphoreWin32HandleKHR( VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateGetSemaphoreWin32HandleKHR( VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateImportSemaphoreFdKHR( VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) const override; @@ -1349,13 +1349,13 @@ bool PreCallValidateGetPhysicalDeviceExternalFencePropertiesKHR( bool PreCallValidateImportFenceWin32HandleKHR( VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateGetFenceWin32HandleKHR( VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateImportFenceFdKHR( VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo) const override; @@ -1531,7 +1531,7 @@ bool PreCallValidateGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo, VkVideoEncodeQualityLevelPropertiesKHR* pQualityLevelProperties) const override; -#endif +#endif // VK_ENABLE_BETA_EXTENSIONS #ifdef VK_ENABLE_BETA_EXTENSIONS bool PreCallValidateGetEncodedVideoSessionParametersKHR( VkDevice device, @@ -1539,12 +1539,12 @@ bool PreCallValidateGetEncodedVideoSessionParametersKHR( VkVideoEncodeSessionParametersFeedbackInfoKHR* pFeedbackInfo, size_t* pDataSize, void* pData) const override; -#endif +#endif // VK_ENABLE_BETA_EXTENSIONS #ifdef VK_ENABLE_BETA_EXTENSIONS bool PreCallValidateCmdEncodeVideoKHR( VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo) const override; -#endif +#endif // VK_ENABLE_BETA_EXTENSIONS bool PreCallValidateCmdSetEvent2KHR( VkCommandBuffer commandBuffer, VkEvent event, @@ -1746,7 +1746,7 @@ bool PreCallValidateCreateStreamDescriptorSurfaceGGP( const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_GGP bool PreCallValidateGetPhysicalDeviceExternalImageFormatPropertiesNV( VkPhysicalDevice physicalDevice, VkFormat format, @@ -1762,14 +1762,14 @@ bool PreCallValidateGetMemoryWin32HandleNV( VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_VI_NN bool PreCallValidateCreateViSurfaceNN( VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_VI_NN bool PreCallValidateCmdBeginConditionalRenderingEXT( VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin) const override; @@ -1788,14 +1788,14 @@ bool PreCallValidateAcquireXlibDisplayEXT( VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display) const override; -#endif +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT bool PreCallValidateGetRandROutputDisplayEXT( VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay) const override; -#endif +#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT bool PreCallValidateGetPhysicalDeviceSurfaceCapabilities2EXT( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, @@ -1851,14 +1851,14 @@ bool PreCallValidateCreateIOSSurfaceMVK( const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_IOS_MVK #ifdef VK_USE_PLATFORM_MACOS_MVK bool PreCallValidateCreateMacOSSurfaceMVK( VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_MACOS_MVK bool PreCallValidateSetDebugUtilsObjectNameEXT( VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo) const override; @@ -1900,13 +1900,13 @@ bool PreCallValidateGetAndroidHardwareBufferPropertiesANDROID( VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties) const override; -#endif +#endif // VK_USE_PLATFORM_ANDROID_KHR #ifdef VK_USE_PLATFORM_ANDROID_KHR bool PreCallValidateGetMemoryAndroidHardwareBufferANDROID( VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer) const override; -#endif +#endif // VK_USE_PLATFORM_ANDROID_KHR bool PreCallValidateCmdSetSampleLocationsEXT( VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo) const override; @@ -2130,14 +2130,14 @@ bool PreCallValidateCreateImagePipeSurfaceFUCHSIA( const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA #ifdef VK_USE_PLATFORM_METAL_EXT bool PreCallValidateCreateMetalSurfaceEXT( VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_METAL_EXT bool PreCallValidateGetBufferDeviceAddressEXT( VkDevice device, const VkBufferDeviceAddressInfo* pInfo) const override; @@ -2159,17 +2159,17 @@ bool PreCallValidateGetPhysicalDeviceSurfacePresentModes2EXT( const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateAcquireFullScreenExclusiveModeEXT( VkDevice device, VkSwapchainKHR swapchain) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateReleaseFullScreenExclusiveModeEXT( VkDevice device, VkSwapchainKHR swapchain) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateCreateHeadlessSurfaceEXT( VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, @@ -2296,7 +2296,7 @@ bool PreCallValidateGetPrivateDataEXT( bool PreCallValidateExportMetalObjectsEXT( VkDevice device, VkExportMetalObjectsInfoEXT* pMetalObjectsInfo) const override; -#endif +#endif // VK_USE_PLATFORM_METAL_EXT bool PreCallValidateGetDescriptorSetLayoutSizeEXT( VkDevice device, VkDescriptorSetLayout layout, @@ -2365,26 +2365,26 @@ bool PreCallValidateGetDeviceFaultInfoEXT( bool PreCallValidateAcquireWinrtDisplayNV( VkPhysicalDevice physicalDevice, VkDisplayKHR display) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR bool PreCallValidateGetWinrtDisplayNV( VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR* pDisplay) const override; -#endif +#endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_DIRECTFB_EXT bool PreCallValidateCreateDirectFBSurfaceEXT( VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_DIRECTFB_EXT #ifdef VK_USE_PLATFORM_DIRECTFB_EXT bool PreCallValidateGetPhysicalDeviceDirectFBPresentationSupportEXT( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb) const override; -#endif +#endif // VK_USE_PLATFORM_DIRECTFB_EXT bool PreCallValidateCmdSetVertexInputEXT( VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, @@ -2396,56 +2396,56 @@ bool PreCallValidateGetMemoryZirconHandleFUCHSIA( VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA #ifdef VK_USE_PLATFORM_FUCHSIA bool PreCallValidateGetMemoryZirconHandlePropertiesFUCHSIA( VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA #ifdef VK_USE_PLATFORM_FUCHSIA bool PreCallValidateImportSemaphoreZirconHandleFUCHSIA( VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA #ifdef VK_USE_PLATFORM_FUCHSIA bool PreCallValidateGetSemaphoreZirconHandleFUCHSIA( VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA #ifdef VK_USE_PLATFORM_FUCHSIA bool PreCallValidateCreateBufferCollectionFUCHSIA( VkDevice device, const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferCollectionFUCHSIA* pCollection) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA #ifdef VK_USE_PLATFORM_FUCHSIA bool PreCallValidateSetBufferCollectionImageConstraintsFUCHSIA( VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA #ifdef VK_USE_PLATFORM_FUCHSIA bool PreCallValidateSetBufferCollectionBufferConstraintsFUCHSIA( VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA #ifdef VK_USE_PLATFORM_FUCHSIA bool PreCallValidateDestroyBufferCollectionFUCHSIA( VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA #ifdef VK_USE_PLATFORM_FUCHSIA bool PreCallValidateGetBufferCollectionPropertiesFUCHSIA( VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties) const override; -#endif +#endif // VK_USE_PLATFORM_FUCHSIA bool PreCallValidateGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( VkDevice device, VkRenderPass renderpass, @@ -2485,13 +2485,13 @@ bool PreCallValidateCreateScreenSurfaceQNX( const VkScreenSurfaceCreateInfoQNX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) const override; -#endif +#endif // VK_USE_PLATFORM_SCREEN_QNX #ifdef VK_USE_PLATFORM_SCREEN_QNX bool PreCallValidateGetPhysicalDeviceScreenPresentationSupportQNX( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct _screen_window* window) const override; -#endif +#endif // VK_USE_PLATFORM_SCREEN_QNX bool PreCallValidateCmdSetColorWriteEnableEXT( VkCommandBuffer commandBuffer, uint32_t attachmentCount, @@ -2791,7 +2791,7 @@ bool PreCallValidateGetScreenBufferPropertiesQNX( VkDevice device, const struct _screen_buffer* buffer, VkScreenBufferPropertiesQNX* pProperties) const override; -#endif +#endif // VK_USE_PLATFORM_SCREEN_QNX bool PreCallValidateCreateAccelerationStructureKHR( VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, @@ -2926,3 +2926,5 @@ bool PreCallValidateCmdDrawMeshTasksIndirectCountEXT( VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) const override; + +// NOLINTEND diff --git a/layers/vulkan/generated/valid_param_values.cpp b/layers/vulkan/generated/valid_enum_values.cpp similarity index 52% rename from layers/vulkan/generated/valid_param_values.cpp rename to layers/vulkan/generated/valid_enum_values.cpp index fc5af66a048..f0cf95ccc01 100644 --- a/layers/vulkan/generated/valid_param_values.cpp +++ b/layers/vulkan/generated/valid_enum_values.cpp @@ -1,36 +1,68 @@ -/* *** THIS FILE IS GENERATED - DO NOT EDIT! *** - * See parameter_validation_generator.py for modifications - * - * Copyright (c) 2023 The Khronos Group Inc. - * Copyright (c) 2023 LunarG, Inc. - * Copyright (C) 2023 Google Inc. - * Copyright (c) 2023 Valve Corporation - * - * 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 FILE IS GENERATED - DO NOT EDIT *** +// See valid_enum_values_generator.py for modifications + +/*************************************************************************** +* +* Copyright (c) 2015-2023 The Khronos Group Inc. +* Copyright (c) 2015-2023 Valve Corporation +* Copyright (c) 2015-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. +****************************************************************************/ + +// NOLINTBEGIN #include "chassis.h" #include "utils/hash_vk_types.h" +// TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. +// Ideally "values" would be something like a static variable that is built once and this function returns +// a span of the container. This does not work for applications which create and destroy many instances and +// devices over the lifespan of the project (e.g., VLT). + +template<> +std::vector ValidationObject::ValidParamValues() const { + constexpr std::array CoreVkResultEnums = {VK_SUCCESS, VK_NOT_READY, VK_TIMEOUT, VK_EVENT_SET, VK_EVENT_RESET, VK_INCOMPLETE, VK_ERROR_OUT_OF_HOST_MEMORY, VK_ERROR_OUT_OF_DEVICE_MEMORY, VK_ERROR_INITIALIZATION_FAILED, VK_ERROR_DEVICE_LOST, VK_ERROR_MEMORY_MAP_FAILED, VK_ERROR_LAYER_NOT_PRESENT, VK_ERROR_EXTENSION_NOT_PRESENT, VK_ERROR_FEATURE_NOT_PRESENT, VK_ERROR_INCOMPATIBLE_DRIVER, VK_ERROR_TOO_MANY_OBJECTS, VK_ERROR_FORMAT_NOT_SUPPORTED, VK_ERROR_FRAGMENTED_POOL, VK_ERROR_UNKNOWN, VK_ERROR_OUT_OF_POOL_MEMORY, VK_ERROR_INVALID_EXTERNAL_HANDLE, VK_ERROR_FRAGMENTATION, VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, VK_PIPELINE_COMPILE_REQUIRED}; + static const vvl::unordered_map> ExtendedVkResultEnums = { + { &DeviceExtensions::vk_ext_debug_report, { VK_ERROR_VALIDATION_FAILED_EXT } }, + { &DeviceExtensions::vk_ext_full_screen_exclusive, { VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT } }, + { &DeviceExtensions::vk_ext_image_compression_control, { VK_ERROR_COMPRESSION_EXHAUSTED_EXT } }, + { &DeviceExtensions::vk_ext_image_drm_format_modifier, { VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT } }, + { &DeviceExtensions::vk_ext_shader_object, { VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT } }, + { &DeviceExtensions::vk_khr_deferred_host_operations, { VK_THREAD_IDLE_KHR, VK_THREAD_DONE_KHR, VK_OPERATION_DEFERRED_KHR, VK_OPERATION_NOT_DEFERRED_KHR } }, + { &DeviceExtensions::vk_khr_display_swapchain, { VK_ERROR_INCOMPATIBLE_DISPLAY_KHR } }, + { &DeviceExtensions::vk_khr_global_priority, { VK_ERROR_NOT_PERMITTED_KHR } }, + { &DeviceExtensions::vk_khr_surface, { VK_ERROR_SURFACE_LOST_KHR, VK_ERROR_NATIVE_WINDOW_IN_USE_KHR } }, + { &DeviceExtensions::vk_khr_swapchain, { VK_SUBOPTIMAL_KHR, VK_ERROR_OUT_OF_DATE_KHR } }, + { &DeviceExtensions::vk_khr_video_encode_queue, { VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR } }, + { &DeviceExtensions::vk_khr_video_queue, { VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR, VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR, VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR, VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR, VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR, VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR } }, + { &DeviceExtensions::vk_nv_glsl_shader, { VK_ERROR_INVALID_SHADER_NV } }, + }; + std::vector values(CoreVkResultEnums.cbegin(), CoreVkResultEnums.cend()); + std::set unique_exts; + for (const auto& [extension, enums]: ExtendedVkResultEnums) { + if (IsExtEnabled(device_extensions.*extension)) { + unique_exts.insert(enums.cbegin(), enums.cend()); + } + } + std::copy(unique_exts.cbegin(), unique_exts.cend(), std::back_inserter(values)); + return values; +} + template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPipelineCacheHeaderVersionEnums = { VK_PIPELINE_CACHE_HEADER_VERSION_ONE, }; + constexpr std::array CoreVkPipelineCacheHeaderVersionEnums = {VK_PIPELINE_CACHE_HEADER_VERSION_ONE}; static const vvl::unordered_map> ExtendedVkPipelineCacheHeaderVersionEnums = { }; std::vector values(CoreVkPipelineCacheHeaderVersionEnums.cbegin(), CoreVkPipelineCacheHeaderVersionEnums.cend()); @@ -47,23 +79,15 @@ std::vector ValidationObject::ValidParamValues() c template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkImageLayoutEnums = { VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_PREINITIALIZED, }; + constexpr std::array CoreVkImageLayoutEnums = {VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL}; static const vvl::unordered_map> ExtendedVkImageLayoutEnums = { - { &DeviceExtensions::vk_khr_maintenance2, { VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, } }, - { &DeviceExtensions::vk_khr_separate_depth_stencil_layouts, { VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, } }, - { &DeviceExtensions::vk_khr_synchronization2, { VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, } }, - { &DeviceExtensions::vk_khr_swapchain, { VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, } }, - { &DeviceExtensions::vk_khr_video_decode_queue, { VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR, VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR, VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR, } }, - { &DeviceExtensions::vk_khr_shared_presentable_image, { VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, } }, - { &DeviceExtensions::vk_ext_fragment_density_map, { VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT, } }, - { &DeviceExtensions::vk_khr_fragment_shading_rate, { VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR, } }, - { &DeviceExtensions::vk_nv_shading_rate_image, { VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR, } }, - { &DeviceExtensions::vk_khr_video_encode_queue, { VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR, VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR, VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR, } }, - { &DeviceExtensions::vk_ext_attachment_feedback_loop_layout, { VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT, } }, + { &DeviceExtensions::vk_ext_attachment_feedback_loop_layout, { VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT } }, + { &DeviceExtensions::vk_ext_fragment_density_map, { VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT } }, + { &DeviceExtensions::vk_khr_fragment_shading_rate, { VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR } }, + { &DeviceExtensions::vk_khr_shared_presentable_image, { VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR } }, + { &DeviceExtensions::vk_khr_swapchain, { VK_IMAGE_LAYOUT_PRESENT_SRC_KHR } }, + { &DeviceExtensions::vk_khr_video_decode_queue, { VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR, VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR, VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR } }, + { &DeviceExtensions::vk_khr_video_encode_queue, { VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR, VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR, VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR } }, }; std::vector values(CoreVkImageLayoutEnums.cbegin(), CoreVkImageLayoutEnums.cend()); std::set unique_exts; @@ -79,32 +103,25 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkObjectTypeEnums = { VK_OBJECT_TYPE_UNKNOWN, VK_OBJECT_TYPE_INSTANCE, VK_OBJECT_TYPE_PHYSICAL_DEVICE, VK_OBJECT_TYPE_DEVICE, VK_OBJECT_TYPE_QUEUE, VK_OBJECT_TYPE_SEMAPHORE, VK_OBJECT_TYPE_COMMAND_BUFFER, VK_OBJECT_TYPE_FENCE, VK_OBJECT_TYPE_DEVICE_MEMORY, VK_OBJECT_TYPE_BUFFER, VK_OBJECT_TYPE_IMAGE, VK_OBJECT_TYPE_EVENT, VK_OBJECT_TYPE_QUERY_POOL, VK_OBJECT_TYPE_BUFFER_VIEW, VK_OBJECT_TYPE_IMAGE_VIEW, VK_OBJECT_TYPE_SHADER_MODULE, VK_OBJECT_TYPE_PIPELINE_CACHE, VK_OBJECT_TYPE_PIPELINE_LAYOUT, VK_OBJECT_TYPE_RENDER_PASS, VK_OBJECT_TYPE_PIPELINE, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, VK_OBJECT_TYPE_SAMPLER, VK_OBJECT_TYPE_DESCRIPTOR_POOL, VK_OBJECT_TYPE_DESCRIPTOR_SET, VK_OBJECT_TYPE_FRAMEBUFFER, VK_OBJECT_TYPE_COMMAND_POOL, }; + constexpr std::array CoreVkObjectTypeEnums = {VK_OBJECT_TYPE_UNKNOWN, VK_OBJECT_TYPE_INSTANCE, VK_OBJECT_TYPE_PHYSICAL_DEVICE, VK_OBJECT_TYPE_DEVICE, VK_OBJECT_TYPE_QUEUE, VK_OBJECT_TYPE_SEMAPHORE, VK_OBJECT_TYPE_COMMAND_BUFFER, VK_OBJECT_TYPE_FENCE, VK_OBJECT_TYPE_DEVICE_MEMORY, VK_OBJECT_TYPE_BUFFER, VK_OBJECT_TYPE_IMAGE, VK_OBJECT_TYPE_EVENT, VK_OBJECT_TYPE_QUERY_POOL, VK_OBJECT_TYPE_BUFFER_VIEW, VK_OBJECT_TYPE_IMAGE_VIEW, VK_OBJECT_TYPE_SHADER_MODULE, VK_OBJECT_TYPE_PIPELINE_CACHE, VK_OBJECT_TYPE_PIPELINE_LAYOUT, VK_OBJECT_TYPE_RENDER_PASS, VK_OBJECT_TYPE_PIPELINE, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, VK_OBJECT_TYPE_SAMPLER, VK_OBJECT_TYPE_DESCRIPTOR_POOL, VK_OBJECT_TYPE_DESCRIPTOR_SET, VK_OBJECT_TYPE_FRAMEBUFFER, VK_OBJECT_TYPE_COMMAND_POOL, VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, VK_OBJECT_TYPE_PRIVATE_DATA_SLOT}; static const vvl::unordered_map> ExtendedVkObjectTypeEnums = { - { &DeviceExtensions::vk_khr_sampler_ycbcr_conversion, { VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, } }, - { &DeviceExtensions::vk_khr_descriptor_update_template, { VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, } }, - { &DeviceExtensions::vk_ext_private_data, { VK_OBJECT_TYPE_PRIVATE_DATA_SLOT, } }, - { &DeviceExtensions::vk_khr_surface, { VK_OBJECT_TYPE_SURFACE_KHR, } }, - { &DeviceExtensions::vk_khr_swapchain, { VK_OBJECT_TYPE_SWAPCHAIN_KHR, } }, - { &DeviceExtensions::vk_khr_display, { VK_OBJECT_TYPE_DISPLAY_KHR, VK_OBJECT_TYPE_DISPLAY_MODE_KHR, } }, - { &DeviceExtensions::vk_ext_debug_report, { VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT, } }, - { &DeviceExtensions::vk_khr_video_queue, { VK_OBJECT_TYPE_VIDEO_SESSION_KHR, VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR, } }, - { &DeviceExtensions::vk_nvx_binary_import, { VK_OBJECT_TYPE_CU_MODULE_NVX, VK_OBJECT_TYPE_CU_FUNCTION_NVX, } }, - { &DeviceExtensions::vk_ext_debug_utils, { VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, } }, - { &DeviceExtensions::vk_khr_acceleration_structure, { VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR, } }, - { &DeviceExtensions::vk_ext_validation_cache, { VK_OBJECT_TYPE_VALIDATION_CACHE_EXT, } }, - { &DeviceExtensions::vk_nv_ray_tracing, { VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV, } }, - { &DeviceExtensions::vk_intel_performance_query, { VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL, } }, - { &DeviceExtensions::vk_khr_deferred_host_operations, { VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR, } }, - { &DeviceExtensions::vk_nv_device_generated_commands, { VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV, } }, - { &DeviceExtensions::vk_fuchsia_buffer_collection, { VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA, } }, - { &DeviceExtensions::vk_ext_opacity_micromap, { VK_OBJECT_TYPE_MICROMAP_EXT, } }, - { &DeviceExtensions::vk_nv_optical_flow, { VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV, } }, - { &DeviceExtensions::vk_ext_shader_object, { VK_OBJECT_TYPE_SHADER_EXT, } }, + { &DeviceExtensions::vk_ext_debug_report, { VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT } }, + { &DeviceExtensions::vk_ext_debug_utils, { VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT } }, + { &DeviceExtensions::vk_ext_opacity_micromap, { VK_OBJECT_TYPE_MICROMAP_EXT } }, + { &DeviceExtensions::vk_ext_shader_object, { VK_OBJECT_TYPE_SHADER_EXT } }, + { &DeviceExtensions::vk_ext_validation_cache, { VK_OBJECT_TYPE_VALIDATION_CACHE_EXT } }, + { &DeviceExtensions::vk_fuchsia_buffer_collection, { VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA } }, + { &DeviceExtensions::vk_intel_performance_query, { VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL } }, + { &DeviceExtensions::vk_khr_acceleration_structure, { VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR } }, + { &DeviceExtensions::vk_khr_deferred_host_operations, { VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR } }, + { &DeviceExtensions::vk_khr_display, { VK_OBJECT_TYPE_DISPLAY_KHR, VK_OBJECT_TYPE_DISPLAY_MODE_KHR } }, + { &DeviceExtensions::vk_khr_surface, { VK_OBJECT_TYPE_SURFACE_KHR } }, + { &DeviceExtensions::vk_khr_swapchain, { VK_OBJECT_TYPE_SWAPCHAIN_KHR } }, + { &DeviceExtensions::vk_khr_video_queue, { VK_OBJECT_TYPE_VIDEO_SESSION_KHR, VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR } }, + { &DeviceExtensions::vk_nvx_binary_import, { VK_OBJECT_TYPE_CU_MODULE_NVX, VK_OBJECT_TYPE_CU_FUNCTION_NVX } }, + { &DeviceExtensions::vk_nv_device_generated_commands, { VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV } }, + { &DeviceExtensions::vk_nv_optical_flow, { VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV } }, + { &DeviceExtensions::vk_nv_ray_tracing, { VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV } }, }; std::vector values(CoreVkObjectTypeEnums.cbegin(), CoreVkObjectTypeEnums.cend()); std::set unique_exts; @@ -120,18 +137,10 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkFormatEnums = { VK_FORMAT_UNDEFINED, VK_FORMAT_R4G4_UNORM_PACK8, VK_FORMAT_R4G4B4A4_UNORM_PACK16, VK_FORMAT_B4G4R4A4_UNORM_PACK16, VK_FORMAT_R5G6B5_UNORM_PACK16, VK_FORMAT_B5G6R5_UNORM_PACK16, VK_FORMAT_R5G5B5A1_UNORM_PACK16, VK_FORMAT_B5G5R5A1_UNORM_PACK16, VK_FORMAT_A1R5G5B5_UNORM_PACK16, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_SNORM, VK_FORMAT_R8_USCALED, VK_FORMAT_R8_SSCALED, VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R8_SRGB, VK_FORMAT_R8G8_UNORM, VK_FORMAT_R8G8_SNORM, VK_FORMAT_R8G8_USCALED, VK_FORMAT_R8G8_SSCALED, VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_SINT, VK_FORMAT_R8G8_SRGB, VK_FORMAT_R8G8B8_UNORM, VK_FORMAT_R8G8B8_SNORM, VK_FORMAT_R8G8B8_USCALED, VK_FORMAT_R8G8B8_SSCALED, VK_FORMAT_R8G8B8_UINT, VK_FORMAT_R8G8B8_SINT, VK_FORMAT_R8G8B8_SRGB, VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_B8G8R8_SNORM, VK_FORMAT_B8G8R8_USCALED, VK_FORMAT_B8G8R8_SSCALED, VK_FORMAT_B8G8R8_UINT, VK_FORMAT_B8G8R8_SINT, VK_FORMAT_B8G8R8_SRGB, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_USCALED, VK_FORMAT_R8G8B8A8_SSCALED, VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_SINT, VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8A8_SNORM, VK_FORMAT_B8G8R8A8_USCALED, VK_FORMAT_B8G8R8A8_SSCALED, VK_FORMAT_B8G8R8A8_UINT, VK_FORMAT_B8G8R8A8_SINT, VK_FORMAT_B8G8R8A8_SRGB, VK_FORMAT_A8B8G8R8_UNORM_PACK32, VK_FORMAT_A8B8G8R8_SNORM_PACK32, VK_FORMAT_A8B8G8R8_USCALED_PACK32, VK_FORMAT_A8B8G8R8_SSCALED_PACK32, VK_FORMAT_A8B8G8R8_UINT_PACK32, VK_FORMAT_A8B8G8R8_SINT_PACK32, VK_FORMAT_A8B8G8R8_SRGB_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32, VK_FORMAT_A2R10G10B10_SNORM_PACK32, VK_FORMAT_A2R10G10B10_USCALED_PACK32, VK_FORMAT_A2R10G10B10_SSCALED_PACK32, VK_FORMAT_A2R10G10B10_UINT_PACK32, VK_FORMAT_A2R10G10B10_SINT_PACK32, VK_FORMAT_A2B10G10R10_UNORM_PACK32, VK_FORMAT_A2B10G10R10_SNORM_PACK32, VK_FORMAT_A2B10G10R10_USCALED_PACK32, VK_FORMAT_A2B10G10R10_SSCALED_PACK32, VK_FORMAT_A2B10G10R10_UINT_PACK32, VK_FORMAT_A2B10G10R10_SINT_PACK32, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_SNORM, VK_FORMAT_R16_USCALED, VK_FORMAT_R16_SSCALED, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16G16_UNORM, VK_FORMAT_R16G16_SNORM, VK_FORMAT_R16G16_USCALED, VK_FORMAT_R16G16_SSCALED, VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_SINT, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R16G16B16_UNORM, VK_FORMAT_R16G16B16_SNORM, VK_FORMAT_R16G16B16_USCALED, VK_FORMAT_R16G16B16_SSCALED, VK_FORMAT_R16G16B16_UINT, VK_FORMAT_R16G16B16_SINT, VK_FORMAT_R16G16B16_SFLOAT, VK_FORMAT_R16G16B16A16_UNORM, VK_FORMAT_R16G16B16A16_SNORM, VK_FORMAT_R16G16B16A16_USCALED, VK_FORMAT_R16G16B16A16_SSCALED, VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R32_UINT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32G32_UINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32B32_SINT, VK_FORMAT_R32G32B32_SFLOAT, VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R64_UINT, VK_FORMAT_R64_SINT, VK_FORMAT_R64_SFLOAT, VK_FORMAT_R64G64_UINT, VK_FORMAT_R64G64_SINT, VK_FORMAT_R64G64_SFLOAT, VK_FORMAT_R64G64B64_UINT, VK_FORMAT_R64G64B64_SINT, VK_FORMAT_R64G64B64_SFLOAT, VK_FORMAT_R64G64B64A64_UINT, VK_FORMAT_R64G64B64A64_SINT, VK_FORMAT_R64G64B64A64_SFLOAT, VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, VK_FORMAT_D16_UNORM, VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_D32_SFLOAT, VK_FORMAT_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_BC1_RGB_UNORM_BLOCK, VK_FORMAT_BC1_RGB_SRGB_BLOCK, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, VK_FORMAT_BC1_RGBA_SRGB_BLOCK, VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_BC2_SRGB_BLOCK, VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_BC3_SRGB_BLOCK, VK_FORMAT_BC4_UNORM_BLOCK, VK_FORMAT_BC4_SNORM_BLOCK, VK_FORMAT_BC5_UNORM_BLOCK, VK_FORMAT_BC5_SNORM_BLOCK, VK_FORMAT_BC6H_UFLOAT_BLOCK, VK_FORMAT_BC6H_SFLOAT_BLOCK, VK_FORMAT_BC7_UNORM_BLOCK, VK_FORMAT_BC7_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, VK_FORMAT_EAC_R11_UNORM_BLOCK, VK_FORMAT_EAC_R11_SNORM_BLOCK, VK_FORMAT_EAC_R11G11_UNORM_BLOCK, VK_FORMAT_EAC_R11G11_SNORM_BLOCK, VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SRGB_BLOCK, VK_FORMAT_ASTC_5x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x4_SRGB_BLOCK, VK_FORMAT_ASTC_5x5_UNORM_BLOCK, VK_FORMAT_ASTC_5x5_SRGB_BLOCK, VK_FORMAT_ASTC_6x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x5_SRGB_BLOCK, VK_FORMAT_ASTC_6x6_UNORM_BLOCK, VK_FORMAT_ASTC_6x6_SRGB_BLOCK, VK_FORMAT_ASTC_8x5_UNORM_BLOCK, VK_FORMAT_ASTC_8x5_SRGB_BLOCK, VK_FORMAT_ASTC_8x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x6_SRGB_BLOCK, VK_FORMAT_ASTC_8x8_UNORM_BLOCK, VK_FORMAT_ASTC_8x8_SRGB_BLOCK, VK_FORMAT_ASTC_10x5_UNORM_BLOCK, VK_FORMAT_ASTC_10x5_SRGB_BLOCK, VK_FORMAT_ASTC_10x6_UNORM_BLOCK, VK_FORMAT_ASTC_10x6_SRGB_BLOCK, VK_FORMAT_ASTC_10x8_UNORM_BLOCK, VK_FORMAT_ASTC_10x8_SRGB_BLOCK, VK_FORMAT_ASTC_10x10_UNORM_BLOCK, VK_FORMAT_ASTC_10x10_SRGB_BLOCK, VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_ASTC_12x10_SRGB_BLOCK, VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_SRGB_BLOCK, }; + constexpr std::array CoreVkFormatEnums = {VK_FORMAT_UNDEFINED, VK_FORMAT_R4G4_UNORM_PACK8, VK_FORMAT_R4G4B4A4_UNORM_PACK16, VK_FORMAT_B4G4R4A4_UNORM_PACK16, VK_FORMAT_R5G6B5_UNORM_PACK16, VK_FORMAT_B5G6R5_UNORM_PACK16, VK_FORMAT_R5G5B5A1_UNORM_PACK16, VK_FORMAT_B5G5R5A1_UNORM_PACK16, VK_FORMAT_A1R5G5B5_UNORM_PACK16, VK_FORMAT_R8_UNORM, VK_FORMAT_R8_SNORM, VK_FORMAT_R8_USCALED, VK_FORMAT_R8_SSCALED, VK_FORMAT_R8_UINT, VK_FORMAT_R8_SINT, VK_FORMAT_R8_SRGB, VK_FORMAT_R8G8_UNORM, VK_FORMAT_R8G8_SNORM, VK_FORMAT_R8G8_USCALED, VK_FORMAT_R8G8_SSCALED, VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_SINT, VK_FORMAT_R8G8_SRGB, VK_FORMAT_R8G8B8_UNORM, VK_FORMAT_R8G8B8_SNORM, VK_FORMAT_R8G8B8_USCALED, VK_FORMAT_R8G8B8_SSCALED, VK_FORMAT_R8G8B8_UINT, VK_FORMAT_R8G8B8_SINT, VK_FORMAT_R8G8B8_SRGB, VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_B8G8R8_SNORM, VK_FORMAT_B8G8R8_USCALED, VK_FORMAT_B8G8R8_SSCALED, VK_FORMAT_B8G8R8_UINT, VK_FORMAT_B8G8R8_SINT, VK_FORMAT_B8G8R8_SRGB, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_USCALED, VK_FORMAT_R8G8B8A8_SSCALED, VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_SINT, VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8A8_SNORM, VK_FORMAT_B8G8R8A8_USCALED, VK_FORMAT_B8G8R8A8_SSCALED, VK_FORMAT_B8G8R8A8_UINT, VK_FORMAT_B8G8R8A8_SINT, VK_FORMAT_B8G8R8A8_SRGB, VK_FORMAT_A8B8G8R8_UNORM_PACK32, VK_FORMAT_A8B8G8R8_SNORM_PACK32, VK_FORMAT_A8B8G8R8_USCALED_PACK32, VK_FORMAT_A8B8G8R8_SSCALED_PACK32, VK_FORMAT_A8B8G8R8_UINT_PACK32, VK_FORMAT_A8B8G8R8_SINT_PACK32, VK_FORMAT_A8B8G8R8_SRGB_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32, VK_FORMAT_A2R10G10B10_SNORM_PACK32, VK_FORMAT_A2R10G10B10_USCALED_PACK32, VK_FORMAT_A2R10G10B10_SSCALED_PACK32, VK_FORMAT_A2R10G10B10_UINT_PACK32, VK_FORMAT_A2R10G10B10_SINT_PACK32, VK_FORMAT_A2B10G10R10_UNORM_PACK32, VK_FORMAT_A2B10G10R10_SNORM_PACK32, VK_FORMAT_A2B10G10R10_USCALED_PACK32, VK_FORMAT_A2B10G10R10_SSCALED_PACK32, VK_FORMAT_A2B10G10R10_UINT_PACK32, VK_FORMAT_A2B10G10R10_SINT_PACK32, VK_FORMAT_R16_UNORM, VK_FORMAT_R16_SNORM, VK_FORMAT_R16_USCALED, VK_FORMAT_R16_SSCALED, VK_FORMAT_R16_UINT, VK_FORMAT_R16_SINT, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16G16_UNORM, VK_FORMAT_R16G16_SNORM, VK_FORMAT_R16G16_USCALED, VK_FORMAT_R16G16_SSCALED, VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_SINT, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R16G16B16_UNORM, VK_FORMAT_R16G16B16_SNORM, VK_FORMAT_R16G16B16_USCALED, VK_FORMAT_R16G16B16_SSCALED, VK_FORMAT_R16G16B16_UINT, VK_FORMAT_R16G16B16_SINT, VK_FORMAT_R16G16B16_SFLOAT, VK_FORMAT_R16G16B16A16_UNORM, VK_FORMAT_R16G16B16A16_SNORM, VK_FORMAT_R16G16B16A16_USCALED, VK_FORMAT_R16G16B16A16_SSCALED, VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R32_UINT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32G32_UINT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32B32_SINT, VK_FORMAT_R32G32B32_SFLOAT, VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R64_UINT, VK_FORMAT_R64_SINT, VK_FORMAT_R64_SFLOAT, VK_FORMAT_R64G64_UINT, VK_FORMAT_R64G64_SINT, VK_FORMAT_R64G64_SFLOAT, VK_FORMAT_R64G64B64_UINT, VK_FORMAT_R64G64B64_SINT, VK_FORMAT_R64G64B64_SFLOAT, VK_FORMAT_R64G64B64A64_UINT, VK_FORMAT_R64G64B64A64_SINT, VK_FORMAT_R64G64B64A64_SFLOAT, VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, VK_FORMAT_D16_UNORM, VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_D32_SFLOAT, VK_FORMAT_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_BC1_RGB_UNORM_BLOCK, VK_FORMAT_BC1_RGB_SRGB_BLOCK, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, VK_FORMAT_BC1_RGBA_SRGB_BLOCK, VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_BC2_SRGB_BLOCK, VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_BC3_SRGB_BLOCK, VK_FORMAT_BC4_UNORM_BLOCK, VK_FORMAT_BC4_SNORM_BLOCK, VK_FORMAT_BC5_UNORM_BLOCK, VK_FORMAT_BC5_SNORM_BLOCK, VK_FORMAT_BC6H_UFLOAT_BLOCK, VK_FORMAT_BC6H_SFLOAT_BLOCK, VK_FORMAT_BC7_UNORM_BLOCK, VK_FORMAT_BC7_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, VK_FORMAT_EAC_R11_UNORM_BLOCK, VK_FORMAT_EAC_R11_SNORM_BLOCK, VK_FORMAT_EAC_R11G11_UNORM_BLOCK, VK_FORMAT_EAC_R11G11_SNORM_BLOCK, VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SRGB_BLOCK, VK_FORMAT_ASTC_5x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x4_SRGB_BLOCK, VK_FORMAT_ASTC_5x5_UNORM_BLOCK, VK_FORMAT_ASTC_5x5_SRGB_BLOCK, VK_FORMAT_ASTC_6x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x5_SRGB_BLOCK, VK_FORMAT_ASTC_6x6_UNORM_BLOCK, VK_FORMAT_ASTC_6x6_SRGB_BLOCK, VK_FORMAT_ASTC_8x5_UNORM_BLOCK, VK_FORMAT_ASTC_8x5_SRGB_BLOCK, VK_FORMAT_ASTC_8x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x6_SRGB_BLOCK, VK_FORMAT_ASTC_8x8_UNORM_BLOCK, VK_FORMAT_ASTC_8x8_SRGB_BLOCK, VK_FORMAT_ASTC_10x5_UNORM_BLOCK, VK_FORMAT_ASTC_10x5_SRGB_BLOCK, VK_FORMAT_ASTC_10x6_UNORM_BLOCK, VK_FORMAT_ASTC_10x6_SRGB_BLOCK, VK_FORMAT_ASTC_10x8_UNORM_BLOCK, VK_FORMAT_ASTC_10x8_SRGB_BLOCK, VK_FORMAT_ASTC_10x10_UNORM_BLOCK, VK_FORMAT_ASTC_10x10_SRGB_BLOCK, VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_ASTC_12x10_SRGB_BLOCK, VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_SRGB_BLOCK, VK_FORMAT_G8B8G8R8_422_UNORM, VK_FORMAT_B8G8R8G8_422_UNORM, VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, VK_FORMAT_R10X6_UNORM_PACK16, VK_FORMAT_R10X6G10X6_UNORM_2PACK16, VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, VK_FORMAT_R12X4_UNORM_PACK16, VK_FORMAT_R12X4G12X4_UNORM_2PACK16, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, VK_FORMAT_G16B16G16R16_422_UNORM, VK_FORMAT_B16G16R16G16_422_UNORM, VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, VK_FORMAT_G8_B8R8_2PLANE_444_UNORM, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, VK_FORMAT_G16_B16R16_2PLANE_444_UNORM, VK_FORMAT_A4R4G4B4_UNORM_PACK16, VK_FORMAT_A4B4G4R4_UNORM_PACK16, VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK, VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK, VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK, VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK, VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK}; static const vvl::unordered_map> ExtendedVkFormatEnums = { - { &DeviceExtensions::vk_khr_sampler_ycbcr_conversion, { VK_FORMAT_G8B8G8R8_422_UNORM, VK_FORMAT_B8G8R8G8_422_UNORM, VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, VK_FORMAT_R10X6_UNORM_PACK16, VK_FORMAT_R10X6G10X6_UNORM_2PACK16, VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, VK_FORMAT_R12X4_UNORM_PACK16, VK_FORMAT_R12X4G12X4_UNORM_2PACK16, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, VK_FORMAT_G16B16G16R16_422_UNORM, VK_FORMAT_B16G16R16G16_422_UNORM, VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, } }, - { &DeviceExtensions::vk_ext_ycbcr_2plane_444_formats, { VK_FORMAT_G8_B8R8_2PLANE_444_UNORM, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16, VK_FORMAT_G16_B16R16_2PLANE_444_UNORM, } }, - { &DeviceExtensions::vk_ext_4444_formats, { VK_FORMAT_A4R4G4B4_UNORM_PACK16, VK_FORMAT_A4B4G4R4_UNORM_PACK16, } }, - { &DeviceExtensions::vk_ext_texture_compression_astc_hdr, { VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK, VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK, VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK, VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK, VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK, VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK, } }, - { &DeviceExtensions::vk_img_format_pvrtc, { VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG, } }, - { &DeviceExtensions::vk_nv_optical_flow, { VK_FORMAT_R16G16_S10_5_NV, } }, + { &DeviceExtensions::vk_img_format_pvrtc, { VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG } }, + { &DeviceExtensions::vk_nv_optical_flow, { VK_FORMAT_R16G16_S10_5_NV } }, }; std::vector values(CoreVkFormatEnums.cbegin(), CoreVkFormatEnums.cend()); std::set unique_exts; @@ -147,13 +156,9 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkImageTilingEnums = { VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_TILING_LINEAR, }; + constexpr std::array CoreVkImageTilingEnums = {VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_TILING_LINEAR}; static const vvl::unordered_map> ExtendedVkImageTilingEnums = { - { &DeviceExtensions::vk_ext_image_drm_format_modifier, { VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT, } }, + { &DeviceExtensions::vk_ext_image_drm_format_modifier, { VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT } }, }; std::vector values(CoreVkImageTilingEnums.cbegin(), CoreVkImageTilingEnums.cend()); std::set unique_exts; @@ -169,11 +174,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkImageTypeEnums = { VK_IMAGE_TYPE_1D, VK_IMAGE_TYPE_2D, VK_IMAGE_TYPE_3D, }; + constexpr std::array CoreVkImageTypeEnums = {VK_IMAGE_TYPE_1D, VK_IMAGE_TYPE_2D, VK_IMAGE_TYPE_3D}; static const vvl::unordered_map> ExtendedVkImageTypeEnums = { }; std::vector values(CoreVkImageTypeEnums.cbegin(), CoreVkImageTypeEnums.cend()); @@ -190,23 +191,19 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkQueryTypeEnums = { VK_QUERY_TYPE_OCCLUSION, VK_QUERY_TYPE_PIPELINE_STATISTICS, VK_QUERY_TYPE_TIMESTAMP, }; + constexpr std::array CoreVkQueryTypeEnums = {VK_QUERY_TYPE_OCCLUSION, VK_QUERY_TYPE_PIPELINE_STATISTICS, VK_QUERY_TYPE_TIMESTAMP}; static const vvl::unordered_map> ExtendedVkQueryTypeEnums = { - { &DeviceExtensions::vk_khr_video_queue, { VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, } }, - { &DeviceExtensions::vk_ext_transform_feedback, { VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT, } }, - { &DeviceExtensions::vk_khr_performance_query, { VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, } }, - { &DeviceExtensions::vk_khr_acceleration_structure, { VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR, } }, - { &DeviceExtensions::vk_nv_ray_tracing, { VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV, } }, - { &DeviceExtensions::vk_intel_performance_query, { VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL, } }, - { &DeviceExtensions::vk_khr_video_encode_queue, { VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, } }, - { &DeviceExtensions::vk_ext_mesh_shader, { VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT, } }, - { &DeviceExtensions::vk_ext_primitives_generated_query, { VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT, } }, - { &DeviceExtensions::vk_khr_ray_tracing_maintenance1, { VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR, } }, - { &DeviceExtensions::vk_ext_opacity_micromap, { VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT, VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT, } }, + { &DeviceExtensions::vk_ext_mesh_shader, { VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT } }, + { &DeviceExtensions::vk_ext_opacity_micromap, { VK_QUERY_TYPE_MICROMAP_SERIALIZATION_SIZE_EXT, VK_QUERY_TYPE_MICROMAP_COMPACTED_SIZE_EXT } }, + { &DeviceExtensions::vk_ext_primitives_generated_query, { VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT } }, + { &DeviceExtensions::vk_ext_transform_feedback, { VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT } }, + { &DeviceExtensions::vk_intel_performance_query, { VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL } }, + { &DeviceExtensions::vk_khr_acceleration_structure, { VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR } }, + { &DeviceExtensions::vk_khr_performance_query, { VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR } }, + { &DeviceExtensions::vk_khr_ray_tracing_maintenance1, { VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR } }, + { &DeviceExtensions::vk_khr_video_encode_queue, { VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR } }, + { &DeviceExtensions::vk_khr_video_queue, { VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR } }, + { &DeviceExtensions::vk_nv_ray_tracing, { VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV } }, }; std::vector values(CoreVkQueryTypeEnums.cbegin(), CoreVkQueryTypeEnums.cend()); std::set unique_exts; @@ -222,11 +219,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkSharingModeEnums = { VK_SHARING_MODE_EXCLUSIVE, VK_SHARING_MODE_CONCURRENT, }; + constexpr std::array CoreVkSharingModeEnums = {VK_SHARING_MODE_EXCLUSIVE, VK_SHARING_MODE_CONCURRENT}; static const vvl::unordered_map> ExtendedVkSharingModeEnums = { }; std::vector values(CoreVkSharingModeEnums.cbegin(), CoreVkSharingModeEnums.cend()); @@ -243,11 +236,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkComponentSwizzleEnums = { VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_ZERO, VK_COMPONENT_SWIZZLE_ONE, VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A, }; + constexpr std::array CoreVkComponentSwizzleEnums = {VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_ZERO, VK_COMPONENT_SWIZZLE_ONE, VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A}; static const vvl::unordered_map> ExtendedVkComponentSwizzleEnums = { }; std::vector values(CoreVkComponentSwizzleEnums.cbegin(), CoreVkComponentSwizzleEnums.cend()); @@ -264,11 +253,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkImageViewTypeEnums = { VK_IMAGE_VIEW_TYPE_1D, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, VK_IMAGE_VIEW_TYPE_1D_ARRAY, VK_IMAGE_VIEW_TYPE_2D_ARRAY, VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, }; + constexpr std::array CoreVkImageViewTypeEnums = {VK_IMAGE_VIEW_TYPE_1D, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_VIEW_TYPE_3D, VK_IMAGE_VIEW_TYPE_CUBE, VK_IMAGE_VIEW_TYPE_1D_ARRAY, VK_IMAGE_VIEW_TYPE_2D_ARRAY, VK_IMAGE_VIEW_TYPE_CUBE_ARRAY}; static const vvl::unordered_map> ExtendedVkImageViewTypeEnums = { }; std::vector values(CoreVkImageViewTypeEnums.cbegin(), CoreVkImageViewTypeEnums.cend()); @@ -285,11 +270,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkBlendFactorEnums = { VK_BLEND_FACTOR_ZERO, VK_BLEND_FACTOR_ONE, VK_BLEND_FACTOR_SRC_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR, VK_BLEND_FACTOR_DST_COLOR, VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR, VK_BLEND_FACTOR_SRC_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, VK_BLEND_FACTOR_DST_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA, VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, VK_BLEND_FACTOR_SRC_ALPHA_SATURATE, VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA, }; + constexpr std::array CoreVkBlendFactorEnums = {VK_BLEND_FACTOR_ZERO, VK_BLEND_FACTOR_ONE, VK_BLEND_FACTOR_SRC_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR, VK_BLEND_FACTOR_DST_COLOR, VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR, VK_BLEND_FACTOR_SRC_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, VK_BLEND_FACTOR_DST_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA, VK_BLEND_FACTOR_CONSTANT_COLOR, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, VK_BLEND_FACTOR_CONSTANT_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, VK_BLEND_FACTOR_SRC_ALPHA_SATURATE, VK_BLEND_FACTOR_SRC1_COLOR, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, VK_BLEND_FACTOR_SRC1_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA}; static const vvl::unordered_map> ExtendedVkBlendFactorEnums = { }; std::vector values(CoreVkBlendFactorEnums.cbegin(), CoreVkBlendFactorEnums.cend()); @@ -306,13 +287,9 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkBlendOpEnums = { VK_BLEND_OP_ADD, VK_BLEND_OP_SUBTRACT, VK_BLEND_OP_REVERSE_SUBTRACT, VK_BLEND_OP_MIN, VK_BLEND_OP_MAX, }; + constexpr std::array CoreVkBlendOpEnums = {VK_BLEND_OP_ADD, VK_BLEND_OP_SUBTRACT, VK_BLEND_OP_REVERSE_SUBTRACT, VK_BLEND_OP_MIN, VK_BLEND_OP_MAX}; static const vvl::unordered_map> ExtendedVkBlendOpEnums = { - { &DeviceExtensions::vk_ext_blend_operation_advanced, { 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, VK_BLEND_OP_BLUE_EXT, } }, + { &DeviceExtensions::vk_ext_blend_operation_advanced, { 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, VK_BLEND_OP_BLUE_EXT } }, }; std::vector values(CoreVkBlendOpEnums.cbegin(), CoreVkBlendOpEnums.cend()); std::set unique_exts; @@ -328,11 +305,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkCompareOpEnums = { VK_COMPARE_OP_NEVER, VK_COMPARE_OP_LESS, VK_COMPARE_OP_EQUAL, VK_COMPARE_OP_LESS_OR_EQUAL, VK_COMPARE_OP_GREATER, VK_COMPARE_OP_NOT_EQUAL, VK_COMPARE_OP_GREATER_OR_EQUAL, VK_COMPARE_OP_ALWAYS, }; + constexpr std::array CoreVkCompareOpEnums = {VK_COMPARE_OP_NEVER, VK_COMPARE_OP_LESS, VK_COMPARE_OP_EQUAL, VK_COMPARE_OP_LESS_OR_EQUAL, VK_COMPARE_OP_GREATER, VK_COMPARE_OP_NOT_EQUAL, VK_COMPARE_OP_GREATER_OR_EQUAL, VK_COMPARE_OP_ALWAYS}; static const vvl::unordered_map> ExtendedVkCompareOpEnums = { }; std::vector values(CoreVkCompareOpEnums.cbegin(), CoreVkCompareOpEnums.cend()); @@ -349,26 +322,21 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDynamicStateEnums = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR, VK_DYNAMIC_STATE_LINE_WIDTH, VK_DYNAMIC_STATE_DEPTH_BIAS, VK_DYNAMIC_STATE_BLEND_CONSTANTS, VK_DYNAMIC_STATE_DEPTH_BOUNDS, VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK, VK_DYNAMIC_STATE_STENCIL_WRITE_MASK, VK_DYNAMIC_STATE_STENCIL_REFERENCE, }; + constexpr std::array CoreVkDynamicStateEnums = {VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR, VK_DYNAMIC_STATE_LINE_WIDTH, VK_DYNAMIC_STATE_DEPTH_BIAS, VK_DYNAMIC_STATE_BLEND_CONSTANTS, VK_DYNAMIC_STATE_DEPTH_BOUNDS, VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK, VK_DYNAMIC_STATE_STENCIL_WRITE_MASK, VK_DYNAMIC_STATE_STENCIL_REFERENCE, 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, VK_DYNAMIC_STATE_STENCIL_OP, VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE}; static const vvl::unordered_map> ExtendedVkDynamicStateEnums = { - { &DeviceExtensions::vk_ext_extended_dynamic_state, { 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, VK_DYNAMIC_STATE_STENCIL_OP, } }, - { &DeviceExtensions::vk_ext_extended_dynamic_state2, { VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT, VK_DYNAMIC_STATE_LOGIC_OP_EXT, } }, - { &DeviceExtensions::vk_nv_clip_space_w_scaling, { VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV, } }, - { &DeviceExtensions::vk_ext_discard_rectangles, { VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT, VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT, VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT, } }, - { &DeviceExtensions::vk_ext_sample_locations, { VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT, } }, - { &DeviceExtensions::vk_khr_ray_tracing_pipeline, { VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR, } }, - { &DeviceExtensions::vk_nv_shading_rate_image, { VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV, VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV, } }, - { &DeviceExtensions::vk_nv_scissor_exclusive, { VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV, VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV, } }, - { &DeviceExtensions::vk_khr_fragment_shading_rate, { VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR, } }, - { &DeviceExtensions::vk_ext_line_rasterization, { VK_DYNAMIC_STATE_LINE_STIPPLE_EXT, } }, - { &DeviceExtensions::vk_ext_vertex_input_dynamic_state, { VK_DYNAMIC_STATE_VERTEX_INPUT_EXT, } }, - { &DeviceExtensions::vk_ext_color_write_enable, { VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT, } }, - { &DeviceExtensions::vk_ext_extended_dynamic_state3, { VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT, VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT, VK_DYNAMIC_STATE_POLYGON_MODE_EXT, VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT, VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT, VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT, VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT, VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT, VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT, VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT, VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT, VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT, VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT, VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT, VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV, VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV, VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV, VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV, VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV, VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV, VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV, VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV, VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV, VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV, } }, - { &DeviceExtensions::vk_ext_attachment_feedback_loop_dynamic_state, { VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT, } }, + { &DeviceExtensions::vk_ext_attachment_feedback_loop_dynamic_state, { VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT } }, + { &DeviceExtensions::vk_ext_color_write_enable, { VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT } }, + { &DeviceExtensions::vk_ext_discard_rectangles, { VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT, VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT, VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT } }, + { &DeviceExtensions::vk_ext_extended_dynamic_state2, { VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT, VK_DYNAMIC_STATE_LOGIC_OP_EXT } }, + { &DeviceExtensions::vk_ext_extended_dynamic_state3, { VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT, VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT, VK_DYNAMIC_STATE_POLYGON_MODE_EXT, VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT, VK_DYNAMIC_STATE_SAMPLE_MASK_EXT, VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT, VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT, VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT, VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT, VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT, VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT, VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT, VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT, VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT, VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT, VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV, VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV, VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV, VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV, VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV, VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV, VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV, VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV, VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV, VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV } }, + { &DeviceExtensions::vk_ext_line_rasterization, { VK_DYNAMIC_STATE_LINE_STIPPLE_EXT } }, + { &DeviceExtensions::vk_ext_sample_locations, { VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT } }, + { &DeviceExtensions::vk_ext_vertex_input_dynamic_state, { VK_DYNAMIC_STATE_VERTEX_INPUT_EXT } }, + { &DeviceExtensions::vk_khr_fragment_shading_rate, { VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR } }, + { &DeviceExtensions::vk_khr_ray_tracing_pipeline, { VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR } }, + { &DeviceExtensions::vk_nv_clip_space_w_scaling, { VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV } }, + { &DeviceExtensions::vk_nv_scissor_exclusive, { VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV, VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV } }, + { &DeviceExtensions::vk_nv_shading_rate_image, { VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV, VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV } }, }; std::vector values(CoreVkDynamicStateEnums.cbegin(), CoreVkDynamicStateEnums.cend()); std::set unique_exts; @@ -384,11 +352,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkFrontFaceEnums = { VK_FRONT_FACE_COUNTER_CLOCKWISE, VK_FRONT_FACE_CLOCKWISE, }; + constexpr std::array CoreVkFrontFaceEnums = {VK_FRONT_FACE_COUNTER_CLOCKWISE, VK_FRONT_FACE_CLOCKWISE}; static const vvl::unordered_map> ExtendedVkFrontFaceEnums = { }; std::vector values(CoreVkFrontFaceEnums.cbegin(), CoreVkFrontFaceEnums.cend()); @@ -405,11 +369,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkVertexInputRateEnums = { VK_VERTEX_INPUT_RATE_VERTEX, VK_VERTEX_INPUT_RATE_INSTANCE, }; + constexpr std::array CoreVkVertexInputRateEnums = {VK_VERTEX_INPUT_RATE_VERTEX, VK_VERTEX_INPUT_RATE_INSTANCE}; static const vvl::unordered_map> ExtendedVkVertexInputRateEnums = { }; std::vector values(CoreVkVertexInputRateEnums.cbegin(), CoreVkVertexInputRateEnums.cend()); @@ -426,11 +386,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPrimitiveTopologyEnums = { VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, }; + constexpr std::array CoreVkPrimitiveTopologyEnums = {VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_PATCH_LIST}; static const vvl::unordered_map> ExtendedVkPrimitiveTopologyEnums = { }; std::vector values(CoreVkPrimitiveTopologyEnums.cbegin(), CoreVkPrimitiveTopologyEnums.cend()); @@ -447,13 +403,9 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPolygonModeEnums = { VK_POLYGON_MODE_FILL, VK_POLYGON_MODE_LINE, VK_POLYGON_MODE_POINT, }; + constexpr std::array CoreVkPolygonModeEnums = {VK_POLYGON_MODE_FILL, VK_POLYGON_MODE_LINE, VK_POLYGON_MODE_POINT}; static const vvl::unordered_map> ExtendedVkPolygonModeEnums = { - { &DeviceExtensions::vk_nv_fill_rectangle, { VK_POLYGON_MODE_FILL_RECTANGLE_NV, } }, + { &DeviceExtensions::vk_nv_fill_rectangle, { VK_POLYGON_MODE_FILL_RECTANGLE_NV } }, }; std::vector values(CoreVkPolygonModeEnums.cbegin(), CoreVkPolygonModeEnums.cend()); std::set unique_exts; @@ -469,11 +421,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkStencilOpEnums = { VK_STENCIL_OP_KEEP, VK_STENCIL_OP_ZERO, VK_STENCIL_OP_REPLACE, VK_STENCIL_OP_INCREMENT_AND_CLAMP, VK_STENCIL_OP_DECREMENT_AND_CLAMP, VK_STENCIL_OP_INVERT, VK_STENCIL_OP_INCREMENT_AND_WRAP, VK_STENCIL_OP_DECREMENT_AND_WRAP, }; + constexpr std::array CoreVkStencilOpEnums = {VK_STENCIL_OP_KEEP, VK_STENCIL_OP_ZERO, VK_STENCIL_OP_REPLACE, VK_STENCIL_OP_INCREMENT_AND_CLAMP, VK_STENCIL_OP_DECREMENT_AND_CLAMP, VK_STENCIL_OP_INVERT, VK_STENCIL_OP_INCREMENT_AND_WRAP, VK_STENCIL_OP_DECREMENT_AND_WRAP}; static const vvl::unordered_map> ExtendedVkStencilOpEnums = { }; std::vector values(CoreVkStencilOpEnums.cbegin(), CoreVkStencilOpEnums.cend()); @@ -490,11 +438,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkLogicOpEnums = { VK_LOGIC_OP_CLEAR, VK_LOGIC_OP_AND, VK_LOGIC_OP_AND_REVERSE, VK_LOGIC_OP_COPY, VK_LOGIC_OP_AND_INVERTED, VK_LOGIC_OP_NO_OP, VK_LOGIC_OP_XOR, VK_LOGIC_OP_OR, VK_LOGIC_OP_NOR, VK_LOGIC_OP_EQUIVALENT, VK_LOGIC_OP_INVERT, VK_LOGIC_OP_OR_REVERSE, VK_LOGIC_OP_COPY_INVERTED, VK_LOGIC_OP_OR_INVERTED, VK_LOGIC_OP_NAND, VK_LOGIC_OP_SET, }; + constexpr std::array CoreVkLogicOpEnums = {VK_LOGIC_OP_CLEAR, VK_LOGIC_OP_AND, VK_LOGIC_OP_AND_REVERSE, VK_LOGIC_OP_COPY, VK_LOGIC_OP_AND_INVERTED, VK_LOGIC_OP_NO_OP, VK_LOGIC_OP_XOR, VK_LOGIC_OP_OR, VK_LOGIC_OP_NOR, VK_LOGIC_OP_EQUIVALENT, VK_LOGIC_OP_INVERT, VK_LOGIC_OP_OR_REVERSE, VK_LOGIC_OP_COPY_INVERTED, VK_LOGIC_OP_OR_INVERTED, VK_LOGIC_OP_NAND, VK_LOGIC_OP_SET}; static const vvl::unordered_map> ExtendedVkLogicOpEnums = { }; std::vector values(CoreVkLogicOpEnums.cbegin(), CoreVkLogicOpEnums.cend()); @@ -511,13 +455,9 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkBorderColorEnums = { VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK, VK_BORDER_COLOR_INT_TRANSPARENT_BLACK, VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK, VK_BORDER_COLOR_INT_OPAQUE_BLACK, VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE, VK_BORDER_COLOR_INT_OPAQUE_WHITE, }; + constexpr std::array CoreVkBorderColorEnums = {VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK, VK_BORDER_COLOR_INT_TRANSPARENT_BLACK, VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK, VK_BORDER_COLOR_INT_OPAQUE_BLACK, VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE, VK_BORDER_COLOR_INT_OPAQUE_WHITE}; static const vvl::unordered_map> ExtendedVkBorderColorEnums = { - { &DeviceExtensions::vk_ext_custom_border_color, { VK_BORDER_COLOR_FLOAT_CUSTOM_EXT, VK_BORDER_COLOR_INT_CUSTOM_EXT, } }, + { &DeviceExtensions::vk_ext_custom_border_color, { VK_BORDER_COLOR_FLOAT_CUSTOM_EXT, VK_BORDER_COLOR_INT_CUSTOM_EXT } }, }; std::vector values(CoreVkBorderColorEnums.cbegin(), CoreVkBorderColorEnums.cend()); std::set unique_exts; @@ -533,14 +473,9 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkFilterEnums = { VK_FILTER_NEAREST, VK_FILTER_LINEAR, }; + constexpr std::array CoreVkFilterEnums = {VK_FILTER_NEAREST, VK_FILTER_LINEAR}; static const vvl::unordered_map> ExtendedVkFilterEnums = { - { &DeviceExtensions::vk_ext_filter_cubic, { VK_FILTER_CUBIC_EXT, } }, - { &DeviceExtensions::vk_img_filter_cubic, { VK_FILTER_CUBIC_EXT, } }, + { &DeviceExtensions::vk_ext_filter_cubic, { VK_FILTER_CUBIC_EXT } }, }; std::vector values(CoreVkFilterEnums.cbegin(), CoreVkFilterEnums.cend()); std::set unique_exts; @@ -556,13 +491,8 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkSamplerAddressModeEnums = { VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, }; + constexpr std::array CoreVkSamplerAddressModeEnums = {VK_SAMPLER_ADDRESS_MODE_REPEAT, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE}; static const vvl::unordered_map> ExtendedVkSamplerAddressModeEnums = { - { &DeviceExtensions::vk_khr_sampler_mirror_clamp_to_edge, { VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, } }, }; std::vector values(CoreVkSamplerAddressModeEnums.cbegin(), CoreVkSamplerAddressModeEnums.cend()); std::set unique_exts; @@ -578,11 +508,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkSamplerMipmapModeEnums = { VK_SAMPLER_MIPMAP_MODE_NEAREST, VK_SAMPLER_MIPMAP_MODE_LINEAR, }; + constexpr std::array CoreVkSamplerMipmapModeEnums = {VK_SAMPLER_MIPMAP_MODE_NEAREST, VK_SAMPLER_MIPMAP_MODE_LINEAR}; static const vvl::unordered_map> ExtendedVkSamplerMipmapModeEnums = { }; std::vector values(CoreVkSamplerMipmapModeEnums.cbegin(), CoreVkSamplerMipmapModeEnums.cend()); @@ -599,18 +525,12 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDescriptorTypeEnums = { VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, }; + constexpr std::array CoreVkDescriptorTypeEnums = {VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK}; static const vvl::unordered_map> ExtendedVkDescriptorTypeEnums = { - { &DeviceExtensions::vk_ext_inline_uniform_block, { VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, } }, - { &DeviceExtensions::vk_khr_acceleration_structure, { VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, } }, - { &DeviceExtensions::vk_nv_ray_tracing, { VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, } }, - { &DeviceExtensions::vk_qcom_image_processing, { VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, } }, - { &DeviceExtensions::vk_ext_mutable_descriptor_type, { VK_DESCRIPTOR_TYPE_MUTABLE_EXT, } }, - { &DeviceExtensions::vk_valve_mutable_descriptor_type, { VK_DESCRIPTOR_TYPE_MUTABLE_EXT, } }, + { &DeviceExtensions::vk_ext_mutable_descriptor_type, { VK_DESCRIPTOR_TYPE_MUTABLE_EXT } }, + { &DeviceExtensions::vk_khr_acceleration_structure, { VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR } }, + { &DeviceExtensions::vk_nv_ray_tracing, { VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV } }, + { &DeviceExtensions::vk_qcom_image_processing, { VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM } }, }; std::vector values(CoreVkDescriptorTypeEnums.cbegin(), CoreVkDescriptorTypeEnums.cend()); std::set unique_exts; @@ -626,13 +546,9 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkAttachmentLoadOpEnums = { VK_ATTACHMENT_LOAD_OP_LOAD, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_LOAD_OP_DONT_CARE, }; + constexpr std::array CoreVkAttachmentLoadOpEnums = {VK_ATTACHMENT_LOAD_OP_LOAD, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_LOAD_OP_DONT_CARE}; static const vvl::unordered_map> ExtendedVkAttachmentLoadOpEnums = { - { &DeviceExtensions::vk_ext_load_store_op_none, { VK_ATTACHMENT_LOAD_OP_NONE_EXT, } }, + { &DeviceExtensions::vk_ext_load_store_op_none, { VK_ATTACHMENT_LOAD_OP_NONE_EXT } }, }; std::vector values(CoreVkAttachmentLoadOpEnums.cbegin(), CoreVkAttachmentLoadOpEnums.cend()); std::set unique_exts; @@ -648,15 +564,8 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkAttachmentStoreOpEnums = { VK_ATTACHMENT_STORE_OP_STORE, VK_ATTACHMENT_STORE_OP_DONT_CARE, }; + constexpr std::array CoreVkAttachmentStoreOpEnums = {VK_ATTACHMENT_STORE_OP_STORE, VK_ATTACHMENT_STORE_OP_DONT_CARE, VK_ATTACHMENT_STORE_OP_NONE}; static const vvl::unordered_map> ExtendedVkAttachmentStoreOpEnums = { - { &DeviceExtensions::vk_ext_load_store_op_none, { VK_ATTACHMENT_STORE_OP_NONE, } }, - { &DeviceExtensions::vk_khr_dynamic_rendering, { VK_ATTACHMENT_STORE_OP_NONE, } }, - { &DeviceExtensions::vk_qcom_render_pass_store_ops, { VK_ATTACHMENT_STORE_OP_NONE, } }, }; std::vector values(CoreVkAttachmentStoreOpEnums.cbegin(), CoreVkAttachmentStoreOpEnums.cend()); std::set unique_exts; @@ -672,15 +581,10 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPipelineBindPointEnums = { VK_PIPELINE_BIND_POINT_GRAPHICS, VK_PIPELINE_BIND_POINT_COMPUTE, }; + constexpr std::array CoreVkPipelineBindPointEnums = {VK_PIPELINE_BIND_POINT_GRAPHICS, VK_PIPELINE_BIND_POINT_COMPUTE}; static const vvl::unordered_map> ExtendedVkPipelineBindPointEnums = { - { &DeviceExtensions::vk_khr_ray_tracing_pipeline, { VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, } }, - { &DeviceExtensions::vk_nv_ray_tracing, { VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, } }, - { &DeviceExtensions::vk_huawei_subpass_shading, { VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, } }, + { &DeviceExtensions::vk_huawei_subpass_shading, { VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI } }, + { &DeviceExtensions::vk_khr_ray_tracing_pipeline, { VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR } }, }; std::vector values(CoreVkPipelineBindPointEnums.cbegin(), CoreVkPipelineBindPointEnums.cend()); std::set unique_exts; @@ -696,11 +600,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkCommandBufferLevelEnums = { VK_COMMAND_BUFFER_LEVEL_PRIMARY, VK_COMMAND_BUFFER_LEVEL_SECONDARY, }; + constexpr std::array CoreVkCommandBufferLevelEnums = {VK_COMMAND_BUFFER_LEVEL_PRIMARY, VK_COMMAND_BUFFER_LEVEL_SECONDARY}; static const vvl::unordered_map> ExtendedVkCommandBufferLevelEnums = { }; std::vector values(CoreVkCommandBufferLevelEnums.cbegin(), CoreVkCommandBufferLevelEnums.cend()); @@ -717,15 +617,10 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkIndexTypeEnums = { VK_INDEX_TYPE_UINT16, VK_INDEX_TYPE_UINT32, }; + constexpr std::array CoreVkIndexTypeEnums = {VK_INDEX_TYPE_UINT16, VK_INDEX_TYPE_UINT32}; static const vvl::unordered_map> ExtendedVkIndexTypeEnums = { - { &DeviceExtensions::vk_khr_acceleration_structure, { VK_INDEX_TYPE_NONE_KHR, } }, - { &DeviceExtensions::vk_nv_ray_tracing, { VK_INDEX_TYPE_NONE_KHR, } }, - { &DeviceExtensions::vk_ext_index_type_uint8, { VK_INDEX_TYPE_UINT8_EXT, } }, + { &DeviceExtensions::vk_ext_index_type_uint8, { VK_INDEX_TYPE_UINT8_EXT } }, + { &DeviceExtensions::vk_khr_acceleration_structure, { VK_INDEX_TYPE_NONE_KHR } }, }; std::vector values(CoreVkIndexTypeEnums.cbegin(), CoreVkIndexTypeEnums.cend()); std::set unique_exts; @@ -741,11 +636,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkSubpassContentsEnums = { VK_SUBPASS_CONTENTS_INLINE, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, }; + constexpr std::array CoreVkSubpassContentsEnums = {VK_SUBPASS_CONTENTS_INLINE, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS}; static const vvl::unordered_map> ExtendedVkSubpassContentsEnums = { }; std::vector values(CoreVkSubpassContentsEnums.cbegin(), CoreVkSubpassContentsEnums.cend()); @@ -762,11 +653,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkTessellationDomainOriginEnums = { VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT, VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT, }; + constexpr std::array CoreVkTessellationDomainOriginEnums = {VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT, VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT}; static const vvl::unordered_map> ExtendedVkTessellationDomainOriginEnums = { }; std::vector values(CoreVkTessellationDomainOriginEnums.cbegin(), CoreVkTessellationDomainOriginEnums.cend()); @@ -783,11 +670,7 @@ std::vector ValidationObject::ValidParamValues() con template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkSamplerYcbcrModelConversionEnums = { VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020, }; + constexpr std::array CoreVkSamplerYcbcrModelConversionEnums = {VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020}; static const vvl::unordered_map> ExtendedVkSamplerYcbcrModelConversionEnums = { }; std::vector values(CoreVkSamplerYcbcrModelConversionEnums.cbegin(), CoreVkSamplerYcbcrModelConversionEnums.cend()); @@ -804,11 +687,7 @@ std::vector ValidationObject::ValidParamValues() template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkSamplerYcbcrRangeEnums = { VK_SAMPLER_YCBCR_RANGE_ITU_FULL, VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, }; + constexpr std::array CoreVkSamplerYcbcrRangeEnums = {VK_SAMPLER_YCBCR_RANGE_ITU_FULL, VK_SAMPLER_YCBCR_RANGE_ITU_NARROW}; static const vvl::unordered_map> ExtendedVkSamplerYcbcrRangeEnums = { }; std::vector values(CoreVkSamplerYcbcrRangeEnums.cbegin(), CoreVkSamplerYcbcrRangeEnums.cend()); @@ -825,11 +704,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkChromaLocationEnums = { VK_CHROMA_LOCATION_COSITED_EVEN, VK_CHROMA_LOCATION_MIDPOINT, }; + constexpr std::array CoreVkChromaLocationEnums = {VK_CHROMA_LOCATION_COSITED_EVEN, VK_CHROMA_LOCATION_MIDPOINT}; static const vvl::unordered_map> ExtendedVkChromaLocationEnums = { }; std::vector values(CoreVkChromaLocationEnums.cbegin(), CoreVkChromaLocationEnums.cend()); @@ -846,14 +721,8 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDescriptorUpdateTemplateTypeEnums = { VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, }; + constexpr std::array CoreVkDescriptorUpdateTemplateTypeEnums = {VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET}; static const vvl::unordered_map> ExtendedVkDescriptorUpdateTemplateTypeEnums = { - { &DeviceExtensions::vk_khr_descriptor_update_template, { VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, } }, - { &DeviceExtensions::vk_khr_push_descriptor, { VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, } }, }; std::vector values(CoreVkDescriptorUpdateTemplateTypeEnums.cbegin(), CoreVkDescriptorUpdateTemplateTypeEnums.cend()); std::set unique_exts; @@ -869,11 +738,7 @@ std::vector ValidationObject::ValidParamValues() template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkSamplerReductionModeEnums = { VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, VK_SAMPLER_REDUCTION_MODE_MIN, VK_SAMPLER_REDUCTION_MODE_MAX, }; + constexpr std::array CoreVkSamplerReductionModeEnums = {VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, VK_SAMPLER_REDUCTION_MODE_MIN, VK_SAMPLER_REDUCTION_MODE_MAX}; static const vvl::unordered_map> ExtendedVkSamplerReductionModeEnums = { }; std::vector values(CoreVkSamplerReductionModeEnums.cbegin(), CoreVkSamplerReductionModeEnums.cend()); @@ -890,11 +755,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkSemaphoreTypeEnums = { VK_SEMAPHORE_TYPE_BINARY, VK_SEMAPHORE_TYPE_TIMELINE, }; + constexpr std::array CoreVkSemaphoreTypeEnums = {VK_SEMAPHORE_TYPE_BINARY, VK_SEMAPHORE_TYPE_TIMELINE}; static const vvl::unordered_map> ExtendedVkSemaphoreTypeEnums = { }; std::vector values(CoreVkSemaphoreTypeEnums.cbegin(), CoreVkSemaphoreTypeEnums.cend()); @@ -911,13 +772,9 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPresentModeKHREnums = { VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_FIFO_KHR, VK_PRESENT_MODE_FIFO_RELAXED_KHR, }; + constexpr std::array CoreVkPresentModeKHREnums = {VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_FIFO_KHR, VK_PRESENT_MODE_FIFO_RELAXED_KHR}; static const vvl::unordered_map> ExtendedVkPresentModeKHREnums = { - { &DeviceExtensions::vk_khr_shared_presentable_image, { VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR, VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, } }, + { &DeviceExtensions::vk_khr_shared_presentable_image, { VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR, VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR } }, }; std::vector values(CoreVkPresentModeKHREnums.cbegin(), CoreVkPresentModeKHREnums.cend()); std::set unique_exts; @@ -933,14 +790,10 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkColorSpaceKHREnums = { VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, }; + constexpr std::array CoreVkColorSpaceKHREnums = {VK_COLOR_SPACE_SRGB_NONLINEAR_KHR}; static const vvl::unordered_map> ExtendedVkColorSpaceKHREnums = { - { &DeviceExtensions::vk_ext_swapchain_colorspace, { VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT, VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT, VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT, VK_COLOR_SPACE_BT709_LINEAR_EXT, VK_COLOR_SPACE_BT709_NONLINEAR_EXT, VK_COLOR_SPACE_BT2020_LINEAR_EXT, VK_COLOR_SPACE_HDR10_ST2084_EXT, VK_COLOR_SPACE_DOLBYVISION_EXT, VK_COLOR_SPACE_HDR10_HLG_EXT, VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT, VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT, VK_COLOR_SPACE_PASS_THROUGH_EXT, VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT, } }, - { &DeviceExtensions::vk_amd_display_native_hdr, { VK_COLOR_SPACE_DISPLAY_NATIVE_AMD, } }, + { &DeviceExtensions::vk_amd_display_native_hdr, { VK_COLOR_SPACE_DISPLAY_NATIVE_AMD } }, + { &DeviceExtensions::vk_ext_swapchain_colorspace, { VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT, VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT, VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT, VK_COLOR_SPACE_BT709_LINEAR_EXT, VK_COLOR_SPACE_BT709_NONLINEAR_EXT, VK_COLOR_SPACE_BT2020_LINEAR_EXT, VK_COLOR_SPACE_HDR10_ST2084_EXT, VK_COLOR_SPACE_DOLBYVISION_EXT, VK_COLOR_SPACE_HDR10_HLG_EXT, VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT, VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT, VK_COLOR_SPACE_PASS_THROUGH_EXT, VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT } }, }; std::vector values(CoreVkColorSpaceKHREnums.cbegin(), CoreVkColorSpaceKHREnums.cend()); std::set unique_exts; @@ -956,11 +809,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkQueueGlobalPriorityKHREnums = { VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR, VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR, VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR, VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR, }; + constexpr std::array CoreVkQueueGlobalPriorityKHREnums = {VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR, VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR, VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR, VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR}; static const vvl::unordered_map> ExtendedVkQueueGlobalPriorityKHREnums = { }; std::vector values(CoreVkQueueGlobalPriorityKHREnums.cbegin(), CoreVkQueueGlobalPriorityKHREnums.cend()); @@ -977,11 +826,7 @@ std::vector ValidationObject::ValidParamValues() const template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkFragmentShadingRateCombinerOpKHREnums = { VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR, }; + constexpr std::array CoreVkFragmentShadingRateCombinerOpKHREnums = {VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR}; static const vvl::unordered_map> ExtendedVkFragmentShadingRateCombinerOpKHREnums = { }; std::vector values(CoreVkFragmentShadingRateCombinerOpKHREnums.cbegin(), CoreVkFragmentShadingRateCombinerOpKHREnums.cend()); @@ -999,11 +844,7 @@ std::vector ValidationObject::ValidParamValu template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkVideoEncodeTuningModeKHREnums = { VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR, VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR, VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR, VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR, VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR, }; + constexpr std::array CoreVkVideoEncodeTuningModeKHREnums = {VK_VIDEO_ENCODE_TUNING_MODE_DEFAULT_KHR, VK_VIDEO_ENCODE_TUNING_MODE_HIGH_QUALITY_KHR, VK_VIDEO_ENCODE_TUNING_MODE_LOW_LATENCY_KHR, VK_VIDEO_ENCODE_TUNING_MODE_ULTRA_LOW_LATENCY_KHR, VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR}; static const vvl::unordered_map> ExtendedVkVideoEncodeTuningModeKHREnums = { }; std::vector values(CoreVkVideoEncodeTuningModeKHREnums.cbegin(), CoreVkVideoEncodeTuningModeKHREnums.cend()); @@ -1016,16 +857,12 @@ std::vector ValidationObject::ValidParamValues() con std::copy(unique_exts.cbegin(), unique_exts.cend(), std::back_inserter(values)); return values; } +#endif //VK_ENABLE_BETA_EXTENSIONS -#endif // VK_ENABLE_BETA_EXTENSIONS template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkComponentTypeKHREnums = { VK_COMPONENT_TYPE_FLOAT16_KHR, VK_COMPONENT_TYPE_FLOAT32_KHR, VK_COMPONENT_TYPE_FLOAT64_KHR, VK_COMPONENT_TYPE_SINT8_KHR, VK_COMPONENT_TYPE_SINT16_KHR, VK_COMPONENT_TYPE_SINT32_KHR, VK_COMPONENT_TYPE_SINT64_KHR, VK_COMPONENT_TYPE_UINT8_KHR, VK_COMPONENT_TYPE_UINT16_KHR, VK_COMPONENT_TYPE_UINT32_KHR, VK_COMPONENT_TYPE_UINT64_KHR, }; + constexpr std::array CoreVkComponentTypeKHREnums = {VK_COMPONENT_TYPE_FLOAT16_KHR, VK_COMPONENT_TYPE_FLOAT32_KHR, VK_COMPONENT_TYPE_FLOAT64_KHR, VK_COMPONENT_TYPE_SINT8_KHR, VK_COMPONENT_TYPE_SINT16_KHR, VK_COMPONENT_TYPE_SINT32_KHR, VK_COMPONENT_TYPE_SINT64_KHR, VK_COMPONENT_TYPE_UINT8_KHR, VK_COMPONENT_TYPE_UINT16_KHR, VK_COMPONENT_TYPE_UINT32_KHR, VK_COMPONENT_TYPE_UINT64_KHR}; static const vvl::unordered_map> ExtendedVkComponentTypeKHREnums = { }; std::vector values(CoreVkComponentTypeKHREnums.cbegin(), CoreVkComponentTypeKHREnums.cend()); @@ -1042,11 +879,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkScopeKHREnums = { VK_SCOPE_DEVICE_KHR, VK_SCOPE_WORKGROUP_KHR, VK_SCOPE_SUBGROUP_KHR, VK_SCOPE_QUEUE_FAMILY_KHR, }; + constexpr std::array CoreVkScopeKHREnums = {VK_SCOPE_DEVICE_KHR, VK_SCOPE_WORKGROUP_KHR, VK_SCOPE_SUBGROUP_KHR, VK_SCOPE_QUEUE_FAMILY_KHR}; static const vvl::unordered_map> ExtendedVkScopeKHREnums = { }; std::vector values(CoreVkScopeKHREnums.cbegin(), CoreVkScopeKHREnums.cend()); @@ -1063,19 +896,13 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDebugReportObjectTypeEXTEnums = { VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, }; + constexpr std::array CoreVkDebugReportObjectTypeEXTEnums = {VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT}; static const vvl::unordered_map> ExtendedVkDebugReportObjectTypeEXTEnums = { - { &DeviceExtensions::vk_ext_debug_report, { VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, } }, - { &DeviceExtensions::vk_khr_sampler_ycbcr_conversion, { VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, } }, - { &DeviceExtensions::vk_khr_descriptor_update_template, { VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, } }, - { &DeviceExtensions::vk_nvx_binary_import, { VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT, } }, - { &DeviceExtensions::vk_khr_acceleration_structure, { VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT, } }, - { &DeviceExtensions::vk_nv_ray_tracing, { VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT, } }, - { &DeviceExtensions::vk_fuchsia_buffer_collection, { VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT, } }, + { &DeviceExtensions::vk_ext_debug_report, { VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT } }, + { &DeviceExtensions::vk_fuchsia_buffer_collection, { VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT } }, + { &DeviceExtensions::vk_khr_acceleration_structure, { VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT } }, + { &DeviceExtensions::vk_nvx_binary_import, { VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT } }, + { &DeviceExtensions::vk_nv_ray_tracing, { VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT } }, }; std::vector values(CoreVkDebugReportObjectTypeEXTEnums.cbegin(), CoreVkDebugReportObjectTypeEXTEnums.cend()); std::set unique_exts; @@ -1091,11 +918,7 @@ std::vector ValidationObject::ValidParamValues() con template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkRasterizationOrderAMDEnums = { VK_RASTERIZATION_ORDER_STRICT_AMD, VK_RASTERIZATION_ORDER_RELAXED_AMD, }; + constexpr std::array CoreVkRasterizationOrderAMDEnums = {VK_RASTERIZATION_ORDER_STRICT_AMD, VK_RASTERIZATION_ORDER_RELAXED_AMD}; static const vvl::unordered_map> ExtendedVkRasterizationOrderAMDEnums = { }; std::vector values(CoreVkRasterizationOrderAMDEnums.cbegin(), CoreVkRasterizationOrderAMDEnums.cend()); @@ -1112,11 +935,7 @@ std::vector ValidationObject::ValidParamValues() const template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkShaderInfoTypeAMDEnums = { VK_SHADER_INFO_TYPE_STATISTICS_AMD, VK_SHADER_INFO_TYPE_BINARY_AMD, VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD, }; + constexpr std::array CoreVkShaderInfoTypeAMDEnums = {VK_SHADER_INFO_TYPE_STATISTICS_AMD, VK_SHADER_INFO_TYPE_BINARY_AMD, VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD}; static const vvl::unordered_map> ExtendedVkShaderInfoTypeAMDEnums = { }; std::vector values(CoreVkShaderInfoTypeAMDEnums.cbegin(), CoreVkShaderInfoTypeAMDEnums.cend()); @@ -1133,11 +952,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkValidationCheckEXTEnums = { VK_VALIDATION_CHECK_ALL_EXT, VK_VALIDATION_CHECK_SHADERS_EXT, }; + constexpr std::array CoreVkValidationCheckEXTEnums = {VK_VALIDATION_CHECK_ALL_EXT, VK_VALIDATION_CHECK_SHADERS_EXT}; static const vvl::unordered_map> ExtendedVkValidationCheckEXTEnums = { }; std::vector values(CoreVkValidationCheckEXTEnums.cbegin(), CoreVkValidationCheckEXTEnums.cend()); @@ -1154,11 +969,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPipelineRobustnessBufferBehaviorEXTEnums = { VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT, VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT, VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT, }; + constexpr std::array CoreVkPipelineRobustnessBufferBehaviorEXTEnums = {VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT, VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT, VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT}; static const vvl::unordered_map> ExtendedVkPipelineRobustnessBufferBehaviorEXTEnums = { }; std::vector values(CoreVkPipelineRobustnessBufferBehaviorEXTEnums.cbegin(), CoreVkPipelineRobustnessBufferBehaviorEXTEnums.cend()); @@ -1175,11 +986,7 @@ std::vector ValidationObject::ValidParamV template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPipelineRobustnessImageBehaviorEXTEnums = { VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT, VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT, VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT, VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT, }; + constexpr std::array CoreVkPipelineRobustnessImageBehaviorEXTEnums = {VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT, VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT, VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT, VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT}; static const vvl::unordered_map> ExtendedVkPipelineRobustnessImageBehaviorEXTEnums = { }; std::vector values(CoreVkPipelineRobustnessImageBehaviorEXTEnums.cbegin(), CoreVkPipelineRobustnessImageBehaviorEXTEnums.cend()); @@ -1196,11 +1003,7 @@ std::vector ValidationObject::ValidParamVa template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDisplayPowerStateEXTEnums = { VK_DISPLAY_POWER_STATE_OFF_EXT, VK_DISPLAY_POWER_STATE_SUSPEND_EXT, VK_DISPLAY_POWER_STATE_ON_EXT, }; + constexpr std::array CoreVkDisplayPowerStateEXTEnums = {VK_DISPLAY_POWER_STATE_OFF_EXT, VK_DISPLAY_POWER_STATE_SUSPEND_EXT, VK_DISPLAY_POWER_STATE_ON_EXT}; static const vvl::unordered_map> ExtendedVkDisplayPowerStateEXTEnums = { }; std::vector values(CoreVkDisplayPowerStateEXTEnums.cbegin(), CoreVkDisplayPowerStateEXTEnums.cend()); @@ -1217,11 +1020,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDeviceEventTypeEXTEnums = { VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT, }; + constexpr std::array CoreVkDeviceEventTypeEXTEnums = {VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT}; static const vvl::unordered_map> ExtendedVkDeviceEventTypeEXTEnums = { }; std::vector values(CoreVkDeviceEventTypeEXTEnums.cbegin(), CoreVkDeviceEventTypeEXTEnums.cend()); @@ -1238,11 +1037,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDisplayEventTypeEXTEnums = { VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT, }; + constexpr std::array CoreVkDisplayEventTypeEXTEnums = {VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT}; static const vvl::unordered_map> ExtendedVkDisplayEventTypeEXTEnums = { }; std::vector values(CoreVkDisplayEventTypeEXTEnums.cbegin(), CoreVkDisplayEventTypeEXTEnums.cend()); @@ -1259,11 +1054,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkViewportCoordinateSwizzleNVEnums = { VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV, }; + constexpr std::array CoreVkViewportCoordinateSwizzleNVEnums = {VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV}; static const vvl::unordered_map> ExtendedVkViewportCoordinateSwizzleNVEnums = { }; std::vector values(CoreVkViewportCoordinateSwizzleNVEnums.cbegin(), CoreVkViewportCoordinateSwizzleNVEnums.cend()); @@ -1280,11 +1071,7 @@ std::vector ValidationObject::ValidParamValues() template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDiscardRectangleModeEXTEnums = { VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT, VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT, }; + constexpr std::array CoreVkDiscardRectangleModeEXTEnums = {VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT, VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT}; static const vvl::unordered_map> ExtendedVkDiscardRectangleModeEXTEnums = { }; std::vector values(CoreVkDiscardRectangleModeEXTEnums.cbegin(), CoreVkDiscardRectangleModeEXTEnums.cend()); @@ -1301,11 +1088,7 @@ std::vector ValidationObject::ValidParamValues() cons template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkConservativeRasterizationModeEXTEnums = { VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT, VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT, }; + constexpr std::array CoreVkConservativeRasterizationModeEXTEnums = {VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT, VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT}; static const vvl::unordered_map> ExtendedVkConservativeRasterizationModeEXTEnums = { }; std::vector values(CoreVkConservativeRasterizationModeEXTEnums.cbegin(), CoreVkConservativeRasterizationModeEXTEnums.cend()); @@ -1322,11 +1105,7 @@ std::vector ValidationObject::ValidParamValu template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkBlendOverlapEXTEnums = { VK_BLEND_OVERLAP_UNCORRELATED_EXT, VK_BLEND_OVERLAP_DISJOINT_EXT, VK_BLEND_OVERLAP_CONJOINT_EXT, }; + constexpr std::array CoreVkBlendOverlapEXTEnums = {VK_BLEND_OVERLAP_UNCORRELATED_EXT, VK_BLEND_OVERLAP_DISJOINT_EXT, VK_BLEND_OVERLAP_CONJOINT_EXT}; static const vvl::unordered_map> ExtendedVkBlendOverlapEXTEnums = { }; std::vector values(CoreVkBlendOverlapEXTEnums.cbegin(), CoreVkBlendOverlapEXTEnums.cend()); @@ -1343,11 +1122,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkCoverageModulationModeNVEnums = { VK_COVERAGE_MODULATION_MODE_NONE_NV, VK_COVERAGE_MODULATION_MODE_RGB_NV, VK_COVERAGE_MODULATION_MODE_ALPHA_NV, VK_COVERAGE_MODULATION_MODE_RGBA_NV, }; + constexpr std::array CoreVkCoverageModulationModeNVEnums = {VK_COVERAGE_MODULATION_MODE_NONE_NV, VK_COVERAGE_MODULATION_MODE_RGB_NV, VK_COVERAGE_MODULATION_MODE_ALPHA_NV, VK_COVERAGE_MODULATION_MODE_RGBA_NV}; static const vvl::unordered_map> ExtendedVkCoverageModulationModeNVEnums = { }; std::vector values(CoreVkCoverageModulationModeNVEnums.cbegin(), CoreVkCoverageModulationModeNVEnums.cend()); @@ -1364,11 +1139,7 @@ std::vector ValidationObject::ValidParamValues() con template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkShadingRatePaletteEntryNVEnums = { VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV, VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV, }; + constexpr std::array CoreVkShadingRatePaletteEntryNVEnums = {VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV, VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV}; static const vvl::unordered_map> ExtendedVkShadingRatePaletteEntryNVEnums = { }; std::vector values(CoreVkShadingRatePaletteEntryNVEnums.cbegin(), CoreVkShadingRatePaletteEntryNVEnums.cend()); @@ -1385,11 +1156,7 @@ std::vector ValidationObject::ValidParamValues() co template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkCoarseSampleOrderTypeNVEnums = { VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV, VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV, VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV, }; + constexpr std::array CoreVkCoarseSampleOrderTypeNVEnums = {VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV, VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV, VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV, VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV}; static const vvl::unordered_map> ExtendedVkCoarseSampleOrderTypeNVEnums = { }; std::vector values(CoreVkCoarseSampleOrderTypeNVEnums.cbegin(), CoreVkCoarseSampleOrderTypeNVEnums.cend()); @@ -1406,11 +1173,7 @@ std::vector ValidationObject::ValidParamValues() cons template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkRayTracingShaderGroupTypeKHREnums = { VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR, VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, }; + constexpr std::array CoreVkRayTracingShaderGroupTypeKHREnums = {VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR, VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR}; static const vvl::unordered_map> ExtendedVkRayTracingShaderGroupTypeKHREnums = { }; std::vector values(CoreVkRayTracingShaderGroupTypeKHREnums.cbegin(), CoreVkRayTracingShaderGroupTypeKHREnums.cend()); @@ -1427,11 +1190,7 @@ std::vector ValidationObject::ValidParamValues() template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkGeometryTypeKHREnums = { VK_GEOMETRY_TYPE_TRIANGLES_KHR, VK_GEOMETRY_TYPE_AABBS_KHR, VK_GEOMETRY_TYPE_INSTANCES_KHR, }; + constexpr std::array CoreVkGeometryTypeKHREnums = {VK_GEOMETRY_TYPE_TRIANGLES_KHR, VK_GEOMETRY_TYPE_AABBS_KHR, VK_GEOMETRY_TYPE_INSTANCES_KHR}; static const vvl::unordered_map> ExtendedVkGeometryTypeKHREnums = { }; std::vector values(CoreVkGeometryTypeKHREnums.cbegin(), CoreVkGeometryTypeKHREnums.cend()); @@ -1448,11 +1207,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkAccelerationStructureTypeKHREnums = { VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR, }; + constexpr std::array CoreVkAccelerationStructureTypeKHREnums = {VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR}; static const vvl::unordered_map> ExtendedVkAccelerationStructureTypeKHREnums = { }; std::vector values(CoreVkAccelerationStructureTypeKHREnums.cbegin(), CoreVkAccelerationStructureTypeKHREnums.cend()); @@ -1467,14 +1222,9 @@ std::vector ValidationObject::ValidParamValues() } - template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkCopyAccelerationStructureModeKHREnums = { VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR, VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR, VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR, }; + constexpr std::array CoreVkCopyAccelerationStructureModeKHREnums = {VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR, VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR, VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR}; static const vvl::unordered_map> ExtendedVkCopyAccelerationStructureModeKHREnums = { }; std::vector values(CoreVkCopyAccelerationStructureModeKHREnums.cbegin(), CoreVkCopyAccelerationStructureModeKHREnums.cend()); @@ -1491,11 +1241,7 @@ std::vector ValidationObject::ValidParamValu template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkAccelerationStructureMemoryRequirementsTypeNVEnums = { VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV, VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV, VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV, }; + constexpr std::array CoreVkAccelerationStructureMemoryRequirementsTypeNVEnums = {VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV, VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV, VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV}; static const vvl::unordered_map> ExtendedVkAccelerationStructureMemoryRequirementsTypeNVEnums = { }; std::vector values(CoreVkAccelerationStructureMemoryRequirementsTypeNVEnums.cbegin(), CoreVkAccelerationStructureMemoryRequirementsTypeNVEnums.cend()); @@ -1512,11 +1258,7 @@ std::vector ValidationObject::V template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkTimeDomainEXTEnums = { VK_TIME_DOMAIN_DEVICE_EXT, VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT, VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT, VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT, }; + constexpr std::array CoreVkTimeDomainEXTEnums = {VK_TIME_DOMAIN_DEVICE_EXT, VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT, VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT, VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT}; static const vvl::unordered_map> ExtendedVkTimeDomainEXTEnums = { }; std::vector values(CoreVkTimeDomainEXTEnums.cbegin(), CoreVkTimeDomainEXTEnums.cend()); @@ -1533,11 +1275,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkMemoryOverallocationBehaviorAMDEnums = { VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD, VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD, VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD, }; + constexpr std::array CoreVkMemoryOverallocationBehaviorAMDEnums = {VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD, VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD, VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD}; static const vvl::unordered_map> ExtendedVkMemoryOverallocationBehaviorAMDEnums = { }; std::vector values(CoreVkMemoryOverallocationBehaviorAMDEnums.cbegin(), CoreVkMemoryOverallocationBehaviorAMDEnums.cend()); @@ -1554,11 +1292,7 @@ std::vector ValidationObject::ValidParamValue template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPerformanceConfigurationTypeINTELEnums = { VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL, }; + constexpr std::array CoreVkPerformanceConfigurationTypeINTELEnums = {VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL}; static const vvl::unordered_map> ExtendedVkPerformanceConfigurationTypeINTELEnums = { }; std::vector values(CoreVkPerformanceConfigurationTypeINTELEnums.cbegin(), CoreVkPerformanceConfigurationTypeINTELEnums.cend()); @@ -1575,11 +1309,7 @@ std::vector ValidationObject::ValidParamVal template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkQueryPoolSamplingModeINTELEnums = { VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL, }; + constexpr std::array CoreVkQueryPoolSamplingModeINTELEnums = {VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL}; static const vvl::unordered_map> ExtendedVkQueryPoolSamplingModeINTELEnums = { }; std::vector values(CoreVkQueryPoolSamplingModeINTELEnums.cbegin(), CoreVkQueryPoolSamplingModeINTELEnums.cend()); @@ -1596,11 +1326,7 @@ std::vector ValidationObject::ValidParamValues() c template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPerformanceOverrideTypeINTELEnums = { VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL, VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL, }; + constexpr std::array CoreVkPerformanceOverrideTypeINTELEnums = {VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL, VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL}; static const vvl::unordered_map> ExtendedVkPerformanceOverrideTypeINTELEnums = { }; std::vector values(CoreVkPerformanceOverrideTypeINTELEnums.cbegin(), CoreVkPerformanceOverrideTypeINTELEnums.cend()); @@ -1617,11 +1343,7 @@ std::vector ValidationObject::ValidParamValues() template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPerformanceParameterTypeINTELEnums = { VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL, VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL, }; + constexpr std::array CoreVkPerformanceParameterTypeINTELEnums = {VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL, VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL}; static const vvl::unordered_map> ExtendedVkPerformanceParameterTypeINTELEnums = { }; std::vector values(CoreVkPerformanceParameterTypeINTELEnums.cbegin(), CoreVkPerformanceParameterTypeINTELEnums.cend()); @@ -1638,11 +1360,7 @@ std::vector ValidationObject::ValidParamValues( template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkPerformanceValueTypeINTELEnums = { VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL, VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL, VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL, VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL, VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL, }; + constexpr std::array CoreVkPerformanceValueTypeINTELEnums = {VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL, VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL, VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL, VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL, VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL}; static const vvl::unordered_map> ExtendedVkPerformanceValueTypeINTELEnums = { }; std::vector values(CoreVkPerformanceValueTypeINTELEnums.cbegin(), CoreVkPerformanceValueTypeINTELEnums.cend()); @@ -1659,11 +1377,7 @@ std::vector ValidationObject::ValidParamValues() co template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkValidationFeatureEnableEXTEnums = { VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT, VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT, VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT, VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT, VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT, }; + constexpr std::array CoreVkValidationFeatureEnableEXTEnums = {VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT, VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT, VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT, VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT, VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT}; static const vvl::unordered_map> ExtendedVkValidationFeatureEnableEXTEnums = { }; std::vector values(CoreVkValidationFeatureEnableEXTEnums.cbegin(), CoreVkValidationFeatureEnableEXTEnums.cend()); @@ -1680,11 +1394,7 @@ std::vector ValidationObject::ValidParamValues() c template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkValidationFeatureDisableEXTEnums = { VK_VALIDATION_FEATURE_DISABLE_ALL_EXT, VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT, VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT, VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT, VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT, VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT, VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT, VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT, }; + constexpr std::array CoreVkValidationFeatureDisableEXTEnums = {VK_VALIDATION_FEATURE_DISABLE_ALL_EXT, VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT, VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT, VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT, VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT, VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT, VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT, VK_VALIDATION_FEATURE_DISABLE_SHADER_VALIDATION_CACHE_EXT}; static const vvl::unordered_map> ExtendedVkValidationFeatureDisableEXTEnums = { }; std::vector values(CoreVkValidationFeatureDisableEXTEnums.cbegin(), CoreVkValidationFeatureDisableEXTEnums.cend()); @@ -1701,11 +1411,7 @@ std::vector ValidationObject::ValidParamValues() template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkComponentTypeNVEnums = { VK_COMPONENT_TYPE_FLOAT16_NV, VK_COMPONENT_TYPE_FLOAT32_NV, VK_COMPONENT_TYPE_FLOAT64_NV, VK_COMPONENT_TYPE_SINT8_NV, VK_COMPONENT_TYPE_SINT16_NV, VK_COMPONENT_TYPE_SINT32_NV, VK_COMPONENT_TYPE_SINT64_NV, VK_COMPONENT_TYPE_UINT8_NV, VK_COMPONENT_TYPE_UINT16_NV, VK_COMPONENT_TYPE_UINT32_NV, VK_COMPONENT_TYPE_UINT64_NV, }; + constexpr std::array CoreVkComponentTypeNVEnums = {VK_COMPONENT_TYPE_FLOAT16_NV, VK_COMPONENT_TYPE_FLOAT32_NV, VK_COMPONENT_TYPE_FLOAT64_NV, VK_COMPONENT_TYPE_SINT8_NV, VK_COMPONENT_TYPE_SINT16_NV, VK_COMPONENT_TYPE_SINT32_NV, VK_COMPONENT_TYPE_SINT64_NV, VK_COMPONENT_TYPE_UINT8_NV, VK_COMPONENT_TYPE_UINT16_NV, VK_COMPONENT_TYPE_UINT32_NV, VK_COMPONENT_TYPE_UINT64_NV}; static const vvl::unordered_map> ExtendedVkComponentTypeNVEnums = { }; std::vector values(CoreVkComponentTypeNVEnums.cbegin(), CoreVkComponentTypeNVEnums.cend()); @@ -1722,11 +1428,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkScopeNVEnums = { VK_SCOPE_DEVICE_NV, VK_SCOPE_WORKGROUP_NV, VK_SCOPE_SUBGROUP_NV, VK_SCOPE_QUEUE_FAMILY_NV, }; + constexpr std::array CoreVkScopeNVEnums = {VK_SCOPE_DEVICE_NV, VK_SCOPE_WORKGROUP_NV, VK_SCOPE_SUBGROUP_NV, VK_SCOPE_QUEUE_FAMILY_NV}; static const vvl::unordered_map> ExtendedVkScopeNVEnums = { }; std::vector values(CoreVkScopeNVEnums.cbegin(), CoreVkScopeNVEnums.cend()); @@ -1743,11 +1445,7 @@ std::vector ValidationObject::ValidParamValues() const { template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkCoverageReductionModeNVEnums = { VK_COVERAGE_REDUCTION_MODE_MERGE_NV, VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV, }; + constexpr std::array CoreVkCoverageReductionModeNVEnums = {VK_COVERAGE_REDUCTION_MODE_MERGE_NV, VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV}; static const vvl::unordered_map> ExtendedVkCoverageReductionModeNVEnums = { }; std::vector values(CoreVkCoverageReductionModeNVEnums.cbegin(), CoreVkCoverageReductionModeNVEnums.cend()); @@ -1764,11 +1462,7 @@ std::vector ValidationObject::ValidParamValues() cons template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkProvokingVertexModeEXTEnums = { VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT, }; + constexpr std::array CoreVkProvokingVertexModeEXTEnums = {VK_PROVOKING_VERTEX_MODE_FIRST_VERTEX_EXT, VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT}; static const vvl::unordered_map> ExtendedVkProvokingVertexModeEXTEnums = { }; std::vector values(CoreVkProvokingVertexModeEXTEnums.cbegin(), CoreVkProvokingVertexModeEXTEnums.cend()); @@ -1786,11 +1480,7 @@ std::vector ValidationObject::ValidParamValues() const template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkFullScreenExclusiveEXTEnums = { VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT, VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT, VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT, VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT, }; + constexpr std::array CoreVkFullScreenExclusiveEXTEnums = {VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT, VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT, VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT, VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT}; static const vvl::unordered_map> ExtendedVkFullScreenExclusiveEXTEnums = { }; std::vector values(CoreVkFullScreenExclusiveEXTEnums.cbegin(), CoreVkFullScreenExclusiveEXTEnums.cend()); @@ -1803,16 +1493,12 @@ std::vector ValidationObject::ValidParamValues() const std::copy(unique_exts.cbegin(), unique_exts.cend(), std::back_inserter(values)); return values; } +#endif //VK_USE_PLATFORM_WIN32_KHR -#endif // VK_USE_PLATFORM_WIN32_KHR template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkLineRasterizationModeEXTEnums = { VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, }; + constexpr std::array CoreVkLineRasterizationModeEXTEnums = {VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT}; static const vvl::unordered_map> ExtendedVkLineRasterizationModeEXTEnums = { }; std::vector values(CoreVkLineRasterizationModeEXTEnums.cbegin(), CoreVkLineRasterizationModeEXTEnums.cend()); @@ -1829,13 +1515,9 @@ std::vector ValidationObject::ValidParamValues() con template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkIndirectCommandsTokenTypeNVEnums = { VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV, }; + constexpr std::array CoreVkIndirectCommandsTokenTypeNVEnums = {VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV}; static const vvl::unordered_map> ExtendedVkIndirectCommandsTokenTypeNVEnums = { - { &DeviceExtensions::vk_ext_mesh_shader, { VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV, } }, + { &DeviceExtensions::vk_ext_mesh_shader, { VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV } }, }; std::vector values(CoreVkIndirectCommandsTokenTypeNVEnums.cbegin(), CoreVkIndirectCommandsTokenTypeNVEnums.cend()); std::set unique_exts; @@ -1851,11 +1533,7 @@ std::vector ValidationObject::ValidParamValues() template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDepthBiasRepresentationEXTEnums = { VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT, VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT, VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT, }; + constexpr std::array CoreVkDepthBiasRepresentationEXTEnums = {VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORMAT_EXT, VK_DEPTH_BIAS_REPRESENTATION_LEAST_REPRESENTABLE_VALUE_FORCE_UNORM_EXT, VK_DEPTH_BIAS_REPRESENTATION_FLOAT_EXT}; static const vvl::unordered_map> ExtendedVkDepthBiasRepresentationEXTEnums = { }; std::vector values(CoreVkDepthBiasRepresentationEXTEnums.cbegin(), CoreVkDepthBiasRepresentationEXTEnums.cend()); @@ -1870,13 +1548,26 @@ std::vector ValidationObject::ValidParamValues() c } +template<> +std::vector ValidationObject::ValidParamValues() const { + constexpr std::array CoreVkFragmentShadingRateTypeNVEnums = {VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV, VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV}; + static const vvl::unordered_map> ExtendedVkFragmentShadingRateTypeNVEnums = { + }; + std::vector values(CoreVkFragmentShadingRateTypeNVEnums.cbegin(), CoreVkFragmentShadingRateTypeNVEnums.cend()); + std::set unique_exts; + for (const auto& [extension, enums]: ExtendedVkFragmentShadingRateTypeNVEnums) { + if (IsExtEnabled(device_extensions.*extension)) { + unique_exts.insert(enums.cbegin(), enums.cend()); + } + } + std::copy(unique_exts.cbegin(), unique_exts.cend(), std::back_inserter(values)); + return values; +} + + template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkFragmentShadingRateNVEnums = { VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV, 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, VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV, VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV, }; + constexpr std::array CoreVkFragmentShadingRateNVEnums = {VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV, 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, VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV, VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV}; static const vvl::unordered_map> ExtendedVkFragmentShadingRateNVEnums = { }; std::vector values(CoreVkFragmentShadingRateNVEnums.cbegin(), CoreVkFragmentShadingRateNVEnums.cend()); @@ -1893,11 +1584,7 @@ std::vector ValidationObject::ValidParamValues() const template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkAccelerationStructureMotionInstanceTypeNVEnums = { VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV, VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV, VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV, }; + constexpr std::array CoreVkAccelerationStructureMotionInstanceTypeNVEnums = {VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_STATIC_NV, VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_MATRIX_MOTION_NV, VK_ACCELERATION_STRUCTURE_MOTION_INSTANCE_TYPE_SRT_MOTION_NV}; static const vvl::unordered_map> ExtendedVkAccelerationStructureMotionInstanceTypeNVEnums = { }; std::vector values(CoreVkAccelerationStructureMotionInstanceTypeNVEnums.cbegin(), CoreVkAccelerationStructureMotionInstanceTypeNVEnums.cend()); @@ -1914,11 +1601,7 @@ std::vector ValidationObject::Valid template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDeviceFaultAddressTypeEXTEnums = { VK_DEVICE_FAULT_ADDRESS_TYPE_NONE_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_WRITE_INVALID_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_EXECUTE_INVALID_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_UNKNOWN_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_INVALID_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT, }; + constexpr std::array CoreVkDeviceFaultAddressTypeEXTEnums = {VK_DEVICE_FAULT_ADDRESS_TYPE_NONE_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_WRITE_INVALID_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_EXECUTE_INVALID_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_UNKNOWN_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_INVALID_EXT, VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT}; static const vvl::unordered_map> ExtendedVkDeviceFaultAddressTypeEXTEnums = { }; std::vector values(CoreVkDeviceFaultAddressTypeEXTEnums.cbegin(), CoreVkDeviceFaultAddressTypeEXTEnums.cend()); @@ -1935,11 +1618,7 @@ std::vector ValidationObject::ValidParamValues() co template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDeviceFaultVendorBinaryHeaderVersionEXTEnums = { VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT, }; + constexpr std::array CoreVkDeviceFaultVendorBinaryHeaderVersionEXTEnums = {VK_DEVICE_FAULT_VENDOR_BINARY_HEADER_VERSION_ONE_EXT}; static const vvl::unordered_map> ExtendedVkDeviceFaultVendorBinaryHeaderVersionEXTEnums = { }; std::vector values(CoreVkDeviceFaultVendorBinaryHeaderVersionEXTEnums.cbegin(), CoreVkDeviceFaultVendorBinaryHeaderVersionEXTEnums.cend()); @@ -1956,11 +1635,7 @@ std::vector ValidationObject::ValidPa template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDeviceAddressBindingTypeEXTEnums = { VK_DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT, VK_DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT, }; + constexpr std::array CoreVkDeviceAddressBindingTypeEXTEnums = {VK_DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT, VK_DEVICE_ADDRESS_BINDING_TYPE_UNBIND_EXT}; static const vvl::unordered_map> ExtendedVkDeviceAddressBindingTypeEXTEnums = { }; std::vector values(CoreVkDeviceAddressBindingTypeEXTEnums.cbegin(), CoreVkDeviceAddressBindingTypeEXTEnums.cend()); @@ -1977,13 +1652,9 @@ std::vector ValidationObject::ValidParamValues() template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkMicromapTypeEXTEnums = { VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT, }; + constexpr std::array CoreVkMicromapTypeEXTEnums = {VK_MICROMAP_TYPE_OPACITY_MICROMAP_EXT}; static const vvl::unordered_map> ExtendedVkMicromapTypeEXTEnums = { - { &DeviceExtensions::vk_nv_displacement_micromap, { VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV, } }, + { &DeviceExtensions::vk_nv_displacement_micromap, { VK_MICROMAP_TYPE_DISPLACEMENT_MICROMAP_NV } }, }; std::vector values(CoreVkMicromapTypeEXTEnums.cbegin(), CoreVkMicromapTypeEXTEnums.cend()); std::set unique_exts; @@ -1997,13 +1668,26 @@ std::vector ValidationObject::ValidParamValues() const { } +template<> +std::vector ValidationObject::ValidParamValues() const { + constexpr std::array CoreVkBuildMicromapModeEXTEnums = {VK_BUILD_MICROMAP_MODE_BUILD_EXT}; + static const vvl::unordered_map> ExtendedVkBuildMicromapModeEXTEnums = { + }; + std::vector values(CoreVkBuildMicromapModeEXTEnums.cbegin(), CoreVkBuildMicromapModeEXTEnums.cend()); + std::set unique_exts; + for (const auto& [extension, enums]: ExtendedVkBuildMicromapModeEXTEnums) { + if (IsExtEnabled(device_extensions.*extension)) { + unique_exts.insert(enums.cbegin(), enums.cend()); + } + } + std::copy(unique_exts.cbegin(), unique_exts.cend(), std::back_inserter(values)); + return values; +} + + template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkCopyMicromapModeEXTEnums = { VK_COPY_MICROMAP_MODE_CLONE_EXT, VK_COPY_MICROMAP_MODE_SERIALIZE_EXT, VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT, VK_COPY_MICROMAP_MODE_COMPACT_EXT, }; + constexpr std::array CoreVkCopyMicromapModeEXTEnums = {VK_COPY_MICROMAP_MODE_CLONE_EXT, VK_COPY_MICROMAP_MODE_SERIALIZE_EXT, VK_COPY_MICROMAP_MODE_DESERIALIZE_EXT, VK_COPY_MICROMAP_MODE_COMPACT_EXT}; static const vvl::unordered_map> ExtendedVkCopyMicromapModeEXTEnums = { }; std::vector values(CoreVkCopyMicromapModeEXTEnums.cbegin(), CoreVkCopyMicromapModeEXTEnums.cend()); @@ -2018,13 +1702,26 @@ std::vector ValidationObject::ValidParamValues() const { } +template<> +std::vector ValidationObject::ValidParamValues() const { + constexpr std::array CoreVkAccelerationStructureCompatibilityKHREnums = {VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR, VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR}; + static const vvl::unordered_map> ExtendedVkAccelerationStructureCompatibilityKHREnums = { + }; + std::vector values(CoreVkAccelerationStructureCompatibilityKHREnums.cbegin(), CoreVkAccelerationStructureCompatibilityKHREnums.cend()); + std::set unique_exts; + for (const auto& [extension, enums]: ExtendedVkAccelerationStructureCompatibilityKHREnums) { + if (IsExtEnabled(device_extensions.*extension)) { + unique_exts.insert(enums.cbegin(), enums.cend()); + } + } + std::copy(unique_exts.cbegin(), unique_exts.cend(), std::back_inserter(values)); + return values; +} + + template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkAccelerationStructureBuildTypeKHREnums = { VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR, }; + constexpr std::array CoreVkAccelerationStructureBuildTypeKHREnums = {VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR}; static const vvl::unordered_map> ExtendedVkAccelerationStructureBuildTypeKHREnums = { }; std::vector values(CoreVkAccelerationStructureBuildTypeKHREnums.cbegin(), CoreVkAccelerationStructureBuildTypeKHREnums.cend()); @@ -2041,11 +1738,7 @@ std::vector ValidationObject::ValidParamVal template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkDirectDriverLoadingModeLUNARGEnums = { VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG, VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG, }; + constexpr std::array CoreVkDirectDriverLoadingModeLUNARGEnums = {VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG, VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG}; static const vvl::unordered_map> ExtendedVkDirectDriverLoadingModeLUNARGEnums = { }; std::vector values(CoreVkDirectDriverLoadingModeLUNARGEnums.cbegin(), CoreVkDirectDriverLoadingModeLUNARGEnums.cend()); @@ -2062,11 +1755,7 @@ std::vector ValidationObject::ValidParamValues( template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkOpticalFlowPerformanceLevelNVEnums = { VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV, VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV, VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV, VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV, }; + constexpr std::array CoreVkOpticalFlowPerformanceLevelNVEnums = {VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV, VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV, VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV, VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV}; static const vvl::unordered_map> ExtendedVkOpticalFlowPerformanceLevelNVEnums = { }; std::vector values(CoreVkOpticalFlowPerformanceLevelNVEnums.cbegin(), CoreVkOpticalFlowPerformanceLevelNVEnums.cend()); @@ -2083,11 +1772,7 @@ std::vector ValidationObject::ValidParamValues( template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkOpticalFlowSessionBindingPointNVEnums = { VK_OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV, }; + constexpr std::array CoreVkOpticalFlowSessionBindingPointNVEnums = {VK_OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV}; static const vvl::unordered_map> ExtendedVkOpticalFlowSessionBindingPointNVEnums = { }; std::vector values(CoreVkOpticalFlowSessionBindingPointNVEnums.cbegin(), CoreVkOpticalFlowSessionBindingPointNVEnums.cend()); @@ -2104,11 +1789,7 @@ std::vector ValidationObject::ValidParamValu template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkShaderCodeTypeEXTEnums = { VK_SHADER_CODE_TYPE_BINARY_EXT, VK_SHADER_CODE_TYPE_SPIRV_EXT, }; + constexpr std::array CoreVkShaderCodeTypeEXTEnums = {VK_SHADER_CODE_TYPE_BINARY_EXT, VK_SHADER_CODE_TYPE_SPIRV_EXT}; static const vvl::unordered_map> ExtendedVkShaderCodeTypeEXTEnums = { }; std::vector values(CoreVkShaderCodeTypeEXTEnums.cbegin(), CoreVkShaderCodeTypeEXTEnums.cend()); @@ -2123,13 +1804,26 @@ std::vector ValidationObject::ValidParamValues() const { } +template<> +std::vector ValidationObject::ValidParamValues() const { + constexpr std::array CoreVkBuildAccelerationStructureModeKHREnums = {VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR}; + static const vvl::unordered_map> ExtendedVkBuildAccelerationStructureModeKHREnums = { + }; + std::vector values(CoreVkBuildAccelerationStructureModeKHREnums.cbegin(), CoreVkBuildAccelerationStructureModeKHREnums.cend()); + std::set unique_exts; + for (const auto& [extension, enums]: ExtendedVkBuildAccelerationStructureModeKHREnums) { + if (IsExtEnabled(device_extensions.*extension)) { + unique_exts.insert(enums.cbegin(), enums.cend()); + } + } + std::copy(unique_exts.cbegin(), unique_exts.cend(), std::back_inserter(values)); + return values; +} + + template<> std::vector ValidationObject::ValidParamValues() const { - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array CoreVkShaderGroupShaderKHREnums = { VK_SHADER_GROUP_SHADER_GENERAL_KHR, VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR, VK_SHADER_GROUP_SHADER_ANY_HIT_KHR, VK_SHADER_GROUP_SHADER_INTERSECTION_KHR, }; + constexpr std::array CoreVkShaderGroupShaderKHREnums = {VK_SHADER_GROUP_SHADER_GENERAL_KHR, VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR, VK_SHADER_GROUP_SHADER_ANY_HIT_KHR, VK_SHADER_GROUP_SHADER_INTERSECTION_KHR}; static const vvl::unordered_map> ExtendedVkShaderGroupShaderKHREnums = { }; std::vector values(CoreVkShaderGroupShaderKHREnums.cbegin(), CoreVkShaderGroupShaderKHREnums.cend()); @@ -2143,3 +1837,5 @@ std::vector ValidationObject::ValidParamValues() const { return values; } + +// NOLINTEND diff --git a/layers/vulkan/generated/valid_param_values.h b/layers/vulkan/generated/valid_enum_values.h similarity index 76% rename from layers/vulkan/generated/valid_param_values.h rename to layers/vulkan/generated/valid_enum_values.h index 9d7fb527574..a1dc7d4e1e3 100644 --- a/layers/vulkan/generated/valid_param_values.h +++ b/layers/vulkan/generated/valid_enum_values.h @@ -1,36 +1,33 @@ -/* *** THIS FILE IS GENERATED - DO NOT EDIT! *** - * See parameter_validation_generator.py for modifications - * - * Copyright (c) 2023 The Khronos Group Inc. - * Copyright (c) 2023 LunarG, Inc. - * Copyright (C) 2023 Google Inc. - * Copyright (c) 2023 Valve Corporation - * - * 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 FILE IS GENERATED - DO NOT EDIT *** +// See valid_enum_values_generator.py for modifications +/*************************************************************************** +* +* Copyright (c) 2015-2023 The Khronos Group Inc. +* Copyright (c) 2015-2023 Valve Corporation +* Copyright (c) 2015-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. +****************************************************************************/ +// NOLINTBEGIN template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; @@ -56,28 +53,20 @@ template<> std::vector ValidationObject::ValidParamValues() template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; #ifdef VK_ENABLE_BETA_EXTENSIONS template<> std::vector ValidationObject::ValidParamValues() const; -#endif // VK_ENABLE_BETA_EXTENSIONS +#endif //VK_ENABLE_BETA_EXTENSIONS template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; @@ -94,7 +83,6 @@ template<> std::vector ValidationObject::ValidParamVa template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; @@ -117,11 +105,10 @@ template<> std::vector ValidationObject::ValidParamVa template<> std::vector ValidationObject::ValidParamValues() const; #ifdef VK_USE_PLATFORM_WIN32_KHR template<> std::vector ValidationObject::ValidParamValues() const; -#endif // VK_USE_PLATFORM_WIN32_KHR +#endif //VK_USE_PLATFORM_WIN32_KHR template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; @@ -131,18 +118,13 @@ template<> std::vector ValidationObject::ValidPar template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -#ifdef VK_ENABLE_BETA_EXTENSIONS -template<> std::vector ValidationObject::ValidParamValues() const; -#endif // VK_ENABLE_BETA_EXTENSIONS -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; -template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; template<> std::vector ValidationObject::ValidParamValues() const; + +// NOLINTEND diff --git a/layers/vulkan/generated/vk_enum_string_helper.h b/layers/vulkan/generated/vk_enum_string_helper.h index 74f430157fc..15d063fb5d2 100644 --- a/layers/vulkan/generated/vk_enum_string_helper.h +++ b/layers/vulkan/generated/vk_enum_string_helper.h @@ -585,6 +585,18 @@ static inline const char* string_VkStructureType(VkStructureType input_value) { return "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"; case VK_STRUCTURE_TYPE_PRESENT_INFO_KHR: return "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR: + return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"; + case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR: + return "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"; + case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: + return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"; + case VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR: + return "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR: + return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"; + case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR: + return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"; case VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR: return "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"; case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR: @@ -821,18 +833,6 @@ static inline const char* string_VkStructureType(VkStructureType input_value) { return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"; case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV: return "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"; - case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"; - case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: - return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"; - case VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR: - return "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"; - case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR: - return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"; case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT: return "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"; case VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN: @@ -1545,6 +1545,10 @@ static inline const char* string_VkStructureType(VkStructureType input_value) { return "VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT: + return "VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT"; + case VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT: + return "VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT: @@ -1771,10 +1775,6 @@ static inline const char* string_VkStructureType(VkStructureType input_value) { return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT"; case VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT: return "VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT"; - case VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT: - return "VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT"; - case VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT: - return "VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM"; case VK_STRUCTURE_TYPE_TILE_PROPERTIES_QCOM: @@ -3757,6 +3757,8 @@ static inline const char* string_VkDebugReportObjectTypeEXT(VkDebugReportObjectT return "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"; case VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT: return "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT"; + case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT: + return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"; case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT: return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"; case VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT: @@ -3765,8 +3767,6 @@ static inline const char* string_VkDebugReportObjectTypeEXT(VkDebugReportObjectT return "VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT"; case VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT: return "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT"; - case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT: - return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"; case VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT: return "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT"; case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT: @@ -7137,10 +7137,10 @@ static inline std::string string_VkCompositeAlphaFlagsKHR(VkCompositeAlphaFlagsK } static inline const char* string_VkSwapchainCreateFlagBitsKHR(VkSwapchainCreateFlagBitsKHR input_value) { switch (input_value) { - case VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR: - return "VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"; case VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR: return "VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"; + case VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR: + return "VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"; case VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR: return "VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"; case VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT: diff --git a/scripts/generate_source.py b/scripts/generate_source.py index 89d3647301b..524ba838c3a 100755 --- a/scripts/generate_source.py +++ b/scripts/generate_source.py @@ -61,9 +61,11 @@ def main(argv): "layer_chassis_dispatch.h", "object_tracker.cpp", "object_tracker.h", - "parameter_validation.cpp", - "parameter_validation.h", + "stateless_validation_helper.cpp", + "stateless_validation_helper.h", "enum_flag_bits.h", + "valid_enum_values.cpp", + "valid_enum_values.h", "sync_validation_types.cpp", "sync_validation_types.h", "thread_safety.cpp", diff --git a/scripts/generators/base_generator.py b/scripts/generators/base_generator.py index 22334eb2144..9cf6e7fa495 100644 --- a/scripts/generators/base_generator.py +++ b/scripts/generators/base_generator.py @@ -114,9 +114,8 @@ def __init__(self, OutputGenerator.__init__(self, errFile, warnFile, diagFile) self.vk = VulkanObject() - # Needed because beginFeature()/endFeatures() wraps all - # the genCmd() calls that are created with a given - # Version or Extension + # reg.py has a `self.featureName` but this is nicer because + # it will be either the Version or Extension object self.currentFeature = None # These are custom fields for the Validation Layers @@ -152,6 +151,14 @@ def beginFile(self, genOpts): sys.exit(1) for json_vuid_string in ExtractVUIDs(vuid_dict): self.valid_vuids.add(json_vuid_string) + # List of VUs that should exists, but have a spec bug + for vuid in [ + # https://gitlab.khronos.org/vulkan/vulkan/-/issues/3548 + "VUID-VkImageDrmFormatModifierExplicitCreateInfoEXT-drmFormatModifierPlaneCount-arraylength", + "VUID-VkImportMemoryHostPointerInfoEXT-pHostPointer-parameter" + ]: + self.valid_vuids.add(vuid) + # Initialize members that require the tree self.handle_types = GetHandleTypes(self.registry.tree) @@ -172,8 +179,19 @@ def generate(self): def endFile(self): # This is the point were reg.py has ran, everything is collected + # We do some post processing now + + # 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 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 + # All inherited generators should run from here self.generate() + # This should not have to do anything but call into OutputGenerator OutputGenerator.endFile(self) @@ -205,8 +223,10 @@ def beginFeature(self, interface, emit): self.vk.extensions[name] = self.currentFeature else: # version number = interface.get('number') - self.currentFeature = Version(name, number) - self.vk.versions[name] = self.currentFeature + if number != '1.0': + apiName = name.replace('VK_', 'VK_API_') + self.currentFeature = Version(name, apiName, number) + self.vk.versions[name] = self.currentFeature def endFeature(self): OutputGenerator.endFeature(self) @@ -257,11 +277,17 @@ def genCmd(self, cmdinfo, name, alias): paramType = textIfFind(param, 'type') paramAlias = param.get('alias') paramExternsync = boolGet(param, 'externsync') - paramOptional = boolGet(param, 'optional') paramNoautovalidity = boolGet(param, 'noautovalidity') paramLength = param.get('altlen') if param.get('altlen') is not None else param.get('len') + + # See Member::optional code for details of this + optionalValues = splitIfGet(param, 'optional') + paramOptional = optionalValues is not None and optionalValues[0].lower() == "true" + paramOptionalPointer = optionalValues is not None and len(optionalValues) > 1 and optionalValues[1].lower() == "true" + params.append(CommandParam(paramName, paramType, paramAlias, paramExternsync, - paramOptional, paramNoautovalidity, paramLength)) + paramOptional, paramOptionalPointer, + paramNoautovalidity, paramLength)) self.vk.commands[name] = Command(name, alias, self.currentFeature, returnType, api, tasks, queues, successcodes, errorcodes, @@ -270,7 +296,8 @@ def genCmd(self, cmdinfo, name, alias): # # List the enum for the commands - def genGroup(self, groupinfo, name, alias): + # TODO - Seems empty groups like `VkDeviceDeviceMemoryReportCreateInfoEXT` don't show up in here + def genGroup(self, groupinfo, groupName, alias): if alias is not None: return # There can be case where the Enum/Bitmask is in a protect, but the individual @@ -289,15 +316,18 @@ def genGroup(self, groupinfo, name, alias): protect = elem.get('protect') # Some values have multiple extensions (ex VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR) - # genGroup() lists them twice, so need to just remove, update, re-add if we find a duplicate - for field in fields: - if field.name == fieldName: - extensions.append(field.extensions) - fields.remove(field) - - fields.append(EnumField(fieldName, negative, extensions, protect)) - - self.vk.enums[name] = Enum(name, bitwidth, groupProtect, fields) + # genGroup() lists them twice + updateField = next((x for x in fields if x.name == fieldName), None) + if updateField is not None: + # Watch out for edge case like VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE which is a version and ext + if updateField.extensions is None: + updateField = [extensions] + else: + updateField.extensions.append(extensions) + else: + fields.append(EnumField(fieldName, negative, extensions, protect)) + + self.vk.enums[groupName] = Enum(groupName, bitwidth, groupProtect, True, fields) else: # "bitmask" for elem in enumElem.findall('enum'): @@ -315,27 +345,34 @@ def genGroup(self, groupinfo, name, alias): protect = elem.get('protect') # Some values have multiple extensions (ex VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT) - # genGroup() lists them twice, so need to just remove, update, re-add if we find a duplicate - for field in fields: - if field.name == fieldName: - extensions.append(field.extensions) - fields.remove(field) + # genGroup() lists them twice + updateField = next((x for x in fields if x.name == fieldName), None) + if updateField is not None: + updateField.extensions.append(extensions) + else: + fields.append(Flag(fieldName, fieldValue, fieldMultiBit, fieldZero, + extensions, protect)) - fields.append(Flag(fieldName, fieldValue, fieldMultiBit, fieldZero, - extensions, protect)) - - flagName = name.replace('FlagBits', 'Flags') - self.vk.bitmasks[name] = Bitmask(name, flagName, bitwidth, groupProtect, fields) + flagName = groupName.replace('FlagBits', 'Flags') + self.vk.bitmasks[groupName] = Bitmask(groupName, flagName, bitwidth, groupProtect, fields) def genType(self, typeInfo, typeName, alias): OutputGenerator.genType(self, typeInfo, typeName, alias) - if alias is not None: - return typeElem = typeInfo.elem protect = self.currentFeature.protect if hasattr(self.currentFeature, 'protect') and self.currentFeature.protect is not None else None category = typeElem.get('category') if (category == 'struct' or category == 'union'): + version = self.currentFeature if isinstance(self.currentFeature, Version) else None + extension = [self.currentFeature] if isinstance(self.currentFeature, Extension) else [] + if alias is not None: + struct = self.vk.structs[alias] + # Some structs (ex VkAttachmentSampleCountInfoAMD) can have multiple alias pointing to same extension + struct.extensions += extension if extension and extension[0] not in struct.extensions else [] + struct.version = version if struct.version is None else struct.version + return + union = category == 'union' + returnedOnly = boolGet(typeElem, 'returnedonly') allowDuplicate = boolGet(typeElem, 'allowduplicate') structExtends = splitIfGet(typeElem, 'structextends') @@ -351,32 +388,45 @@ def genType(self, typeInfo, typeName, alias): type = textIfFind(member, 'type') sType = member.get('values') if member.get('values') is not None else sType externSync = boolGet(member, 'externsync') - optional = boolGet(member, 'optional') noautovalidity = boolGet(member, 'noautovalidity') length = member.get('altlen') if member.get('altlen') is not None else member.get('len') limittype = member.get('limittype') cdecl = self.makeCParamDecl(member, 0) pointer = '*' in cdecl - members.append(Member(name, type, externSync, optional, + # 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 optiona; + 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, externSync, optional, optionalPointer, noautovalidity, length, limittype, pointer, cdecl)) - if len(members) == 0: - print(typeName) - self.vk.structs[typeName] = Struct(typeName, union, structExtends, protect, sType, - returnedOnly, allowDuplicate, members) + self.vk.structs[typeName] = Struct(typeName, extension, version, union, + structExtends, protect, sType, returnedOnly, + allowDuplicate, members) elif category == 'handle': + if alias is not None: + return type = typeElem.get('objtypeenum') instance = typeElem.get('parent') == 'VkInstance' device = not instance dispatchable = self.handle_types[typeName] == 'VK_DEFINE_HANDLE' self.vk.handles[typeName] = Handle(typeName, type, protect, instance, device, dispatchable) + elif category == 'define': + if typeName == 'VK_HEADER_VERSION': + self.vk.headerVersion = typeElem.find('name').tail.strip() + else: # not all categories are used # 'group'/'enum'/'bitmask' are routed to genGroup instead - # 'basetype'/`define`/''include' are only for headers + # 'basetype'/'include' are only for headers # 'funcpointer` ingore until needed return diff --git a/scripts/generators/command_validation_generator.py b/scripts/generators/command_validation_generator.py index 0b264d10d92..6bc30f089f0 100644 --- a/scripts/generators/command_validation_generator.py +++ b/scripts/generators/command_validation_generator.py @@ -105,11 +105,8 @@ def generateSource(self): out.append(' kVUIDUndefined,\n') for command in filter(lambda x: x.name.startswith('vkCmd'), self.vk.commands.values()): name = command.name if command.alias is None else command.alias - vuid = f'VUID-{name}-commandBuffer-recording' - if vuid not in self.valid_vuids: - print(f'Warning: Could not find {vuid} in validusage.json') - vuid = vuid.replace('VUID-', 'UNASSIGNED-') - out.append(f' "{vuid}",\n') + vuid = getVUID(self.valid_vuids, f'VUID-{name}-commandBuffer-recording') + out.append(f' {vuid},\n') out.append('}};') self.write("".join(out)) @@ -223,11 +220,8 @@ def generateSource(self): if command.primary and command.secondary: out.append(' nullptr,\n') elif command.primary: - vuid = f'VUID-{name}-bufferlevel' - if vuid not in self.valid_vuids: - print(f'Warning: Could not find {vuid} in validusage.json') - vuid = vuid.replace('VUID-', 'UNASSIGNED-') - out.append(f' "{vuid}",\n') + vuid = getVUID(self.valid_vuids, f'VUID-{name}-bufferlevel') + out.append(f' {vuid},\n') else: # Currently there is only "primary" or "primary,secondary" in XML # Hard to predict what might change, so will error out instead if assumption breaks diff --git a/scripts/generators/enum_flag_bits_generator.py b/scripts/generators/enum_flag_bits_generator.py new file mode 100644 index 00000000000..67c86094c6e --- /dev/null +++ b/scripts/generators/enum_flag_bits_generator.py @@ -0,0 +1,104 @@ +#!/usr/bin/python3 -i +# +# Copyright (c) 2015-2023 The Khronos Group Inc. +# Copyright (c) 2015-2023 Valve Corporation +# Copyright (c) 2015-2023 LunarG, Inc. +# Copyright (c) 2015-2023 Google 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. + +import os +import sys +from generators.generator_utils import * +from generators.vulkan_object import * +from generators.base_generator import BaseGenerator + +class EnumFlagBitsOutputGenerator(BaseGenerator): + def __init__(self, + errFile = sys.stderr, + warnFile = sys.stderr, + diagFile = sys.stdout): + BaseGenerator.__init__(self, errFile, warnFile, diagFile) + + def generate(self): + + bitmasks = [] # List[Bitmask] + # Build up a list of which flagBits are actually called + # Some flagBits are only for return values, so the user will never call a function + # using them, and can reduce which ones we generate + for struct in [x for x in self.vk.structs.values() if not x.returnedOnly]: + for member in struct.members: + flagName = member.type.replace('Flags', 'FlagBits') + if member.type in self.vk.bitmasks and self.vk.bitmasks[member.type] not in bitmasks: + bitmasks.append(self.vk.bitmasks[member.type]) + elif flagName in self.vk.bitmasks and self.vk.bitmasks[flagName] not in bitmasks: + bitmasks.append(self.vk.bitmasks[flagName]) + for command in self.vk.commands.values(): + for param in command.params: + flagName = param.type.replace('Flags', 'FlagBits') + if param.type in self.vk.bitmasks and self.vk.bitmasks[param.type] not in bitmasks: + bitmasks.append(self.vk.bitmasks[param.type]) + elif flagName in self.vk.bitmasks and self.vk.bitmasks[flagName] not in bitmasks: + bitmasks.append(self.vk.bitmasks[flagName]) + + out = [] + out.append(f'''{fileIsGeneratedWarning(os.path.basename(__file__))} +/*************************************************************************** +* +* Copyright (c) 2015-2023 The Khronos Group Inc. +* Copyright (c) 2015-2023 Valve Corporation +* Copyright (c) 2015-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. +****************************************************************************/\n''') + out.append('// NOLINTBEGIN') # Wrap for clang-tidy to ignore + out.append(''' +#pragma once + +#include +#include "vulkan/vulkan.h"\n''') + + out.append(f'const uint32_t GeneratedVulkanHeaderVersion = {self.vk.headerVersion};\n') + for bitmask in bitmasks: + if bitmask.flagName == 'VkGeometryInstanceFlagsKHR': + continue # only called in VkAccelerationStructureInstanceKHR which is never called anywhere explicitly + elif len(bitmask.flags) == 0: + continue # some bitmask are empty and used for reserve in the future + + out.extend([f'#ifdef {bitmask.protect}\n'] if bitmask.protect else []) + out.append(f'const {bitmask.flagName} All{bitmask.name} = {"|".join([flag.name for flag in bitmask.flags])}') + out.append(';\n') + out.extend([f'#endif //{bitmask.protect}\n'] if bitmask.protect else []) + + out.append('\n') + out.append('// mask of all the VK_PIPELINE_STAGE_*_SHADER_BIT stages\n') + out.append(f'const VkPipelineStageFlagBits2 allVkPipelineShaderStageBits2 = {"|".join([flag.name for flag in self.vk.bitmasks["VkPipelineStageFlagBits2"].flags if "_SHADER_BIT" in flag.name])};\n') + + out.append('\n') + flagBitsAsArray = ['VkQueueFlagBits', 'VkShaderStageFlagBits'] + for bitmask in [self.vk.bitmasks[x] for x in flagBitsAsArray]: + out.append(f'[[maybe_unused]] constexpr std::array All{bitmask.flagName} = {{{",".join([flag.name for flag in bitmask.flags])}}};\n') + + out.append('// NOLINTEND') # Wrap for clang-tidy to ignore + self.write("".join(out)) diff --git a/scripts/generators/generator_utils.py b/scripts/generators/generator_utils.py index 4e06dab201f..f46ef1c2283 100644 --- a/scripts/generators/generator_utils.py +++ b/scripts/generators/generator_utils.py @@ -41,4 +41,11 @@ def getFormatedLength(length: str): result = length if 'null-terminated' not in length else length.split(',')[0] # Spec has now notation for len attributes, using :: instead of platform specific pointer symbol result = result.replace('::', '->') - return result \ No newline at end of file + return result + +# Will do a sanity check the VUID exists +def getVUID(valid_vuids: set, vuid: str, quotes: bool = True) -> str: + if vuid not in valid_vuids: + print(f'Warning: Could not find {vuid} in validusage.json') + vuid = vuid.replace('VUID-', 'UNASSIGNED-') + return vuid if not quotes else f'"{vuid}"' \ No newline at end of file diff --git a/scripts/generators/layer_chassis_generator.py b/scripts/generators/layer_chassis_generator.py index 9760002ee25..415d4ceddf8 100644 --- a/scripts/generators/layer_chassis_generator.py +++ b/scripts/generators/layer_chassis_generator.py @@ -1763,7 +1763,7 @@ def endFile(self): chassis_hdr_content += self.inline_custom_validation_class_definitions chassis_hdr_content += '};\n\n' chassis_hdr_content += 'extern small_unordered_map layer_data_map;' - chassis_hdr_content += f'\n#include "{ParameterValidationOutputGenerator.VALID_PARAM_VALUES_PATH}"' + chassis_hdr_content += f'\n#include "valid_enum_values.h"' write(chassis_hdr_content, file=self.outFile) elif self.helper_header: self.newline() diff --git a/scripts/generators/parameter_validation_generator.py b/scripts/generators/parameter_validation_generator.py index b36dc0a2b83..68d8b58af93 100644 --- a/scripts/generators/parameter_validation_generator.py +++ b/scripts/generators/parameter_validation_generator.py @@ -61,11 +61,6 @@ class ParameterValidationOutputGenerator(OutputGenerator): # This is an ordered list of sections in the header file. ALL_SECTIONS = ['command'] - # ValidationObject (i.e., not just StatelessValidation) needs access to these values. - # Future "script refactoring efforts" should try to move common code outside of this file so it can better be consumed by - # the chassis and parameter validation generation scripts. - VALID_PARAM_VALUES_PATH = 'valid_param_values.h' - def __init__(self, errFile = sys.stderr, warnFile = sys.stderr, @@ -75,13 +70,6 @@ def __init__(self, self.declarations = [] self.specializations = [] - # Template specialization declarations, which must appear at namespace scope (i.e., not inside a class declaration) - self.specFilePath = ParameterValidationOutputGenerator.VALID_PARAM_VALUES_PATH - self.categoryFilePath = 'valid_param_values.cpp' - - inline_custom_source_preamble = """ -""" - # These functions have additional, custom-written checks in the utils cpp file. CodeGen will automatically add a call # to those functions of the form 'bool manual_PreCallValidateAPIName', where the 'vk' is dropped. # see 'manual_PreCallValidateCreateGraphicsPipelines' as an example. @@ -292,7 +280,6 @@ def __init__(self, self.alias_dict = dict() # Dict of cmd|struct aliases self.header_file = False # Header file generation flag self.source_file = False # Source file generation flag - self.enum_file = False # Enum helper header file generation flag self.instance_extension_list = '' # List of instance extension name defines self.device_extension_list = '' # List of device extension name defines self.returnedonly_structs = [] # List of structs with 'returnonly' attribute @@ -364,31 +351,12 @@ def ExtractVUIDs(self, d): # Called at file creation time def beginFile(self, genOpts): OutputGenerator.beginFile(self, genOpts) - self.header_file = (genOpts.filename == 'parameter_validation.h') - self.source_file = (genOpts.filename == 'parameter_validation.cpp') - self.enum_file = (genOpts.filename == 'enum_flag_bits.h') - - if not self.header_file and not self.source_file and not self.enum_file: - print("Error: Output Filenames have changed, update generator source.\n") - sys.exit(1) - - if self.source_file or self.header_file or self.enum_file: - # Output Copyright text - s = self.GenerateCopyright() - write(s, file=self.outFile) + self.source_file = (genOpts.filename == 'stateless_validation_helper.cpp') - if self.header_file or self.enum_file: - write('#pragma once\n', file=self.outFile) + # Output Copyright text + s = self.GenerateCopyright() + write(s, file=self.outFile) - if self.enum_file: - write('#include ', file=self.outFile) - write('#include "vulkan/vulkan.h"\n', file=self.outFile) - - if not self.source_file: - return - - stype_map = '' - stype_version_dict = dict() # Create contents of Structs->API version unordered map root = self.registry.reg for node in root.findall('feature'): @@ -455,41 +423,12 @@ def beginFile(self, genOpts): # # Called at end-time for final content output def endFile(self): - if self.enum_file: - # Write the declaration for the HeaderVersion - if self.headerVersion: - write('const uint32_t GeneratedVulkanHeaderVersion = {};'.format(self.headerVersion), file=self.outFile) - - # Don't need flag/enum lists if app can never call it to be validated - # But need to save everything as not all information is known until endFile() - for flag, string in self.flag_values_definitions.items(): - if flag == 'VkGeometryInstanceFlagsKHR': - # only called in VkAccelerationStructureInstanceKHR which is never called anywhere explicitly - continue - flagBits = flag.replace('Flags', 'FlagBits') - if flag in self.called_types or flagBits in self.called_types: - write(string, file=self.outFile) - - for flag, string in self.flag_array_values_definitions.items(): - # These are custom selected flags, so will always write - write(string, file=self.outFile) - - elif self.source_file: + if self.source_file: pnext_handler = 'bool StatelessValidation::ValidatePnextStructContents(const char *api_name, const ParameterName ¶meter_name,\n' pnext_handler += ' const VkBaseOutStructure* header, const char *pnext_vuid, bool is_physdev_api, bool is_const_param) const {\n' pnext_handler += ' bool skip = false;\n' pnext_handler += ' switch(header->sType) {\n' - with open(os.path.join(self.genOpts.directory, self.categoryFilePath), mode='w', encoding='utf-8', newline='\n') as fd: - preamble = f'''{self.GenerateCopyright(None)} -#include "chassis.h" -#include "utils/hash_vk_types.h" -''' - write(preamble, file=fd) - for enum, string in self.enum_values_definitions.items(): - if enum in self.called_types: - write(string, file=fd) - # Do some processing here to extract data from validatedstructs... for item in self.structextends_list: postProcSpec = {} @@ -517,11 +456,8 @@ def endFile(self): ver_info = self.stype_version_dict[struct_type[:-4]] else: ver_info = None - api_check = False if ver_info is not None: if 'VK_API_VERSION_' in ver_info: - api_check = True - api_version = ver_info; pnext_check += ' if (api_version < %s) {\n' % ver_info pnext_check += ' skip |= LogError(\n' pnext_check += ' instance, pnext_vuid,\n' @@ -582,14 +518,7 @@ def endFile(self): commands_text = '\n'.join(self.validation) write(commands_text, file=self.outFile) self.newline() - if self.header_file: - # Output declarations and record intercepted procedures - write('\n'.join(self.declarations), file=self.outFile) - # Specializations need to appear outside of the class definition - with open(os.path.join(self.genOpts.directory, self.specFilePath), mode='w', encoding='utf-8', newline='\n') as fd: - write(self.GenerateCopyright(None), file=fd) - write('\n'.join(self.specializations), file=fd) # Finish processing in superclass OutputGenerator.endFile(self) # @@ -663,8 +592,6 @@ def beginFeature(self, interface, emit): # # Called at the end of each extension (feature) def endFeature(self): - if self.header_file: - return # C-specific # Actually write the interface to the output file. if (self.emit): @@ -724,8 +651,6 @@ def genType(self, typeinfo, name, alias): # 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.) def genStruct(self, typeinfo, typeName, alias): - if self.header_file: - return # alias has already been recorded in genType, above OutputGenerator.genStruct(self, typeinfo, typeName, alias) @@ -779,11 +704,6 @@ def genStruct(self, typeinfo, typeName, alias): if not returned_only and (not ispointer or isconst): self.called_types.add(type) - # enum file just needs the called_types - if self.enum_file: - continue - - structextends = False membersInfo.append(self.CommandParam(type=type, name=name, ispointer=ispointer, isstaticarray=isstaticarray, @@ -839,68 +759,7 @@ def genGroup(self, groupinfo, groupName, alias): isEnum = ('FLAG_BITS' not in expandPrefix) if isEnum and self.source_file: self.enumRanges.add(groupName) - # Create definition for a list containing valid enum values for this enumerated type - enum_entry = '' - if self.featureExtraProtect is not None: - enum_entry = '#ifdef %s\n' % self.featureExtraProtect - enum_entry_map = {} - for enum in groupElem: - name = enum.get('name') - if name is not None and enum.get('alias') is None and enum.get('supported') != 'disabled': - enum_map_key = set(['core']) - extnumber = enum.get('extnumber') - - # Ignore extensions that are disabled and only used for their enum range for core enums - if extnumber is not None and self.extension_number_map[extnumber].get('supported') != 'disabled': - # Find the actual, "promoted to" extension - ext = self.extension_number_map[extnumber] - enum_map_key = set([ext.get('name')]) - if name in self.extension_enums: - enum_map_key = enum_map_key.union(self.extension_enums[name]) - - for k in sorted(enum_map_key): - if k not in enum_entry_map: - enum_entry_map[k] = f'{name}, ' - else: - enum_entry_map[k] += f'{name}, ' - if alias is None: - enum_entry += f''' -template<> -std::vector<{groupName}> ValidationObject::ValidParamValues() const {{ - // TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. - // Ideally "values" would be something like a static variable that is built once and this function returns - // a span of the container. This does not work for applications which create and destroy many instances and - // devices over the lifespan of the project (e.g., VLT). - constexpr std::array Core{groupName}Enums = {{ {enum_entry_map["core"]} }}; - static const vvl::unordered_map> Extended{groupName}Enums = {{\n''' - for k,v in enum_entry_map.items(): - if k != 'core': - enum_entry += f' {{ &DeviceExtensions::{k.lower()}, {{ {v} }} }},\n' - enum_entry += f''' }}; - std::vector<{groupName}> values(Core{groupName}Enums.cbegin(), Core{groupName}Enums.cend()); - std::set<{groupName}> unique_exts; - for (const auto& [extension, enums]: Extended{groupName}Enums) {{ - if (IsExtEnabled(device_extensions.*extension)) {{ - unique_exts.insert(enums.cbegin(), enums.cend()); - }} - }} - std::copy(unique_exts.cbegin(), unique_exts.cend(), std::back_inserter(values)); - return values; -}} -''' - if self.featureExtraProtect is not None: - enum_entry += '\n#endif // %s' % self.featureExtraProtect - self.enum_values_definitions[groupName] = enum_entry - elif self.header_file: - if groupName != 'VkStructureType' and 'FlagBits' not in groupName: - # Determine if begin/end ranges are needed (we don't do this for VkStructureType, which has a more finely grained check) - expandName = re.sub(r'([0-9a-z_])([A-Z0-9][^A-Z0-9]?)',r'\1_\2',groupName).upper() - isEnum = ('FLAG_BITS' not in expandName) - if isEnum and alias is None: - if self.featureExtraProtect is not None: self.specializations += [ f'#ifdef {self.featureExtraProtect}' ] - self.specializations += [ f'template<> std::vector<{groupName}> ValidationObject::ValidParamValues() const;' ] - if self.featureExtraProtect is not None: self.specializations += [ f'#endif // {self.featureExtraProtect}' ] # # Capture command parameter info to be used for param check code generation. def genCmd(self, cmdinfo, name, alias): @@ -911,20 +770,7 @@ def genCmd(self, cmdinfo, name, alias): decls = self.makeCDecls(cmdinfo.elem) typedef = decls[1] typedef = typedef.split(')',1)[1] - if self.header_file: - if name not in self.blacklist: - if (self.featureExtraProtect is not None): - self.declarations += [ '#ifdef %s' % self.featureExtraProtect ] - # Strip off 'vk' from API name - decl = '%s%s' % ('bool PreCallValidate', decls[0].split("VKAPI_CALL vk")[1]) - decl_terminator = ' const override;' - if 'ValidationCache' in name: - decl_terminator = ' const;' - decl = str(decl).replace(';', decl_terminator) - self.declarations += [ decl ] - if (self.featureExtraProtect is not None): - self.declarations += [ '#endif' ] - if self.source_file or self.enum_file: + if self.source_file: if name not in self.blacklist: params = cmdinfo.elem.findall('param') # Get list of array lengths @@ -1565,6 +1411,9 @@ def genFuncBody(self, funcName, values, valuePrefix, displayNamePrefix, structTy flagsType = 'kOptionalSingleBit' if value.isoptional else 'kRequiredSingleBit' invalidVuid = self.GetVuid(vuid_name_tag, "%s-parameter" % (value.name)) zeroVuid = invalidVuid + # Bad workaround, but this whole file will be refactored soon + if flagBitsName == 'VkBuildAccelerationStructureFlagBitsNV': + flagBitsName = 'VkBuildAccelerationStructureFlagBitsKHR' allFlagsName = 'All' + flagBitsName zeroVuidArg = '' if value.isoptional else ', ' + zeroVuid condition = [item for item in self.structMemberValidationConditions if (item['struct'] == structTypeName and item['field'] == flagBitsName)] diff --git a/scripts/generators/stateless_validation_helper_generator.py b/scripts/generators/stateless_validation_helper_generator.py new file mode 100644 index 00000000000..6709047ef79 --- /dev/null +++ b/scripts/generators/stateless_validation_helper_generator.py @@ -0,0 +1,106 @@ +#!/usr/bin/python3 -i +# +# Copyright (c) 2015-2023 The Khronos Group Inc. +# Copyright (c) 2015-2023 Valve Corporation +# Copyright (c) 2015-2023 LunarG, Inc. +# Copyright (c) 2015-2023 Google 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. + +import os +import sys +from generators.generator_utils import * +from collections import namedtuple +from common_codegen import * +from generators.base_generator import BaseGenerator + +class StatelessValidationHelperOutputGenerator(BaseGenerator): + def __init__(self, + errFile = sys.stderr, + warnFile = sys.stderr, + diagFile = sys.stdout): + BaseGenerator.__init__(self, errFile, warnFile, diagFile) + self.headerFile = False + self.sourceFile = False + self.pNextStructFile = False + + # Commands to ignore + self.blacklist = [ + 'vkGetInstanceProcAddr', + 'vkGetDeviceProcAddr', + 'vkEnumerateInstanceVersion', + 'vkEnumerateInstanceLayerProperties', + 'vkEnumerateInstanceExtensionProperties', + 'vkEnumerateDeviceLayerProperties', + 'vkEnumerateDeviceExtensionProperties', + 'vkGetDeviceGroupSurfacePresentModes2EXT' + ] + + + def generate(self): + self.headerFile = (self.filename == 'stateless_validation_helper.h') + self.sourceFile = (self.filename == 'stateless_validation_helper.cpp') + self.pNextStructFile = (self.filename == 'stateless_validation_pnext_struct.cpp') + + copyright = f'''{fileIsGeneratedWarning(os.path.basename(__file__))} +/*************************************************************************** +* +* Copyright (c) 2015-2023 The Khronos Group Inc. +* Copyright (c) 2015-2023 Valve Corporation +* Copyright (c) 2015-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. +****************************************************************************/\n''' + self.write(copyright) + self.write('// NOLINTBEGIN') # Wrap for clang-tidy to ignore + + if self.headerFile: + self.generateHeader() + if self.pNextStructFile: + self.generatePnextStruct() + else: + self.generateSource() + + self.write('// NOLINTEND') # Wrap for clang-tidy to ignore + + def generateHeader(self): + out = [] + out.append('#pragma once\n') + for command in [x for x in self.vk.commands.values() if x.name not in self.blacklist]: + out.append(getProtectMacro(command, ifdef=True)) + prototype = command.cPrototype.split('VKAPI_CALL ')[1] + prototype = f'bool PreCallValidate{prototype[2:]}' + prototype = prototype.replace(');', ') const override;\n') + if 'ValidationCache' in command.name: + prototype = prototype.replace('const override', 'const') + out.append(prototype) + out.append(getProtectMacro(command, endif=True)) + self.write("".join(out)) + + def generatePnextStruct(self): + return + + def generateSource(self): + out = [] + self.write("".join(out)) \ No newline at end of file diff --git a/scripts/generators/valid_enum_values_generator.py b/scripts/generators/valid_enum_values_generator.py new file mode 100644 index 00000000000..c8ea752c655 --- /dev/null +++ b/scripts/generators/valid_enum_values_generator.py @@ -0,0 +1,116 @@ +#!/usr/bin/python3 -i +# +# Copyright (c) 2015-2023 The Khronos Group Inc. +# Copyright (c) 2015-2023 Valve Corporation +# Copyright (c) 2015-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. + +import sys +import os +from common_codegen import * +from generators.generator_utils import * +from generators.base_generator import BaseGenerator + +class ValidEnumValuesOutputGenerator(BaseGenerator): + def __init__(self, + errFile = sys.stderr, + warnFile = sys.stderr, + diagFile = sys.stdout): + BaseGenerator.__init__(self, errFile, warnFile, diagFile) + self.headerFile = False # Header file generation flag + self.sourceFile = False # Source file generation flag + + def generate(self): + self.headerFile = (self.filename == 'valid_enum_values.h') + self.sourceFile = (self.filename == 'valid_enum_values.cpp') + + copyright = f'''{fileIsGeneratedWarning(os.path.basename(__file__))} +/*************************************************************************** +* +* Copyright (c) 2015-2023 The Khronos Group Inc. +* Copyright (c) 2015-2023 Valve Corporation +* Copyright (c) 2015-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. +****************************************************************************/\n''' + self.write(copyright) + self.write('// NOLINTBEGIN') # Wrap for clang-tidy to ignore + + if self.headerFile: + self.generateHeader() + else: + self.generateSource() + + self.write('// NOLINTEND') # Wrap for clang-tidy to ignore + + def generateHeader(self): + out = [] + + for enum in [x for x in self.vk.enums.values() if x.name != 'VkStructureType' and not x.returnedOnly]: + out.extend([f'#ifdef {enum.protect}\n'] if enum.protect else []) + out.append(f'template<> std::vector<{enum.name}> ValidationObject::ValidParamValues() const;\n') + out.extend([f'#endif //{enum.protect}\n'] if enum.protect else []) + + self.write("".join(out)) + + def generateSource(self): + out = [] + out.append(''' +#include "chassis.h" +#include "utils/hash_vk_types.h" + +// TODO (ncesario) This is not ideal as we compute the enabled extensions every time this function is called. +// Ideally "values" would be something like a static variable that is built once and this function returns +// a span of the container. This does not work for applications which create and destroy many instances and +// devices over the lifespan of the project (e.g., VLT). +''') + + for enum in [x for x in self.vk.enums.values() if x.name != 'VkStructureType' and not x.returnedOnly]: + out.extend([f'#ifdef {enum.protect}\n'] if enum.protect else []) + out.append(f''' +template<> +std::vector<{enum.name}> ValidationObject::ValidParamValues() const {{ + constexpr std::array Core{enum.name}Enums = {{{", ".join([x.name for x in enum.fields if not x.extensions])}}}; + static const vvl::unordered_map> Extended{enum.name}Enums = {{ +''') + # TODO - For handle enum fields like VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR where multiple extensions + extensions = set([x.extensions[0] for x in enum.fields if x.extensions and len(x.extensions) == 1]) + for extension in sorted(extensions): + out.append(f' {{ &DeviceExtensions::{extension.lower()}, {{ {", ".join([x.name for x in enum.fields if x.extensions and extension in x.extensions])} }} }},\n') + out.append(' };') + out.append(f''' + std::vector<{enum.name}> values(Core{enum.name}Enums.cbegin(), Core{enum.name}Enums.cend()); + std::set<{enum.name}> unique_exts; + for (const auto& [extension, enums]: Extended{enum.name}Enums) {{ + if (IsExtEnabled(device_extensions.*extension)) {{ + unique_exts.insert(enums.cbegin(), enums.cend()); + }} + }} + std::copy(unique_exts.cbegin(), unique_exts.cend(), std::back_inserter(values)); + return values; +}}\n''') + out.extend([f'#endif //{enum.protect}\n'] if enum.protect else []) + out.append('\n') + + self.write(''.join(out)) diff --git a/scripts/generators/vulkan_object.py b/scripts/generators/vulkan_object.py index 9a10bd63f29..9f4516b293e 100644 --- a/scripts/generators/vulkan_object.py +++ b/scripts/generators/vulkan_object.py @@ -21,7 +21,7 @@ # not supported until Python 3.9+ from typing import List, Dict -@dataclass(frozen=True) +@dataclass class Extension: """""" name: str @@ -41,13 +41,17 @@ class Extension: obsoletedBy: str specialUse: List[str] -@dataclass(frozen=True) +@dataclass class Version: - """ which represents a version""" - name: str # VK_VERSION_1_0 - number: str # 1.0 + """ + which represents a version + This will NEVER be Version 1.0, since having 'no version' is same as being 1.0 + """ + name: str # VK_VERSION_1_1 + apiName: str # VK_API_VERSION_1_1 + number: str # 1.1 -@dataclass(frozen=True) +@dataclass class Handle: """ which represents a dispatch handle""" name: str @@ -58,7 +62,7 @@ class Handle: device: bool dispatchable: bool -@dataclass(frozen=True) +@dataclass class CommandParam: """""" name: str @@ -66,8 +70,9 @@ class CommandParam: alias: str externSync: bool optional: bool + optionalPointer: bool # if type contains a pointer, is the pointer value optional noAutoValidity: bool - length: str + length: str # 'len' from XML showing what is used to set the length of an pointer class Queues(IntFlag): TRANSFER = auto() # VK_QUEUE_TRANSFER_BIT @@ -85,7 +90,7 @@ class CommandScope(Enum): OUTSIDE = auto() BOTH = auto() -@dataclass(frozen=True) +@dataclass class Command: """""" # Attributes of @@ -124,7 +129,7 @@ class Command: # (const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);' cFunctionPointer: str -@dataclass(frozen=True) +@dataclass class EnumField: """ of type enum""" name: str @@ -133,15 +138,16 @@ class EnumField: extensions: List[str] # None if part of 1.0 core protect: str # ex. 'VK_ENABLE_BETA_EXTENSIONS' -@dataclass(frozen=True) +@dataclass class Enum: """ of type enum""" name: str bitWidth: int # 32 or 64 protect: str # ex. 'VK_ENABLE_BETA_EXTENSIONS' + returnedOnly: bool fields: List[EnumField] -@dataclass(frozen=True) +@dataclass class Flag: """ of type bitmask""" name: str @@ -152,7 +158,7 @@ class Flag: extensions: List[str] # None if part of 1.0 core protect: str # ex. 'VK_ENABLE_BETA_EXTENSIONS' -@dataclass(frozen=True) +@dataclass class Bitmask: """ of type bitmask""" name: str # ex. 'VkAccessFlagBits2' @@ -161,13 +167,14 @@ class Bitmask: protect: str # ex. 'VK_ENABLE_BETA_EXTENSIONS' flags: List[Flag] -@dataclass(frozen=True) +@dataclass class Member: """""" name: str type: str externSync: bool optional: bool + optionalPointer: bool # if type contains a pointer, is the pointer value optional noAutoValidity: bool length: str limitType: str @@ -179,10 +186,13 @@ class Member: # - VkStructureType sType cDeclaration: str -@dataclass(frozen=True) +@dataclass class Struct: """ or """ name: str + extensions: List[Extension] # All extensions that enable the struct + version: Version # None if Version 1.0 + union: bool # Unions are just a subset of a Structs structExtends: List[str] protect: str # ex. 'VK_ENABLE_BETA_EXTENSIONS' @@ -191,7 +201,7 @@ class Struct: allowDuplicate: bool members: List[Member] -@dataclass(frozen=True) +@dataclass class FormatComponent: """""" type: str # 'R', 'G', 'B', 'A', 'D', 'S', etc @@ -199,7 +209,7 @@ class FormatComponent: numericFormat: str # 'UNORM', 'SINT', etc planeIndex: int # None if no planeIndex in format -@dataclass(frozen=True) +@dataclass class FormatPlane: """""" index: int @@ -207,7 +217,7 @@ class FormatPlane: heightDivisor: int compatible: str -@dataclass(frozen=True) +@dataclass class Format: """""" name: str @@ -222,33 +232,33 @@ class Format: planes: List[FormatPlane] # spirvImageFormat: str -@dataclass(frozen=True) +@dataclass class SyncSupport: """""" queues: List[str] stage: List[str] -@dataclass(frozen=True) +@dataclass class SyncEquivalent: """""" stage: List[str] access: List[str] -@dataclass(frozen=True) +@dataclass class SyncStage: """""" name: str support: SyncSupport equivalent: SyncEquivalent -@dataclass(frozen=True) +@dataclass class SyncAccess: """""" name: str support: SyncSupport equivalent: SyncEquivalent -@dataclass(frozen=True) +@dataclass class SyncPipelineStage: """""" order: str @@ -256,14 +266,14 @@ class SyncPipelineStage: after: str value: str -@dataclass(frozen=True) +@dataclass class SyncPipeline: """""" name: str depends: List[str] stages: List[SyncPipelineStage] -@dataclass(frozen=True) +@dataclass class SpirvEnables: """What is needed to enable the SPIR-V element""" version: str @@ -275,7 +285,7 @@ class SpirvEnables: member: str value: str -@dataclass(frozen=True) +@dataclass class Spirv: """ and """ name: str @@ -288,6 +298,8 @@ class Spirv: # 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 + extensions: Dict[str, Extension] = field(default_factory=dict, init=False) versions: Dict[str, Version] = field(default_factory=dict, init=False) diff --git a/scripts/lvl_genvk.py b/scripts/lvl_genvk.py index a3d1d4c5a46..128721b12c9 100644 --- a/scripts/lvl_genvk.py +++ b/scripts/lvl_genvk.py @@ -100,29 +100,39 @@ def makeGenOpts(args): mergeApiNames = mergeApiNames) ] - # Options for stateless validation source file - genOpts['parameter_validation.cpp'] = [ + genOpts['stateless_validation_helper.cpp'] = [ ParameterValidationOutputGenerator, BaseGeneratorOptions( - filename = 'parameter_validation.cpp', + filename = 'stateless_validation_helper.cpp', valid_usage_path = args.scripts) ] - # Options for stateless validation header file - genOpts['parameter_validation.h'] = [ - ParameterValidationOutputGenerator, + genOpts['stateless_validation_helper.h'] = [ + StatelessValidationHelperOutputGenerator, BaseGeneratorOptions( - filename = 'parameter_validation.h', + filename = 'stateless_validation_helper.h', valid_usage_path = args.scripts) ] - # Options for stateless validation enum helper file genOpts['enum_flag_bits.h'] = [ - ParameterValidationOutputGenerator, + EnumFlagBitsOutputGenerator, BaseGeneratorOptions( filename = 'enum_flag_bits.h', - mergeApiNames = mergeApiNames, - valid_usage_path = args.scripts) + mergeApiNames = mergeApiNames) + ] + + genOpts['valid_enum_values.h'] = [ + ValidEnumValuesOutputGenerator, + BaseGeneratorOptions( + filename = 'valid_enum_values.h', + mergeApiNames = mergeApiNames) + ] + + genOpts['valid_enum_values.cpp'] = [ + ValidEnumValuesOutputGenerator, + BaseGeneratorOptions( + filename = 'valid_enum_values.cpp', + mergeApiNames = mergeApiNames) ] # Options for object_tracker code-generated validation routines @@ -430,7 +440,7 @@ def genTarget(args): else: write('No generator options for unknown target:', args.target, file=sys.stderr) - return none + return None # -extension name # For both, "name" may be a single name, or a space-separated list @@ -498,6 +508,7 @@ def genTarget(args): from generators.thread_safety_generator import ThreadOutputGenerator from generators.parameter_validation_generator import ParameterValidationOutputGenerator + from generators.stateless_validation_helper_generator import StatelessValidationHelperOutputGenerator from generators.object_tracker_generator import ObjectTrackerOutputGenerator from generators.dispatch_table_helper_generator import DispatchTableHelperOutputGenerator from generators.helper_file_generator import HelperFileOutputGenerator @@ -516,6 +527,8 @@ def genTarget(args): from generators.typemap_helper_generator import TypemapHelperOutputGenerator from generators.object_types_generator import ObjectTypesOutputGenerator from generators.safe_struct_generator import SafeStructOutputGenerator + from generators.enum_flag_bits_generator import EnumFlagBitsOutputGenerator + from generators.valid_enum_values_generator import ValidEnumValuesOutputGenerator # create error/warning & diagnostic files if (args.errfile): diff --git a/scripts/vk_validation_stats.py b/scripts/vk_validation_stats.py index dc38d0b3889..535bf4ba90a 100755 --- a/scripts/vk_validation_stats.py +++ b/scripts/vk_validation_stats.py @@ -737,7 +737,7 @@ def main(argv): 'layers/state_tracker/shader_module.cpp', 'layers/gpu_validation/gpu_vuids.h', 'layers/stateless/stateless_validation.h', - f'layers/{args.api}/generated/parameter_validation.cpp', + f'layers/{args.api}/generated/stateless_validation_helper.cpp', f'layers/{args.api}/generated/object_tracker.cpp', f'layers/{args.api}/generated/spirv_validation_helper.cpp', f'layers/{args.api}/generated/command_validation.cpp',