blob: b47a4acae7aba6580b5f1cc6a5f60e24da828ca0 [file] [log] [blame]
// *** THIS FILE IS GENERATED - DO NOT EDIT ***
// See valid_flag_values_generator.py for modifications
/***************************************************************************
*
* Copyright (c) 2024 The Khronos Group Inc.
* Copyright (c) 2024 Valve Corporation
* Copyright (c) 2024 LunarG, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
****************************************************************************/
// NOLINTBEGIN
#include "chassis.h"
// For flags, we can't use the VkFlag as it can't be templated (since it all resolves to a int).
// It is simpler for the caller to already check for both
// - if zero is valid value or not
// - if the value is even found in the API
// so the this file is only focused on checking for extensions being supported
vvl::Extensions IsValidFlagValue(vvl::FlagBitmask flag_bitmask, VkFlags value, const DeviceExtensions& device_extensions) {
switch (flag_bitmask) {
case vvl::FlagBitmask::VkAccessFlagBits:
if (value & (VK_ACCESS_NONE)) {
if (!IsExtEnabled(device_extensions.vk_khr_synchronization2)) {
return {vvl::Extension::_VK_KHR_synchronization2};
}
}
if (value & (VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT | VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT |
VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_transform_feedback)) {
return {vvl::Extension::_VK_EXT_transform_feedback};
}
}
if (value & (VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_conditional_rendering)) {
return {vvl::Extension::_VK_EXT_conditional_rendering};
}
}
if (value & (VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_blend_operation_advanced)) {
return {vvl::Extension::_VK_EXT_blend_operation_advanced};
}
}
if (value & (VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_nv_ray_tracing) &&
!IsExtEnabled(device_extensions.vk_khr_acceleration_structure)) {
return {vvl::Extension::_VK_NV_ray_tracing, vvl::Extension::_VK_KHR_acceleration_structure};
}
}
if (value & (VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_fragment_density_map)) {
return {vvl::Extension::_VK_EXT_fragment_density_map};
}
}
if (value & (VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_fragment_shading_rate) &&
!IsExtEnabled(device_extensions.vk_nv_shading_rate_image)) {
return {vvl::Extension::_VK_KHR_fragment_shading_rate, vvl::Extension::_VK_NV_shading_rate_image};
}
}
if (value & (VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV | VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_device_generated_commands)) {
return {vvl::Extension::_VK_NV_device_generated_commands};
}
}
return {};
case vvl::FlagBitmask::VkImageAspectFlagBits:
if (value & (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_sampler_ycbcr_conversion)) {
return {vvl::Extension::_VK_KHR_sampler_ycbcr_conversion};
}
}
if (value & (VK_IMAGE_ASPECT_NONE)) {
if (!IsExtEnabled(device_extensions.vk_khr_maintenance4)) {
return {vvl::Extension::_VK_KHR_maintenance4};
}
}
if (value & (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)) {
if (!IsExtEnabled(device_extensions.vk_ext_image_drm_format_modifier)) {
return {vvl::Extension::_VK_EXT_image_drm_format_modifier};
}
}
return {};
case vvl::FlagBitmask::VkFormatFeatureFlagBits:
if (value & (VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_maintenance1)) {
return {vvl::Extension::_VK_KHR_maintenance1};
}
}
if (value & (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)) {
if (!IsExtEnabled(device_extensions.vk_khr_sampler_ycbcr_conversion)) {
return {vvl::Extension::_VK_KHR_sampler_ycbcr_conversion};
}
}
if (value & (VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT)) {
if (!IsExtEnabled(device_extensions.vk_ext_sampler_filter_minmax)) {
return {vvl::Extension::_VK_EXT_sampler_filter_minmax};
}
}
if (value & (VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR | VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_decode_queue)) {
return {vvl::Extension::_VK_KHR_video_decode_queue};
}
}
if (value & (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_acceleration_structure)) {
return {vvl::Extension::_VK_KHR_acceleration_structure};
}
}
if (value & (VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_img_filter_cubic) && !IsExtEnabled(device_extensions.vk_ext_filter_cubic)) {
return {vvl::Extension::_VK_IMG_filter_cubic, vvl::Extension::_VK_EXT_filter_cubic};
}
}
if (value & (VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_fragment_density_map)) {
return {vvl::Extension::_VK_EXT_fragment_density_map};
}
}
if (value & (VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_fragment_shading_rate)) {
return {vvl::Extension::_VK_KHR_fragment_shading_rate};
}
}
if (value & (VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR | VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_encode_queue)) {
return {vvl::Extension::_VK_KHR_video_encode_queue};
}
}
return {};
case vvl::FlagBitmask::VkImageCreateFlagBits:
if (value & (VK_IMAGE_CREATE_ALIAS_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_bind_memory2)) {
return {vvl::Extension::_VK_KHR_bind_memory2};
}
}
if (value & (VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_device_group)) {
return {vvl::Extension::_VK_KHR_device_group};
}
}
if (value & (VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_maintenance1)) {
return {vvl::Extension::_VK_KHR_maintenance1};
}
}
if (value & (VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_maintenance2)) {
return {vvl::Extension::_VK_KHR_maintenance2};
}
}
if (value & (VK_IMAGE_CREATE_DISJOINT_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_sampler_ycbcr_conversion)) {
return {vvl::Extension::_VK_KHR_sampler_ycbcr_conversion};
}
}
if (value & (VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_corner_sampled_image)) {
return {vvl::Extension::_VK_NV_corner_sampled_image};
}
}
if (value & (VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_sample_locations)) {
return {vvl::Extension::_VK_EXT_sample_locations};
}
}
if (value & (VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_fragment_density_map)) {
return {vvl::Extension::_VK_EXT_fragment_density_map};
}
}
if (value & (VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_buffer)) {
return {vvl::Extension::_VK_EXT_descriptor_buffer};
}
}
if (value & (VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_multisampled_render_to_single_sampled)) {
return {vvl::Extension::_VK_EXT_multisampled_render_to_single_sampled};
}
}
if (value & (VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_image_2d_view_of_3d)) {
return {vvl::Extension::_VK_EXT_image_2d_view_of_3d};
}
}
if (value & (VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM)) {
if (!IsExtEnabled(device_extensions.vk_qcom_fragment_density_map_offset)) {
return {vvl::Extension::_VK_QCOM_fragment_density_map_offset};
}
}
if (value & (VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_maintenance1)) {
return {vvl::Extension::_VK_KHR_video_maintenance1};
}
}
return {};
case vvl::FlagBitmask::VkImageUsageFlagBits:
if (value & (VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR | VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR |
VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_decode_queue)) {
return {vvl::Extension::_VK_KHR_video_decode_queue};
}
}
if (value & (VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_fragment_density_map)) {
return {vvl::Extension::_VK_EXT_fragment_density_map};
}
}
if (value & (VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_fragment_shading_rate) &&
!IsExtEnabled(device_extensions.vk_nv_shading_rate_image)) {
return {vvl::Extension::_VK_KHR_fragment_shading_rate, vvl::Extension::_VK_NV_shading_rate_image};
}
}
if (value & (VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_host_image_copy)) {
return {vvl::Extension::_VK_EXT_host_image_copy};
}
}
if (value & (VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR |
VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_encode_queue)) {
return {vvl::Extension::_VK_KHR_video_encode_queue};
}
}
if (value & (VK_IMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_attachment_feedback_loop_layout)) {
return {vvl::Extension::_VK_EXT_attachment_feedback_loop_layout};
}
}
if (value & (VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI)) {
if (!IsExtEnabled(device_extensions.vk_huawei_invocation_mask)) {
return {vvl::Extension::_VK_HUAWEI_invocation_mask};
}
}
if (value & (VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM | VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM)) {
if (!IsExtEnabled(device_extensions.vk_qcom_image_processing)) {
return {vvl::Extension::_VK_QCOM_image_processing};
}
}
return {};
case vvl::FlagBitmask::VkPipelineStageFlagBits:
if (value & (VK_PIPELINE_STAGE_NONE)) {
if (!IsExtEnabled(device_extensions.vk_khr_synchronization2)) {
return {vvl::Extension::_VK_KHR_synchronization2};
}
}
if (value & (VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_transform_feedback)) {
return {vvl::Extension::_VK_EXT_transform_feedback};
}
}
if (value & (VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_conditional_rendering)) {
return {vvl::Extension::_VK_EXT_conditional_rendering};
}
}
if (value & (VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_nv_ray_tracing) &&
!IsExtEnabled(device_extensions.vk_khr_acceleration_structure)) {
return {vvl::Extension::_VK_NV_ray_tracing, vvl::Extension::_VK_KHR_acceleration_structure};
}
}
if (value & (VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_nv_ray_tracing) &&
!IsExtEnabled(device_extensions.vk_khr_ray_tracing_pipeline)) {
return {vvl::Extension::_VK_NV_ray_tracing, vvl::Extension::_VK_KHR_ray_tracing_pipeline};
}
}
if (value & (VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_fragment_density_map)) {
return {vvl::Extension::_VK_EXT_fragment_density_map};
}
}
if (value & (VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_fragment_shading_rate) &&
!IsExtEnabled(device_extensions.vk_nv_shading_rate_image)) {
return {vvl::Extension::_VK_KHR_fragment_shading_rate, vvl::Extension::_VK_NV_shading_rate_image};
}
}
if (value & (VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_device_generated_commands)) {
return {vvl::Extension::_VK_NV_device_generated_commands};
}
}
if (value & (VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT | VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_nv_mesh_shader) && !IsExtEnabled(device_extensions.vk_ext_mesh_shader)) {
return {vvl::Extension::_VK_NV_mesh_shader, vvl::Extension::_VK_EXT_mesh_shader};
}
}
return {};
case vvl::FlagBitmask::VkMemoryMapFlagBits:
if (value & (VK_MEMORY_MAP_PLACED_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_map_memory_placed)) {
return {vvl::Extension::_VK_EXT_map_memory_placed};
}
}
return {};
case vvl::FlagBitmask::VkEventCreateFlagBits:
if (value & (VK_EVENT_CREATE_DEVICE_ONLY_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_synchronization2)) {
return {vvl::Extension::_VK_KHR_synchronization2};
}
}
return {};
case vvl::FlagBitmask::VkQueryPipelineStatisticFlagBits:
if (value & (VK_QUERY_PIPELINE_STATISTIC_TASK_SHADER_INVOCATIONS_BIT_EXT |
VK_QUERY_PIPELINE_STATISTIC_MESH_SHADER_INVOCATIONS_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_mesh_shader)) {
return {vvl::Extension::_VK_EXT_mesh_shader};
}
}
if (value & (VK_QUERY_PIPELINE_STATISTIC_CLUSTER_CULLING_SHADER_INVOCATIONS_BIT_HUAWEI)) {
if (!IsExtEnabled(device_extensions.vk_huawei_cluster_culling_shader)) {
return {vvl::Extension::_VK_HUAWEI_cluster_culling_shader};
}
}
return {};
case vvl::FlagBitmask::VkQueryResultFlagBits:
if (value & (VK_QUERY_RESULT_WITH_STATUS_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_queue)) {
return {vvl::Extension::_VK_KHR_video_queue};
}
}
return {};
case vvl::FlagBitmask::VkBufferCreateFlagBits:
if (value & (VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_buffer_device_address) &&
!IsExtEnabled(device_extensions.vk_ext_buffer_device_address)) {
return {vvl::Extension::_VK_KHR_buffer_device_address, vvl::Extension::_VK_EXT_buffer_device_address};
}
}
if (value & (VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_buffer)) {
return {vvl::Extension::_VK_EXT_descriptor_buffer};
}
}
if (value & (VK_BUFFER_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_maintenance1)) {
return {vvl::Extension::_VK_KHR_video_maintenance1};
}
}
return {};
case vvl::FlagBitmask::VkBufferUsageFlagBits:
if (value & (VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_buffer_device_address) &&
!IsExtEnabled(device_extensions.vk_ext_buffer_device_address)) {
return {vvl::Extension::_VK_KHR_buffer_device_address, vvl::Extension::_VK_EXT_buffer_device_address};
}
}
if (value & (VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR | VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_decode_queue)) {
return {vvl::Extension::_VK_KHR_video_decode_queue};
}
}
if (value &
(VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT | VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_transform_feedback)) {
return {vvl::Extension::_VK_EXT_transform_feedback};
}
}
if (value & (VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_conditional_rendering)) {
return {vvl::Extension::_VK_EXT_conditional_rendering};
}
}
if (value & (VK_BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX)) {
if (!IsExtEnabled(device_extensions.vk_amdx_shader_enqueue)) {
return {vvl::Extension::_VK_AMDX_shader_enqueue};
}
}
if (value & (VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR |
VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_acceleration_structure)) {
return {vvl::Extension::_VK_KHR_acceleration_structure};
}
}
if (value & (VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_nv_ray_tracing) &&
!IsExtEnabled(device_extensions.vk_khr_ray_tracing_pipeline)) {
return {vvl::Extension::_VK_NV_ray_tracing, vvl::Extension::_VK_KHR_ray_tracing_pipeline};
}
}
if (value & (VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR | VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_encode_queue)) {
return {vvl::Extension::_VK_KHR_video_encode_queue};
}
}
if (value & (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)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_buffer)) {
return {vvl::Extension::_VK_EXT_descriptor_buffer};
}
}
if (value & (VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT | VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_opacity_micromap)) {
return {vvl::Extension::_VK_EXT_opacity_micromap};
}
}
return {};
case vvl::FlagBitmask::VkImageViewCreateFlagBits:
if (value & (VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_fragment_density_map)) {
return {vvl::Extension::_VK_EXT_fragment_density_map};
}
}
if (value & (VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_buffer)) {
return {vvl::Extension::_VK_EXT_descriptor_buffer};
}
}
if (value & (VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_fragment_density_map2)) {
return {vvl::Extension::_VK_EXT_fragment_density_map2};
}
}
return {};
case vvl::FlagBitmask::VkPipelineCacheCreateFlagBits:
if (value & (VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT)) {
if (!IsExtEnabled(device_extensions.vk_ext_pipeline_creation_cache_control)) {
return {vvl::Extension::_VK_EXT_pipeline_creation_cache_control};
}
}
return {};
case vvl::FlagBitmask::VkPipelineCreateFlagBits:
if (value & (VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_device_group)) {
return {vvl::Extension::_VK_KHR_device_group};
}
}
if (value &
(VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT | VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT)) {
if (!IsExtEnabled(device_extensions.vk_ext_pipeline_creation_cache_control)) {
return {vvl::Extension::_VK_EXT_pipeline_creation_cache_control};
}
}
if (value & (VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR |
VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_khr_dynamic_rendering)) {
return {vvl::Extension::_VK_KHR_dynamic_rendering};
}
}
if (value & (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)) {
if (!IsExtEnabled(device_extensions.vk_khr_ray_tracing_pipeline)) {
return {vvl::Extension::_VK_KHR_ray_tracing_pipeline};
}
}
if (value & (VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_ray_tracing)) {
return {vvl::Extension::_VK_NV_ray_tracing};
}
}
if (value &
(VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR | VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_pipeline_executable_properties)) {
return {vvl::Extension::_VK_KHR_pipeline_executable_properties};
}
}
if (value & (VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_device_generated_commands)) {
return {vvl::Extension::_VK_NV_device_generated_commands};
}
}
if (value & (VK_PIPELINE_CREATE_LIBRARY_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_pipeline_library)) {
return {vvl::Extension::_VK_KHR_pipeline_library};
}
}
if (value & (VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_buffer)) {
return {vvl::Extension::_VK_EXT_descriptor_buffer};
}
}
if (value & (VK_PIPELINE_CREATE_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT |
VK_PIPELINE_CREATE_LINK_TIME_OPTIMIZATION_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_graphics_pipeline_library)) {
return {vvl::Extension::_VK_EXT_graphics_pipeline_library};
}
}
if (value & (VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_ray_tracing_motion_blur)) {
return {vvl::Extension::_VK_NV_ray_tracing_motion_blur};
}
}
if (value & (VK_PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT |
VK_PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_attachment_feedback_loop_layout)) {
return {vvl::Extension::_VK_EXT_attachment_feedback_loop_layout};
}
}
if (value & (VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_opacity_micromap)) {
return {vvl::Extension::_VK_EXT_opacity_micromap};
}
}
if (value & (VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_displacement_micromap)) {
return {vvl::Extension::_VK_NV_displacement_micromap};
}
}
if (value & (VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT | VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_pipeline_protected_access)) {
return {vvl::Extension::_VK_EXT_pipeline_protected_access};
}
}
return {};
case vvl::FlagBitmask::VkPipelineShaderStageCreateFlagBits:
if (value & (VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT |
VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT)) {
if (!IsExtEnabled(device_extensions.vk_ext_subgroup_size_control)) {
return {vvl::Extension::_VK_EXT_subgroup_size_control};
}
}
return {};
case vvl::FlagBitmask::VkShaderStageFlagBits:
if (value == VK_SHADER_STAGE_ALL_GRAPHICS) {
return {};
}
if (value == VK_SHADER_STAGE_ALL) {
return {};
}
if (value & (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)) {
if (!IsExtEnabled(device_extensions.vk_nv_ray_tracing) &&
!IsExtEnabled(device_extensions.vk_khr_ray_tracing_pipeline)) {
return {vvl::Extension::_VK_NV_ray_tracing, vvl::Extension::_VK_KHR_ray_tracing_pipeline};
}
}
if (value & (VK_SHADER_STAGE_TASK_BIT_EXT | VK_SHADER_STAGE_MESH_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_nv_mesh_shader) && !IsExtEnabled(device_extensions.vk_ext_mesh_shader)) {
return {vvl::Extension::_VK_NV_mesh_shader, vvl::Extension::_VK_EXT_mesh_shader};
}
}
if (value & (VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI)) {
if (!IsExtEnabled(device_extensions.vk_huawei_subpass_shading)) {
return {vvl::Extension::_VK_HUAWEI_subpass_shading};
}
}
if (value & (VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI)) {
if (!IsExtEnabled(device_extensions.vk_huawei_cluster_culling_shader)) {
return {vvl::Extension::_VK_HUAWEI_cluster_culling_shader};
}
}
return {};
case vvl::FlagBitmask::VkPipelineDepthStencilStateCreateFlagBits:
if (value & (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)) {
if (!IsExtEnabled(device_extensions.vk_arm_rasterization_order_attachment_access) &&
!IsExtEnabled(device_extensions.vk_ext_rasterization_order_attachment_access)) {
return {vvl::Extension::_VK_ARM_rasterization_order_attachment_access,
vvl::Extension::_VK_EXT_rasterization_order_attachment_access};
}
}
return {};
case vvl::FlagBitmask::VkPipelineColorBlendStateCreateFlagBits:
if (value & (VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_arm_rasterization_order_attachment_access) &&
!IsExtEnabled(device_extensions.vk_ext_rasterization_order_attachment_access)) {
return {vvl::Extension::_VK_ARM_rasterization_order_attachment_access,
vvl::Extension::_VK_EXT_rasterization_order_attachment_access};
}
}
return {};
case vvl::FlagBitmask::VkPipelineLayoutCreateFlagBits:
if (value & (VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_graphics_pipeline_library)) {
return {vvl::Extension::_VK_EXT_graphics_pipeline_library};
}
}
return {};
case vvl::FlagBitmask::VkSamplerCreateFlagBits:
if (value & (VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT | VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_fragment_density_map)) {
return {vvl::Extension::_VK_EXT_fragment_density_map};
}
}
if (value & (VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_buffer)) {
return {vvl::Extension::_VK_EXT_descriptor_buffer};
}
}
if (value & (VK_SAMPLER_CREATE_NON_SEAMLESS_CUBE_MAP_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_non_seamless_cube_map)) {
return {vvl::Extension::_VK_EXT_non_seamless_cube_map};
}
}
if (value & (VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM)) {
if (!IsExtEnabled(device_extensions.vk_qcom_image_processing)) {
return {vvl::Extension::_VK_QCOM_image_processing};
}
}
return {};
case vvl::FlagBitmask::VkDescriptorPoolCreateFlagBits:
if (value & (VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_indexing)) {
return {vvl::Extension::_VK_EXT_descriptor_indexing};
}
}
if (value & (VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_valve_mutable_descriptor_type) &&
!IsExtEnabled(device_extensions.vk_ext_mutable_descriptor_type)) {
return {vvl::Extension::_VK_VALVE_mutable_descriptor_type, vvl::Extension::_VK_EXT_mutable_descriptor_type};
}
}
if (value & (VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV |
VK_DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_descriptor_pool_overallocation)) {
return {vvl::Extension::_VK_NV_descriptor_pool_overallocation};
}
}
return {};
case vvl::FlagBitmask::VkDescriptorSetLayoutCreateFlagBits:
if (value & (VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_indexing)) {
return {vvl::Extension::_VK_EXT_descriptor_indexing};
}
}
if (value & (VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_push_descriptor)) {
return {vvl::Extension::_VK_KHR_push_descriptor};
}
}
if (value & (VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT |
VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_buffer)) {
return {vvl::Extension::_VK_EXT_descriptor_buffer};
}
}
if (value & (VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_device_generated_commands_compute)) {
return {vvl::Extension::_VK_NV_device_generated_commands_compute};
}
}
if (value & (VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_valve_mutable_descriptor_type) &&
!IsExtEnabled(device_extensions.vk_ext_mutable_descriptor_type)) {
return {vvl::Extension::_VK_VALVE_mutable_descriptor_type, vvl::Extension::_VK_EXT_mutable_descriptor_type};
}
}
if (value & (VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_per_stage_descriptor_set)) {
return {vvl::Extension::_VK_NV_per_stage_descriptor_set};
}
}
return {};
case vvl::FlagBitmask::VkDependencyFlagBits:
if (value & (VK_DEPENDENCY_DEVICE_GROUP_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_device_group)) {
return {vvl::Extension::_VK_KHR_device_group};
}
}
if (value & (VK_DEPENDENCY_VIEW_LOCAL_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_multiview)) {
return {vvl::Extension::_VK_KHR_multiview};
}
}
if (value & (VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_attachment_feedback_loop_layout)) {
return {vvl::Extension::_VK_EXT_attachment_feedback_loop_layout};
}
}
return {};
case vvl::FlagBitmask::VkFramebufferCreateFlagBits:
if (value & (VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_imageless_framebuffer)) {
return {vvl::Extension::_VK_KHR_imageless_framebuffer};
}
}
return {};
case vvl::FlagBitmask::VkRenderPassCreateFlagBits:
if (value & (VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM)) {
if (!IsExtEnabled(device_extensions.vk_qcom_render_pass_transform)) {
return {vvl::Extension::_VK_QCOM_render_pass_transform};
}
}
return {};
case vvl::FlagBitmask::VkSubpassDescriptionFlagBits:
if (value &
(VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX | VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX)) {
if (!IsExtEnabled(device_extensions.vk_nvx_multiview_per_view_attributes)) {
return {vvl::Extension::_VK_NVX_multiview_per_view_attributes};
}
}
if (value & (VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM | VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM)) {
if (!IsExtEnabled(device_extensions.vk_qcom_render_pass_shader_resolve)) {
return {vvl::Extension::_VK_QCOM_render_pass_shader_resolve};
}
}
if (value & (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)) {
if (!IsExtEnabled(device_extensions.vk_arm_rasterization_order_attachment_access) &&
!IsExtEnabled(device_extensions.vk_ext_rasterization_order_attachment_access)) {
return {vvl::Extension::_VK_ARM_rasterization_order_attachment_access,
vvl::Extension::_VK_EXT_rasterization_order_attachment_access};
}
}
if (value & (VK_SUBPASS_DESCRIPTION_ENABLE_LEGACY_DITHERING_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_legacy_dithering)) {
return {vvl::Extension::_VK_EXT_legacy_dithering};
}
}
return {};
case vvl::FlagBitmask::VkMemoryAllocateFlagBits:
if (value & (VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT | VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT)) {
if (!IsExtEnabled(device_extensions.vk_khr_buffer_device_address)) {
return {vvl::Extension::_VK_KHR_buffer_device_address};
}
}
return {};
case vvl::FlagBitmask::VkExternalMemoryHandleTypeFlagBits:
if (value & (VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_external_memory_dma_buf)) {
return {vvl::Extension::_VK_EXT_external_memory_dma_buf};
}
}
if (value & (VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)) {
if (!IsExtEnabled(device_extensions.vk_android_external_memory_android_hardware_buffer)) {
return {vvl::Extension::_VK_ANDROID_external_memory_android_hardware_buffer};
}
}
if (value & (VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT |
VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_external_memory_host)) {
return {vvl::Extension::_VK_EXT_external_memory_host};
}
}
if (value & (VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA)) {
if (!IsExtEnabled(device_extensions.vk_fuchsia_external_memory)) {
return {vvl::Extension::_VK_FUCHSIA_external_memory};
}
}
if (value & (VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_external_memory_rdma)) {
return {vvl::Extension::_VK_NV_external_memory_rdma};
}
}
if (value & (VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX)) {
if (!IsExtEnabled(device_extensions.vk_qnx_external_memory_screen_buffer)) {
return {vvl::Extension::_VK_QNX_external_memory_screen_buffer};
}
}
return {};
case vvl::FlagBitmask::VkExternalSemaphoreHandleTypeFlagBits:
if (value & (VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA)) {
if (!IsExtEnabled(device_extensions.vk_fuchsia_external_semaphore)) {
return {vvl::Extension::_VK_FUCHSIA_external_semaphore};
}
}
return {};
case vvl::FlagBitmask::VkResolveModeFlagBits:
if (value & (VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID)) {
if (!IsExtEnabled(device_extensions.vk_android_external_format_resolve)) {
return {vvl::Extension::_VK_ANDROID_external_format_resolve};
}
}
return {};
case vvl::FlagBitmask::VkRenderingFlagBits:
if (value & (VK_RENDERING_CONTENTS_INLINE_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_nested_command_buffer)) {
return {vvl::Extension::_VK_EXT_nested_command_buffer};
}
}
if (value & (VK_RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_legacy_dithering)) {
return {vvl::Extension::_VK_EXT_legacy_dithering};
}
}
return {};
case vvl::FlagBitmask::VkSwapchainCreateFlagBitsKHR:
if (value & (VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_device_group)) {
return {vvl::Extension::_VK_KHR_device_group};
}
}
if (value & (VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_swapchain_mutable_format)) {
return {vvl::Extension::_VK_KHR_swapchain_mutable_format};
}
}
if (value & (VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_swapchain_maintenance1)) {
return {vvl::Extension::_VK_EXT_swapchain_maintenance1};
}
}
return {};
case vvl::FlagBitmask::VkVideoSessionCreateFlagBitsKHR:
if (value & (VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_encode_queue)) {
return {vvl::Extension::_VK_KHR_video_encode_queue};
}
}
if (value & (VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_maintenance1)) {
return {vvl::Extension::_VK_KHR_video_maintenance1};
}
}
return {};
case vvl::FlagBitmask::VkVideoCodingControlFlagBitsKHR:
if (value &
(VK_VIDEO_CODING_CONTROL_ENCODE_RATE_CONTROL_BIT_KHR | VK_VIDEO_CODING_CONTROL_ENCODE_QUALITY_LEVEL_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_encode_queue)) {
return {vvl::Extension::_VK_KHR_video_encode_queue};
}
}
return {};
case vvl::FlagBitmask::VkMemoryUnmapFlagBitsKHR:
if (value & (VK_MEMORY_UNMAP_RESERVE_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_map_memory_placed)) {
return {vvl::Extension::_VK_EXT_map_memory_placed};
}
}
return {};
case vvl::FlagBitmask::VkDebugUtilsMessageTypeFlagBitsEXT:
if (value & (VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_device_address_binding_report)) {
return {vvl::Extension::_VK_EXT_device_address_binding_report};
}
}
return {};
case vvl::FlagBitmask::VkGeometryInstanceFlagBitsKHR:
if (value &
(VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT | VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_opacity_micromap)) {
return {vvl::Extension::_VK_EXT_opacity_micromap};
}
}
return {};
case vvl::FlagBitmask::VkBuildAccelerationStructureFlagBitsKHR:
if (value & (VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_ray_tracing_motion_blur)) {
return {vvl::Extension::_VK_NV_ray_tracing_motion_blur};
}
}
if (value & (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)) {
if (!IsExtEnabled(device_extensions.vk_ext_opacity_micromap)) {
return {vvl::Extension::_VK_EXT_opacity_micromap};
}
}
if (value & (VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_displacement_micromap)) {
return {vvl::Extension::_VK_NV_displacement_micromap};
}
}
if (value & (VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_ray_tracing_position_fetch)) {
return {vvl::Extension::_VK_KHR_ray_tracing_position_fetch};
}
}
return {};
case vvl::FlagBitmask::VkAccelerationStructureCreateFlagBitsKHR:
if (value & (VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_buffer)) {
return {vvl::Extension::_VK_EXT_descriptor_buffer};
}
}
if (value & (VK_ACCELERATION_STRUCTURE_CREATE_MOTION_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_ray_tracing_motion_blur)) {
return {vvl::Extension::_VK_NV_ray_tracing_motion_blur};
}
}
return {};
default:
return {};
}
}
vvl::Extensions IsValidFlag64Value(vvl::FlagBitmask flag_bitmask, VkFlags64 value, const DeviceExtensions& device_extensions) {
switch (flag_bitmask) {
case vvl::FlagBitmask::VkPipelineStageFlagBits2:
if (value & (VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_decode_queue)) {
return {vvl::Extension::_VK_KHR_video_decode_queue};
}
}
if (value & (VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_encode_queue)) {
return {vvl::Extension::_VK_KHR_video_encode_queue};
}
}
if (value & (VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI)) {
if (!IsExtEnabled(device_extensions.vk_huawei_subpass_shading)) {
return {vvl::Extension::_VK_HUAWEI_subpass_shading};
}
}
if (value & (VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI)) {
if (!IsExtEnabled(device_extensions.vk_huawei_invocation_mask)) {
return {vvl::Extension::_VK_HUAWEI_invocation_mask};
}
}
if (value & (VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_ray_tracing_maintenance1)) {
return {vvl::Extension::_VK_KHR_ray_tracing_maintenance1};
}
}
if (value & (VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_opacity_micromap)) {
return {vvl::Extension::_VK_EXT_opacity_micromap};
}
}
if (value & (VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI)) {
if (!IsExtEnabled(device_extensions.vk_huawei_cluster_culling_shader)) {
return {vvl::Extension::_VK_HUAWEI_cluster_culling_shader};
}
}
if (value & (VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_optical_flow)) {
return {vvl::Extension::_VK_NV_optical_flow};
}
}
return {};
case vvl::FlagBitmask::VkAccessFlagBits2:
if (value & (VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR | VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_decode_queue)) {
return {vvl::Extension::_VK_KHR_video_decode_queue};
}
}
if (value & (VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR | VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_video_encode_queue)) {
return {vvl::Extension::_VK_KHR_video_encode_queue};
}
}
if (value & (VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_descriptor_buffer)) {
return {vvl::Extension::_VK_EXT_descriptor_buffer};
}
}
if (value & (VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI)) {
if (!IsExtEnabled(device_extensions.vk_huawei_invocation_mask)) {
return {vvl::Extension::_VK_HUAWEI_invocation_mask};
}
}
if (value & (VK_ACCESS_2_SHADER_BINDING_TABLE_READ_BIT_KHR)) {
if (!IsExtEnabled(device_extensions.vk_khr_ray_tracing_maintenance1)) {
return {vvl::Extension::_VK_KHR_ray_tracing_maintenance1};
}
}
if (value & (VK_ACCESS_2_MICROMAP_READ_BIT_EXT | VK_ACCESS_2_MICROMAP_WRITE_BIT_EXT)) {
if (!IsExtEnabled(device_extensions.vk_ext_opacity_micromap)) {
return {vvl::Extension::_VK_EXT_opacity_micromap};
}
}
if (value & (VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV | VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV)) {
if (!IsExtEnabled(device_extensions.vk_nv_optical_flow)) {
return {vvl::Extension::_VK_NV_optical_flow};
}
}
return {};
case vvl::FlagBitmask::VkBufferUsageFlagBits2KHR:
if (value & (VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX)) {
if (!IsExtEnabled(device_extensions.vk_amdx_shader_enqueue)) {
return {vvl::Extension::_VK_AMDX_shader_enqueue};
}
}
return {};
default:
return {};
}
}
// NOLINTEND