Skip to content

vulkan: properly ignore unsupported feature structs

Yiwei Zhang requested to merge zzyiwei/mesa:vk-ignore-unsupported-feats into main

What does this MR do and why?

vulkan: properly ignore unsupported feature structs

This is inspired from below MR but done in the fixed way:
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26767

The requirements used to look up struct extensions are missing the alias
check for those promoted ones. This change fixes it so that the
condition now is correct.

We can land this now as all drivers have migrated to use the common
properties, which has now also been mandated.
The generated code diff is here for the record
--- ./vk_physical_device_features.c     2024-06-25 00:07:37.296779618 -0700
+++ /home/zzyiwei/vkgen/vk_physical_device_features.c   2024-06-25 00:07:00.338124497 -0700
@@ -405,555 +405,923 @@
       VkBaseOutStructure *supported = NULL;
       switch (features->sType) {
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_device_generated_commands))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_device_generated_commands_compute))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_private_data))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePrivateDataFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0) || physical_device->supported_extensions.KHR_variable_pointers))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceVariablePointersFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0) || physical_device->supported_extensions.KHR_multiview))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMultiviewFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_present_id))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePresentIdFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_present_wait))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePresentWaitFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0) || physical_device->supported_extensions.KHR_16bit_storage))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevice16BitStorageFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_shader_subgroup_extended_types))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0) || physical_device->supported_extensions.KHR_sampler_ycbcr_conversion))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceSamplerYcbcrConversionFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0)))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceProtectedMemoryFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_blend_operation_advanced))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_multi_draw))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMultiDrawFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_inline_uniform_block))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceInlineUniformBlockFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_maintenance4))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMaintenance4Features;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_maintenance5))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMaintenance5FeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_maintenance6))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMaintenance6FeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0)))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderDrawParametersFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_shader_float16_int8))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderFloat16Int8Features;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.EXT_host_query_reset))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceHostQueryResetFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_global_priority || physical_device->supported_extensions.EXT_global_priority_query))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_device_memory_report))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.EXT_descriptor_indexing))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDescriptorIndexingFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_timeline_semaphore))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceTimelineSemaphoreFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_8bit_storage))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevice8BitStorageFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_conditional_rendering))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceConditionalRenderingFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_vulkan_memory_model))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceVulkanMemoryModelFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_shader_atomic_int64))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderAtomicInt64Features;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_shader_atomic_float))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_shader_atomic_float2))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.EXT_vertex_attribute_divisor || physical_device->supported_extensions.KHR_vertex_attribute_divisor))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_astc_decode_mode))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceASTCDecodeFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_transform_feedback))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceTransformFeedbackFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_representative_fragment_test))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_scissor_exclusive))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceExclusiveScissorFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_corner_sampled_image))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceCornerSampledImageFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_compute_shader_derivatives))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_shader_image_footprint))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderImageFootprintFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_dedicated_allocation_image_aliasing))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_copy_memory_indirect))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceCopyMemoryIndirectFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_memory_decompression))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMemoryDecompressionFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_shading_rate_image))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShadingRateImageFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI:
+         if (!(physical_device->supported_extensions.HUAWEI_invocation_mask))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_mesh_shader))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMeshShaderFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_mesh_shader))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMeshShaderFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_acceleration_structure))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceAccelerationStructureFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_ray_tracing_pipeline))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRayTracingPipelineFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_ray_query))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRayQueryFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_ray_tracing_maintenance1))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_fragment_density_map))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceFragmentDensityMapFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_fragment_density_map2))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM:
+         if (!(physical_device->supported_extensions.QCOM_fragment_density_map_offset))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.EXT_scalar_block_layout))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceScalarBlockLayoutFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_uniform_buffer_standard_layout))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceUniformBufferStandardLayoutFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_depth_clip_enable))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDepthClipEnableFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_memory_priority))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMemoryPriorityFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_pageable_device_local_memory))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_buffer_device_address))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceBufferDeviceAddressFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_buffer_device_address))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_imageless_framebuffer))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImagelessFramebufferFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_texture_compression_astc_hdr))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceTextureCompressionASTCHDRFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_cooperative_matrix))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceCooperativeMatrixFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_ycbcr_image_arrays))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_present_barrier))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePresentBarrierFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_performance_query))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePerformanceQueryFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_coverage_reduction_mode))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceCoverageReductionModeFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:
+         if (!(physical_device->supported_extensions.INTEL_shader_integer_functions2))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_shader_clock))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderClockFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.EXT_index_type_uint8 || physical_device->supported_extensions.KHR_index_type_uint8))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceIndexTypeUint8FeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_shader_sm_builtins))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_fragment_shader_interlock))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_separate_depth_stencil_layouts))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_primitive_topology_list_restart))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_pipeline_executable_properties))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_shader_demote_to_helper_invocation))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_texel_buffer_alignment))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_subgroup_size_control))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceSubgroupSizeControlFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.EXT_line_rasterization || physical_device->supported_extensions.KHR_line_rasterization))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceLineRasterizationFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_pipeline_creation_cache_control))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePipelineCreationCacheControlFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0)))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceVulkan11Features;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0)))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceVulkan12Features;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0)))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceVulkan13Features;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD:
+         if (!(physical_device->supported_extensions.AMD_device_coherent_memory))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceCoherentMemoryFeaturesAMD;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_custom_border_color))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceCustomBorderColorFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_border_color_swizzle))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_extended_dynamic_state))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_extended_dynamic_state2))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_extended_dynamic_state3))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_device_diagnostics_config))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDiagnosticsConfigFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_zero_initialize_workgroup_memory))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_shader_subgroup_uniform_control_flow))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_robustness2))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRobustness2FeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_image_robustness))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImageRobustnessFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_workgroup_memory_explicit_layout))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_4444_formats))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevice4444FormatsFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI:
+         if (!(physical_device->supported_extensions.HUAWEI_subpass_shading))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceSubpassShadingFeaturesHUAWEI;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI:
+         if (!(physical_device->supported_extensions.HUAWEI_cluster_culling_shader))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_shader_image_atomic_int64))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_fragment_shading_rate))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceFragmentShadingRateFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_shader_terminate_invocation))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderTerminateInvocationFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_fragment_shading_rate_enums))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_image_2d_view_of_3d))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_image_sliced_view_of_3d))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_attachment_feedback_loop_dynamic_state))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_legacy_vertex_attributes))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.VALVE_mutable_descriptor_type || physical_device->supported_extensions.EXT_mutable_descriptor_type))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_depth_clip_control))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDepthClipControlFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_vertex_input_dynamic_state))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_external_memory_rdma))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_color_write_enable))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceColorWriteEnableFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_synchronization2))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceSynchronization2Features;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_host_image_copy))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceHostImageCopyFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_primitives_generated_query))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_legacy_dithering))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceLegacyDitheringFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_multisampled_render_to_single_sampled))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_pipeline_protected_access))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePipelineProtectedAccessFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_video_maintenance1))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceVideoMaintenance1FeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_inherited_viewport_scissor))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceInheritedViewportScissorFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_ycbcr_2plane_444_formats))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_provoking_vertex))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceProvokingVertexFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_descriptor_buffer))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDescriptorBufferFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_shader_integer_dot_product))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderIntegerDotProductFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.NV_fragment_shader_barycentric || physical_device->supported_extensions.KHR_fragment_shader_barycentric))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_ray_tracing_motion_blur))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_ray_tracing_validation))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRayTracingValidationFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_rgba10x6_formats))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES:
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_dynamic_rendering))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDynamicRenderingFeatures;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_image_view_min_lod))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImageViewMinLodFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.ARM_rasterization_order_attachment_access || physical_device->supported_extensions.EXT_rasterization_order_attachment_access))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_linear_color_attachment))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceLinearColorAttachmentFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_graphics_pipeline_library))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE:
+         if (!(physical_device->supported_extensions.VALVE_descriptor_set_host_mapping))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_nested_command_buffer))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceNestedCommandBufferFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_shader_module_identifier))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_image_compression_control))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImageCompressionControlFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_image_compression_control_swapchain))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_subpass_merge_feedback))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_opacity_micromap))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceOpacityMicromapFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_pipeline_properties))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePipelinePropertiesFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD:
+         if (!(physical_device->supported_extensions.AMD_shader_early_and_late_fragment_tests))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_non_seamless_cube_map))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_pipeline_robustness))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePipelineRobustnessFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM:
+         if (!(physical_device->supported_extensions.QCOM_image_processing))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImageProcessingFeaturesQCOM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM:
+         if (!(physical_device->supported_extensions.QCOM_tile_properties))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceTilePropertiesFeaturesQCOM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC:
+         if (!(physical_device->supported_extensions.SEC_amigo_profiling))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceAmigoProfilingFeaturesSEC;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_attachment_feedback_loop_layout))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_depth_clamp_zero_one))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDepthClampZeroOneFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_device_address_binding_report))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceAddressBindingReportFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_optical_flow))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceOpticalFlowFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_device_fault))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceFaultFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_pipeline_library_group_handles))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM:
+         if (!(physical_device->supported_extensions.ARM_shader_core_builtins))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_frame_boundary))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceFrameBoundaryFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_dynamic_rendering_unused_attachments))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_swapchain_maintenance1))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_depth_bias_control))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDepthBiasControlFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_ray_tracing_invocation_reorder))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_extended_sparse_address_space))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM:
+         if (!(physical_device->supported_extensions.QCOM_multiview_per_view_viewports))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_ray_tracing_position_fetch))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM:
+         if (!(physical_device->supported_extensions.QCOM_multiview_per_view_render_areas))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_shader_object))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderObjectFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_shader_tile_image))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderTileImageFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_cooperative_matrix))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceCooperativeMatrixFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM:
+         if (!(physical_device->supported_extensions.QCOM_filter_cubic_clamp))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceCubicClampFeaturesQCOM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM:
+         if (!(physical_device->supported_extensions.QCOM_ycbcr_degamma))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceYcbcrDegammaFeaturesQCOM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM:
+         if (!(physical_device->supported_extensions.QCOM_filter_cubic_weights))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceCubicWeightsFeaturesQCOM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM:
+         if (!(physical_device->supported_extensions.QCOM_image_processing2))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImageProcessing2FeaturesQCOM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_descriptor_pool_overallocation))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_per_stage_descriptor_set))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDevicePerStageDescriptorSetFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM:
+         if (!(physical_device->supported_extensions.ARM_scheduling_controls))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceSchedulingControlsFeaturesARM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG:
+         if (!(physical_device->supported_extensions.IMG_relaxed_line_rasterization))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM:
+         if (!(physical_device->supported_extensions.ARM_render_pass_striped))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRenderPassStripedFeaturesARM;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_shader_maximal_reconvergence))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_shader_subgroup_rotate))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_shader_expect_assume))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderExpectAssumeFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_shader_float_controls2))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderFloatControls2FeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_dynamic_rendering_local_read))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR:
+         if (!(physical_device->supported_extensions.KHR_shader_quad_control))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderQuadControlFeaturesKHR;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_shader_atomic_float16_vector))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_map_memory_placed))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV:
+         if (!(physical_device->supported_extensions.NV_raw_access_chains))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceRawAccessChainsFeaturesNV;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA:
+         if (!(physical_device->supported_extensions.MESA_image_alignment_control))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceImageAlignmentControlFeaturesMESA;
          break;
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT:
+         if (!(physical_device->supported_extensions.EXT_shader_replicated_composites))
+            break;
          supported = (VkBaseOutStructure *) &supported_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT;
          break;
       default:
@@ -1001,6 +1369,8 @@
         break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_device_generated_commands))
+            break;
          const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV *a = &supported_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV;
          const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV *b = (const void *) features;
          if (b->deviceGeneratedCommands && !a->deviceGeneratedCommands)
@@ -1009,6 +1379,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_device_generated_commands_compute))
+            break;
          const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *a = &supported_VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV;
          const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *b = (const void *) features;
          if (b->deviceGeneratedCompute && !a->deviceGeneratedCompute)
@@ -1023,6 +1395,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_private_data))
+            break;
          const VkPhysicalDevicePrivateDataFeatures *a = &supported_VkPhysicalDevicePrivateDataFeatures;
          const VkPhysicalDevicePrivateDataFeatures *b = (const void *) features;
          if (b->privateData && !a->privateData)
@@ -1031,6 +1405,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0) || physical_device->supported_extensions.KHR_variable_pointers))
+            break;
          const VkPhysicalDeviceVariablePointersFeatures *a = &supported_VkPhysicalDeviceVariablePointersFeatures;
          const VkPhysicalDeviceVariablePointersFeatures *b = (const void *) features;
          if (b->variablePointersStorageBuffer && !a->variablePointersStorageBuffer)
@@ -1042,6 +1418,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0) || physical_device->supported_extensions.KHR_multiview))
+            break;
          const VkPhysicalDeviceMultiviewFeatures *a = &supported_VkPhysicalDeviceMultiviewFeatures;
          const VkPhysicalDeviceMultiviewFeatures *b = (const void *) features;
          if (b->multiview && !a->multiview)
@@ -1056,6 +1434,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_present_id))
+            break;
          const VkPhysicalDevicePresentIdFeaturesKHR *a = &supported_VkPhysicalDevicePresentIdFeaturesKHR;
          const VkPhysicalDevicePresentIdFeaturesKHR *b = (const void *) features;
          if (b->presentId && !a->presentId)
@@ -1064,6 +1444,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_present_wait))
+            break;
          const VkPhysicalDevicePresentWaitFeaturesKHR *a = &supported_VkPhysicalDevicePresentWaitFeaturesKHR;
          const VkPhysicalDevicePresentWaitFeaturesKHR *b = (const void *) features;
          if (b->presentWait && !a->presentWait)
@@ -1072,6 +1454,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0) || physical_device->supported_extensions.KHR_16bit_storage))
+            break;
          const VkPhysicalDevice16BitStorageFeatures *a = &supported_VkPhysicalDevice16BitStorageFeatures;
          const VkPhysicalDevice16BitStorageFeatures *b = (const void *) features;
          if (b->storageBuffer16BitAccess && !a->storageBuffer16BitAccess)
@@ -1089,6 +1473,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_shader_subgroup_extended_types))
+            break;
          const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *a = &supported_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures;
          const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *b = (const void *) features;
          if (b->shaderSubgroupExtendedTypes && !a->shaderSubgroupExtendedTypes)
@@ -1097,6 +1483,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0) || physical_device->supported_extensions.KHR_sampler_ycbcr_conversion))
+            break;
          const VkPhysicalDeviceSamplerYcbcrConversionFeatures *a = &supported_VkPhysicalDeviceSamplerYcbcrConversionFeatures;
          const VkPhysicalDeviceSamplerYcbcrConversionFeatures *b = (const void *) features;
          if (b->samplerYcbcrConversion && !a->samplerYcbcrConversion)
@@ -1105,6 +1493,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0)))
+            break;
          const VkPhysicalDeviceProtectedMemoryFeatures *a = &supported_VkPhysicalDeviceProtectedMemoryFeatures;
          const VkPhysicalDeviceProtectedMemoryFeatures *b = (const void *) features;
          if (b->protectedMemory && !a->protectedMemory)
@@ -1113,6 +1503,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_blend_operation_advanced))
+            break;
          const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *a = &supported_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
          const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *b = (const void *) features;
          if (b->advancedBlendCoherentOperations && !a->advancedBlendCoherentOperations)
@@ -1121,6 +1513,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_multi_draw))
+            break;
          const VkPhysicalDeviceMultiDrawFeaturesEXT *a = &supported_VkPhysicalDeviceMultiDrawFeaturesEXT;
          const VkPhysicalDeviceMultiDrawFeaturesEXT *b = (const void *) features;
          if (b->multiDraw && !a->multiDraw)
@@ -1129,6 +1523,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_inline_uniform_block))
+            break;
          const VkPhysicalDeviceInlineUniformBlockFeatures *a = &supported_VkPhysicalDeviceInlineUniformBlockFeatures;
          const VkPhysicalDeviceInlineUniformBlockFeatures *b = (const void *) features;
          if (b->inlineUniformBlock && !a->inlineUniformBlock)
@@ -1140,6 +1536,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_maintenance4))
+            break;
          const VkPhysicalDeviceMaintenance4Features *a = &supported_VkPhysicalDeviceMaintenance4Features;
          const VkPhysicalDeviceMaintenance4Features *b = (const void *) features;
          if (b->maintenance4 && !a->maintenance4)
@@ -1148,6 +1546,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_maintenance5))
+            break;
          const VkPhysicalDeviceMaintenance5FeaturesKHR *a = &supported_VkPhysicalDeviceMaintenance5FeaturesKHR;
          const VkPhysicalDeviceMaintenance5FeaturesKHR *b = (const void *) features;
          if (b->maintenance5 && !a->maintenance5)
@@ -1156,6 +1556,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_maintenance6))
+            break;
          const VkPhysicalDeviceMaintenance6FeaturesKHR *a = &supported_VkPhysicalDeviceMaintenance6FeaturesKHR;
          const VkPhysicalDeviceMaintenance6FeaturesKHR *b = (const void *) features;
          if (b->maintenance6 && !a->maintenance6)
@@ -1164,6 +1566,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0)))
+            break;
          const VkPhysicalDeviceShaderDrawParametersFeatures *a = &supported_VkPhysicalDeviceShaderDrawParametersFeatures;
          const VkPhysicalDeviceShaderDrawParametersFeatures *b = (const void *) features;
          if (b->shaderDrawParameters && !a->shaderDrawParameters)
@@ -1172,6 +1576,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_shader_float16_int8))
+            break;
          const VkPhysicalDeviceShaderFloat16Int8Features *a = &supported_VkPhysicalDeviceShaderFloat16Int8Features;
          const VkPhysicalDeviceShaderFloat16Int8Features *b = (const void *) features;
          if (b->shaderFloat16 && !a->shaderFloat16)
@@ -1183,6 +1589,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.EXT_host_query_reset))
+            break;
          const VkPhysicalDeviceHostQueryResetFeatures *a = &supported_VkPhysicalDeviceHostQueryResetFeatures;
          const VkPhysicalDeviceHostQueryResetFeatures *b = (const void *) features;
          if (b->hostQueryReset && !a->hostQueryReset)
@@ -1191,6 +1599,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_global_priority || physical_device->supported_extensions.EXT_global_priority_query))
+            break;
          const VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR *a = &supported_VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR;
          const VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR *b = (const void *) features;
          if (b->globalPriorityQuery && !a->globalPriorityQuery)
@@ -1199,6 +1609,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_device_memory_report))
+            break;
          const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *a = &supported_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT;
          const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *b = (const void *) features;
          if (b->deviceMemoryReport && !a->deviceMemoryReport)
@@ -1207,6 +1619,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.EXT_descriptor_indexing))
+            break;
          const VkPhysicalDeviceDescriptorIndexingFeatures *a = &supported_VkPhysicalDeviceDescriptorIndexingFeatures;
          const VkPhysicalDeviceDescriptorIndexingFeatures *b = (const void *) features;
          if (b->shaderInputAttachmentArrayDynamicIndexing && !a->shaderInputAttachmentArrayDynamicIndexing)
@@ -1272,6 +1686,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_timeline_semaphore))
+            break;
          const VkPhysicalDeviceTimelineSemaphoreFeatures *a = &supported_VkPhysicalDeviceTimelineSemaphoreFeatures;
          const VkPhysicalDeviceTimelineSemaphoreFeatures *b = (const void *) features;
          if (b->timelineSemaphore && !a->timelineSemaphore)
@@ -1280,6 +1696,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_8bit_storage))
+            break;
          const VkPhysicalDevice8BitStorageFeatures *a = &supported_VkPhysicalDevice8BitStorageFeatures;
          const VkPhysicalDevice8BitStorageFeatures *b = (const void *) features;
          if (b->storageBuffer8BitAccess && !a->storageBuffer8BitAccess)
@@ -1294,6 +1712,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_conditional_rendering))
+            break;
          const VkPhysicalDeviceConditionalRenderingFeaturesEXT *a = &supported_VkPhysicalDeviceConditionalRenderingFeaturesEXT;
          const VkPhysicalDeviceConditionalRenderingFeaturesEXT *b = (const void *) features;
          if (b->conditionalRendering && !a->conditionalRendering)
@@ -1305,6 +1725,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_vulkan_memory_model))
+            break;
          const VkPhysicalDeviceVulkanMemoryModelFeatures *a = &supported_VkPhysicalDeviceVulkanMemoryModelFeatures;
          const VkPhysicalDeviceVulkanMemoryModelFeatures *b = (const void *) features;
          if (b->vulkanMemoryModel && !a->vulkanMemoryModel)
@@ -1319,6 +1741,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_shader_atomic_int64))
+            break;
          const VkPhysicalDeviceShaderAtomicInt64Features *a = &supported_VkPhysicalDeviceShaderAtomicInt64Features;
          const VkPhysicalDeviceShaderAtomicInt64Features *b = (const void *) features;
          if (b->shaderBufferInt64Atomics && !a->shaderBufferInt64Atomics)
@@ -1330,6 +1754,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_shader_atomic_float))
+            break;
          const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *a = &supported_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT;
          const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *b = (const void *) features;
          if (b->shaderBufferFloat32Atomics && !a->shaderBufferFloat32Atomics)
@@ -1371,6 +1797,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_shader_atomic_float2))
+            break;
          const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *a = &supported_VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT;
          const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *b = (const void *) features;
          if (b->shaderBufferFloat16Atomics && !a->shaderBufferFloat16Atomics)
@@ -1412,6 +1840,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.EXT_vertex_attribute_divisor || physical_device->supported_extensions.KHR_vertex_attribute_divisor))
+            break;
          const VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR *a = &supported_VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR;
          const VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR *b = (const void *) features;
          if (b->vertexAttributeInstanceRateDivisor && !a->vertexAttributeInstanceRateDivisor)
@@ -1423,6 +1853,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_astc_decode_mode))
+            break;
          const VkPhysicalDeviceASTCDecodeFeaturesEXT *a = &supported_VkPhysicalDeviceASTCDecodeFeaturesEXT;
          const VkPhysicalDeviceASTCDecodeFeaturesEXT *b = (const void *) features;
          if (b->decodeModeSharedExponent && !a->decodeModeSharedExponent)
@@ -1431,6 +1863,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_transform_feedback))
+            break;
          const VkPhysicalDeviceTransformFeedbackFeaturesEXT *a = &supported_VkPhysicalDeviceTransformFeedbackFeaturesEXT;
          const VkPhysicalDeviceTransformFeedbackFeaturesEXT *b = (const void *) features;
          if (b->transformFeedback && !a->transformFeedback)
@@ -1442,6 +1876,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_representative_fragment_test))
+            break;
          const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV *a = &supported_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV;
          const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV *b = (const void *) features;
          if (b->representativeFragmentTest && !a->representativeFragmentTest)
@@ -1450,6 +1886,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_scissor_exclusive))
+            break;
          const VkPhysicalDeviceExclusiveScissorFeaturesNV *a = &supported_VkPhysicalDeviceExclusiveScissorFeaturesNV;
          const VkPhysicalDeviceExclusiveScissorFeaturesNV *b = (const void *) features;
          if (b->exclusiveScissor && !a->exclusiveScissor)
@@ -1458,6 +1896,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_corner_sampled_image))
+            break;
          const VkPhysicalDeviceCornerSampledImageFeaturesNV *a = &supported_VkPhysicalDeviceCornerSampledImageFeaturesNV;
          const VkPhysicalDeviceCornerSampledImageFeaturesNV *b = (const void *) features;
          if (b->cornerSampledImage && !a->cornerSampledImage)
@@ -1466,6 +1906,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_compute_shader_derivatives))
+            break;
          const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV *a = &supported_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV;
          const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV *b = (const void *) features;
          if (b->computeDerivativeGroupQuads && !a->computeDerivativeGroupQuads)
@@ -1477,6 +1919,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_shader_image_footprint))
+            break;
          const VkPhysicalDeviceShaderImageFootprintFeaturesNV *a = &supported_VkPhysicalDeviceShaderImageFootprintFeaturesNV;
          const VkPhysicalDeviceShaderImageFootprintFeaturesNV *b = (const void *) features;
          if (b->imageFootprint && !a->imageFootprint)
@@ -1485,6 +1929,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_dedicated_allocation_image_aliasing))
+            break;
          const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV *a = &supported_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
          const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV *b = (const void *) features;
          if (b->dedicatedAllocationImageAliasing && !a->dedicatedAllocationImageAliasing)
@@ -1493,6 +1939,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_copy_memory_indirect))
+            break;
          const VkPhysicalDeviceCopyMemoryIndirectFeaturesNV *a = &supported_VkPhysicalDeviceCopyMemoryIndirectFeaturesNV;
          const VkPhysicalDeviceCopyMemoryIndirectFeaturesNV *b = (const void *) features;
          if (b->indirectCopy && !a->indirectCopy)
@@ -1501,6 +1949,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_memory_decompression))
+            break;
          const VkPhysicalDeviceMemoryDecompressionFeaturesNV *a = &supported_VkPhysicalDeviceMemoryDecompressionFeaturesNV;
          const VkPhysicalDeviceMemoryDecompressionFeaturesNV *b = (const void *) features;
          if (b->memoryDecompression && !a->memoryDecompression)
@@ -1509,6 +1959,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_shading_rate_image))
+            break;
          const VkPhysicalDeviceShadingRateImageFeaturesNV *a = &supported_VkPhysicalDeviceShadingRateImageFeaturesNV;
          const VkPhysicalDeviceShadingRateImageFeaturesNV *b = (const void *) features;
          if (b->shadingRateImage && !a->shadingRateImage)
@@ -1520,6 +1972,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI: {
+         if (!(physical_device->supported_extensions.HUAWEI_invocation_mask))
+            break;
          const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI *a = &supported_VkPhysicalDeviceInvocationMaskFeaturesHUAWEI;
          const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI *b = (const void *) features;
          if (b->invocationMask && !a->invocationMask)
@@ -1528,6 +1982,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_mesh_shader))
+            break;
          const VkPhysicalDeviceMeshShaderFeaturesNV *a = &supported_VkPhysicalDeviceMeshShaderFeaturesNV;
          const VkPhysicalDeviceMeshShaderFeaturesNV *b = (const void *) features;
          if (b->taskShader && !a->taskShader)
@@ -1539,6 +1995,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_mesh_shader))
+            break;
          const VkPhysicalDeviceMeshShaderFeaturesEXT *a = &supported_VkPhysicalDeviceMeshShaderFeaturesEXT;
          const VkPhysicalDeviceMeshShaderFeaturesEXT *b = (const void *) features;
          if (b->taskShader && !a->taskShader)
@@ -1559,6 +2017,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_acceleration_structure))
+            break;
          const VkPhysicalDeviceAccelerationStructureFeaturesKHR *a = &supported_VkPhysicalDeviceAccelerationStructureFeaturesKHR;
          const VkPhysicalDeviceAccelerationStructureFeaturesKHR *b = (const void *) features;
          if (b->accelerationStructure && !a->accelerationStructure)
@@ -1579,6 +2039,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_ray_tracing_pipeline))
+            break;
          const VkPhysicalDeviceRayTracingPipelineFeaturesKHR *a = &supported_VkPhysicalDeviceRayTracingPipelineFeaturesKHR;
          const VkPhysicalDeviceRayTracingPipelineFeaturesKHR *b = (const void *) features;
          if (b->rayTracingPipeline && !a->rayTracingPipeline)
@@ -1599,6 +2061,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_ray_query))
+            break;
          const VkPhysicalDeviceRayQueryFeaturesKHR *a = &supported_VkPhysicalDeviceRayQueryFeaturesKHR;
          const VkPhysicalDeviceRayQueryFeaturesKHR *b = (const void *) features;
          if (b->rayQuery && !a->rayQuery)
@@ -1607,6 +2071,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_ray_tracing_maintenance1))
+            break;
          const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR *a = &supported_VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR;
          const VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR *b = (const void *) features;
          if (b->rayTracingMaintenance1 && !a->rayTracingMaintenance1)
@@ -1618,6 +2084,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_fragment_density_map))
+            break;
          const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *a = &supported_VkPhysicalDeviceFragmentDensityMapFeaturesEXT;
          const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *b = (const void *) features;
          if (b->fragmentDensityMap && !a->fragmentDensityMap)
@@ -1632,6 +2100,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_fragment_density_map2))
+            break;
          const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *a = &supported_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT;
          const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *b = (const void *) features;
          if (b->fragmentDensityMapDeferred && !a->fragmentDensityMapDeferred)
@@ -1640,6 +2110,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM: {
+         if (!(physical_device->supported_extensions.QCOM_fragment_density_map_offset))
+            break;
          const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM *a = &supported_VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM;
          const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM *b = (const void *) features;
          if (b->fragmentDensityMapOffset && !a->fragmentDensityMapOffset)
@@ -1648,6 +2120,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.EXT_scalar_block_layout))
+            break;
          const VkPhysicalDeviceScalarBlockLayoutFeatures *a = &supported_VkPhysicalDeviceScalarBlockLayoutFeatures;
          const VkPhysicalDeviceScalarBlockLayoutFeatures *b = (const void *) features;
          if (b->scalarBlockLayout && !a->scalarBlockLayout)
@@ -1656,6 +2130,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_uniform_buffer_standard_layout))
+            break;
          const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *a = &supported_VkPhysicalDeviceUniformBufferStandardLayoutFeatures;
          const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *b = (const void *) features;
          if (b->uniformBufferStandardLayout && !a->uniformBufferStandardLayout)
@@ -1664,6 +2140,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_depth_clip_enable))
+            break;
          const VkPhysicalDeviceDepthClipEnableFeaturesEXT *a = &supported_VkPhysicalDeviceDepthClipEnableFeaturesEXT;
          const VkPhysicalDeviceDepthClipEnableFeaturesEXT *b = (const void *) features;
          if (b->depthClipEnable && !a->depthClipEnable)
@@ -1672,6 +2150,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_memory_priority))
+            break;
          const VkPhysicalDeviceMemoryPriorityFeaturesEXT *a = &supported_VkPhysicalDeviceMemoryPriorityFeaturesEXT;
          const VkPhysicalDeviceMemoryPriorityFeaturesEXT *b = (const void *) features;
          if (b->memoryPriority && !a->memoryPriority)
@@ -1680,6 +2160,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_pageable_device_local_memory))
+            break;
          const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *a = &supported_VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT;
          const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *b = (const void *) features;
          if (b->pageableDeviceLocalMemory && !a->pageableDeviceLocalMemory)
@@ -1688,6 +2170,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_buffer_device_address))
+            break;
          const VkPhysicalDeviceBufferDeviceAddressFeatures *a = &supported_VkPhysicalDeviceBufferDeviceAddressFeatures;
          const VkPhysicalDeviceBufferDeviceAddressFeatures *b = (const void *) features;
          if (b->bufferDeviceAddress && !a->bufferDeviceAddress)
@@ -1702,6 +2186,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_buffer_device_address))
+            break;
          const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *a = &supported_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT;
          const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *b = (const void *) features;
          if (b->bufferDeviceAddress && !a->bufferDeviceAddress)
@@ -1716,6 +2202,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_imageless_framebuffer))
+            break;
          const VkPhysicalDeviceImagelessFramebufferFeatures *a = &supported_VkPhysicalDeviceImagelessFramebufferFeatures;
          const VkPhysicalDeviceImagelessFramebufferFeatures *b = (const void *) features;
          if (b->imagelessFramebuffer && !a->imagelessFramebuffer)
@@ -1724,6 +2212,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_texture_compression_astc_hdr))
+            break;
          const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *a = &supported_VkPhysicalDeviceTextureCompressionASTCHDRFeatures;
          const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *b = (const void *) features;
          if (b->textureCompressionASTC_HDR && !a->textureCompressionASTC_HDR)
@@ -1732,6 +2222,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_cooperative_matrix))
+            break;
          const VkPhysicalDeviceCooperativeMatrixFeaturesNV *a = &supported_VkPhysicalDeviceCooperativeMatrixFeaturesNV;
          const VkPhysicalDeviceCooperativeMatrixFeaturesNV *b = (const void *) features;
          if (b->cooperativeMatrix && !a->cooperativeMatrix)
@@ -1743,6 +2235,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_ycbcr_image_arrays))
+            break;
          const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *a = &supported_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT;
          const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *b = (const void *) features;
          if (b->ycbcrImageArrays && !a->ycbcrImageArrays)
@@ -1751,6 +2245,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_present_barrier))
+            break;
          const VkPhysicalDevicePresentBarrierFeaturesNV *a = &supported_VkPhysicalDevicePresentBarrierFeaturesNV;
          const VkPhysicalDevicePresentBarrierFeaturesNV *b = (const void *) features;
          if (b->presentBarrier && !a->presentBarrier)
@@ -1759,6 +2255,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_performance_query))
+            break;
          const VkPhysicalDevicePerformanceQueryFeaturesKHR *a = &supported_VkPhysicalDevicePerformanceQueryFeaturesKHR;
          const VkPhysicalDevicePerformanceQueryFeaturesKHR *b = (const void *) features;
          if (b->performanceCounterQueryPools && !a->performanceCounterQueryPools)
@@ -1770,6 +2268,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_coverage_reduction_mode))
+            break;
          const VkPhysicalDeviceCoverageReductionModeFeaturesNV *a = &supported_VkPhysicalDeviceCoverageReductionModeFeaturesNV;
          const VkPhysicalDeviceCoverageReductionModeFeaturesNV *b = (const void *) features;
          if (b->coverageReductionMode && !a->coverageReductionMode)
@@ -1778,6 +2278,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: {
+         if (!(physical_device->supported_extensions.INTEL_shader_integer_functions2))
+            break;
          const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL *a = &supported_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL;
          const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL *b = (const void *) features;
          if (b->shaderIntegerFunctions2 && !a->shaderIntegerFunctions2)
@@ -1786,6 +2288,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_shader_clock))
+            break;
          const VkPhysicalDeviceShaderClockFeaturesKHR *a = &supported_VkPhysicalDeviceShaderClockFeaturesKHR;
          const VkPhysicalDeviceShaderClockFeaturesKHR *b = (const void *) features;
          if (b->shaderSubgroupClock && !a->shaderSubgroupClock)
@@ -1797,6 +2301,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.EXT_index_type_uint8 || physical_device->supported_extensions.KHR_index_type_uint8))
+            break;
          const VkPhysicalDeviceIndexTypeUint8FeaturesKHR *a = &supported_VkPhysicalDeviceIndexTypeUint8FeaturesKHR;
          const VkPhysicalDeviceIndexTypeUint8FeaturesKHR *b = (const void *) features;
          if (b->indexTypeUint8 && !a->indexTypeUint8)
@@ -1805,6 +2311,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_shader_sm_builtins))
+            break;
          const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV *a = &supported_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV;
          const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV *b = (const void *) features;
          if (b->shaderSMBuiltins && !a->shaderSMBuiltins)
@@ -1813,6 +2321,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_fragment_shader_interlock))
+            break;
          const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *a = &supported_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT;
          const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *b = (const void *) features;
          if (b->fragmentShaderSampleInterlock && !a->fragmentShaderSampleInterlock)
@@ -1827,6 +2337,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0) || physical_device->supported_extensions.KHR_separate_depth_stencil_layouts))
+            break;
          const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *a = &supported_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures;
          const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *b = (const void *) features;
          if (b->separateDepthStencilLayouts && !a->separateDepthStencilLayouts)
@@ -1835,6 +2347,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_primitive_topology_list_restart))
+            break;
          const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *a = &supported_VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT;
          const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *b = (const void *) features;
          if (b->primitiveTopologyListRestart && !a->primitiveTopologyListRestart)
@@ -1846,6 +2360,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_pipeline_executable_properties))
+            break;
          const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR *a = &supported_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR;
          const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR *b = (const void *) features;
          if (b->pipelineExecutableInfo && !a->pipelineExecutableInfo)
@@ -1854,6 +2370,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_shader_demote_to_helper_invocation))
+            break;
          const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *a = &supported_VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures;
          const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *b = (const void *) features;
          if (b->shaderDemoteToHelperInvocation && !a->shaderDemoteToHelperInvocation)
@@ -1862,6 +2380,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_texel_buffer_alignment))
+            break;
          const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *a = &supported_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT;
          const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *b = (const void *) features;
          if (b->texelBufferAlignment && !a->texelBufferAlignment)
@@ -1870,6 +2390,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_subgroup_size_control))
+            break;
          const VkPhysicalDeviceSubgroupSizeControlFeatures *a = &supported_VkPhysicalDeviceSubgroupSizeControlFeatures;
          const VkPhysicalDeviceSubgroupSizeControlFeatures *b = (const void *) features;
          if (b->subgroupSizeControl && !a->subgroupSizeControl)
@@ -1881,6 +2403,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.EXT_line_rasterization || physical_device->supported_extensions.KHR_line_rasterization))
+            break;
          const VkPhysicalDeviceLineRasterizationFeaturesKHR *a = &supported_VkPhysicalDeviceLineRasterizationFeaturesKHR;
          const VkPhysicalDeviceLineRasterizationFeaturesKHR *b = (const void *) features;
          if (b->rectangularLines && !a->rectangularLines)
@@ -1904,6 +2428,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_pipeline_creation_cache_control))
+            break;
          const VkPhysicalDevicePipelineCreationCacheControlFeatures *a = &supported_VkPhysicalDevicePipelineCreationCacheControlFeatures;
          const VkPhysicalDevicePipelineCreationCacheControlFeatures *b = (const void *) features;
          if (b->pipelineCreationCacheControl && !a->pipelineCreationCacheControl)
@@ -1912,6 +2438,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0)))
+            break;
          const VkPhysicalDeviceVulkan11Features *a = &supported_VkPhysicalDeviceVulkan11Features;
          const VkPhysicalDeviceVulkan11Features *b = (const void *) features;
          if (b->storageBuffer16BitAccess && !a->storageBuffer16BitAccess)
@@ -1953,6 +2481,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 2, 0)))
+            break;
          const VkPhysicalDeviceVulkan12Features *a = &supported_VkPhysicalDeviceVulkan12Features;
          const VkPhysicalDeviceVulkan12Features *b = (const void *) features;
          if (b->samplerMirrorClampToEdge && !a->samplerMirrorClampToEdge)
@@ -2099,6 +2629,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0)))
+            break;
          const VkPhysicalDeviceVulkan13Features *a = &supported_VkPhysicalDeviceVulkan13Features;
          const VkPhysicalDeviceVulkan13Features *b = (const void *) features;
          if (b->robustImageAccess && !a->robustImageAccess)
@@ -2149,6 +2681,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD: {
+         if (!(physical_device->supported_extensions.AMD_device_coherent_memory))
+            break;
          const VkPhysicalDeviceCoherentMemoryFeaturesAMD *a = &supported_VkPhysicalDeviceCoherentMemoryFeaturesAMD;
          const VkPhysicalDeviceCoherentMemoryFeaturesAMD *b = (const void *) features;
          if (b->deviceCoherentMemory && !a->deviceCoherentMemory)
@@ -2157,6 +2691,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_custom_border_color))
+            break;
          const VkPhysicalDeviceCustomBorderColorFeaturesEXT *a = &supported_VkPhysicalDeviceCustomBorderColorFeaturesEXT;
          const VkPhysicalDeviceCustomBorderColorFeaturesEXT *b = (const void *) features;
          if (b->customBorderColors && !a->customBorderColors)
@@ -2168,6 +2704,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_border_color_swizzle))
+            break;
          const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *a = &supported_VkPhysicalDeviceBorderColorSwizzleFeaturesEXT;
          const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *b = (const void *) features;
          if (b->borderColorSwizzle && !a->borderColorSwizzle)
@@ -2179,6 +2717,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_extended_dynamic_state))
+            break;
          const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *a = &supported_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT;
          const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *b = (const void *) features;
          if (b->extendedDynamicState && !a->extendedDynamicState)
@@ -2187,6 +2727,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_extended_dynamic_state2))
+            break;
          const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *a = &supported_VkPhysicalDeviceExtendedDynamicState2FeaturesEXT;
          const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *b = (const void *) features;
          if (b->extendedDynamicState2 && !a->extendedDynamicState2)
@@ -2201,6 +2743,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_extended_dynamic_state3))
+            break;
          const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *a = &supported_VkPhysicalDeviceExtendedDynamicState3FeaturesEXT;
          const VkPhysicalDeviceExtendedDynamicState3FeaturesEXT *b = (const void *) features;
          if (b->extendedDynamicState3TessellationDomainOrigin && !a->extendedDynamicState3TessellationDomainOrigin)
@@ -2299,6 +2843,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_device_diagnostics_config))
+            break;
          const VkPhysicalDeviceDiagnosticsConfigFeaturesNV *a = &supported_VkPhysicalDeviceDiagnosticsConfigFeaturesNV;
          const VkPhysicalDeviceDiagnosticsConfigFeaturesNV *b = (const void *) features;
          if (b->diagnosticsConfig && !a->diagnosticsConfig)
@@ -2307,6 +2853,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_zero_initialize_workgroup_memory))
+            break;
          const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *a = &supported_VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
          const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *b = (const void *) features;
          if (b->shaderZeroInitializeWorkgroupMemory && !a->shaderZeroInitializeWorkgroupMemory)
@@ -2315,6 +2863,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_shader_subgroup_uniform_control_flow))
+            break;
          const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *a = &supported_VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
          const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *b = (const void *) features;
          if (b->shaderSubgroupUniformControlFlow && !a->shaderSubgroupUniformControlFlow)
@@ -2323,6 +2873,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_robustness2))
+            break;
          const VkPhysicalDeviceRobustness2FeaturesEXT *a = &supported_VkPhysicalDeviceRobustness2FeaturesEXT;
          const VkPhysicalDeviceRobustness2FeaturesEXT *b = (const void *) features;
          if (b->robustBufferAccess2 && !a->robustBufferAccess2)
@@ -2337,6 +2889,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.EXT_image_robustness))
+            break;
          const VkPhysicalDeviceImageRobustnessFeatures *a = &supported_VkPhysicalDeviceImageRobustnessFeatures;
          const VkPhysicalDeviceImageRobustnessFeatures *b = (const void *) features;
          if (b->robustImageAccess && !a->robustImageAccess)
@@ -2345,6 +2899,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_workgroup_memory_explicit_layout))
+            break;
          const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *a = &supported_VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR;
          const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *b = (const void *) features;
          if (b->workgroupMemoryExplicitLayout && !a->workgroupMemoryExplicitLayout)
@@ -2362,6 +2918,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_4444_formats))
+            break;
          const VkPhysicalDevice4444FormatsFeaturesEXT *a = &supported_VkPhysicalDevice4444FormatsFeaturesEXT;
          const VkPhysicalDevice4444FormatsFeaturesEXT *b = (const void *) features;
          if (b->formatA4R4G4B4 && !a->formatA4R4G4B4)
@@ -2373,6 +2931,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI: {
+         if (!(physical_device->supported_extensions.HUAWEI_subpass_shading))
+            break;
          const VkPhysicalDeviceSubpassShadingFeaturesHUAWEI *a = &supported_VkPhysicalDeviceSubpassShadingFeaturesHUAWEI;
          const VkPhysicalDeviceSubpassShadingFeaturesHUAWEI *b = (const void *) features;
          if (b->subpassShading && !a->subpassShading)
@@ -2381,6 +2941,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI: {
+         if (!(physical_device->supported_extensions.HUAWEI_cluster_culling_shader))
+            break;
          const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI *a = &supported_VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI;
          const VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI *b = (const void *) features;
          if (b->clustercullingShader && !a->clustercullingShader)
@@ -2392,6 +2954,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_shader_image_atomic_int64))
+            break;
          const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *a = &supported_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT;
          const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *b = (const void *) features;
          if (b->shaderImageInt64Atomics && !a->shaderImageInt64Atomics)
@@ -2403,6 +2967,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_fragment_shading_rate))
+            break;
          const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *a = &supported_VkPhysicalDeviceFragmentShadingRateFeaturesKHR;
          const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *b = (const void *) features;
          if (b->pipelineFragmentShadingRate && !a->pipelineFragmentShadingRate)
@@ -2417,6 +2983,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_shader_terminate_invocation))
+            break;
          const VkPhysicalDeviceShaderTerminateInvocationFeatures *a = &supported_VkPhysicalDeviceShaderTerminateInvocationFeatures;
          const VkPhysicalDeviceShaderTerminateInvocationFeatures *b = (const void *) features;
          if (b->shaderTerminateInvocation && !a->shaderTerminateInvocation)
@@ -2425,6 +2993,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_fragment_shading_rate_enums))
+            break;
          const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV *a = &supported_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV;
          const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV *b = (const void *) features;
          if (b->fragmentShadingRateEnums && !a->fragmentShadingRateEnums)
@@ -2439,6 +3009,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_image_2d_view_of_3d))
+            break;
          const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *a = &supported_VkPhysicalDeviceImage2DViewOf3DFeaturesEXT;
          const VkPhysicalDeviceImage2DViewOf3DFeaturesEXT *b = (const void *) features;
          if (b->image2DViewOf3D && !a->image2DViewOf3D)
@@ -2450,6 +3022,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_image_sliced_view_of_3d))
+            break;
          const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *a = &supported_VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT;
          const VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT *b = (const void *) features;
          if (b->imageSlicedViewOf3D && !a->imageSlicedViewOf3D)
@@ -2458,6 +3032,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_attachment_feedback_loop_dynamic_state))
+            break;
          const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *a = &supported_VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT;
          const VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT *b = (const void *) features;
          if (b->attachmentFeedbackLoopDynamicState && !a->attachmentFeedbackLoopDynamicState)
@@ -2466,6 +3042,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_legacy_vertex_attributes))
+            break;
          const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *a = &supported_VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT;
          const VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT *b = (const void *) features;
          if (b->legacyVertexAttributes && !a->legacyVertexAttributes)
@@ -2474,6 +3052,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.VALVE_mutable_descriptor_type || physical_device->supported_extensions.EXT_mutable_descriptor_type))
+            break;
          const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *a = &supported_VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT;
          const VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *b = (const void *) features;
          if (b->mutableDescriptorType && !a->mutableDescriptorType)
@@ -2482,6 +3062,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_depth_clip_control))
+            break;
          const VkPhysicalDeviceDepthClipControlFeaturesEXT *a = &supported_VkPhysicalDeviceDepthClipControlFeaturesEXT;
          const VkPhysicalDeviceDepthClipControlFeaturesEXT *b = (const void *) features;
          if (b->depthClipControl && !a->depthClipControl)
@@ -2490,6 +3072,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_vertex_input_dynamic_state))
+            break;
          const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *a = &supported_VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT;
          const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *b = (const void *) features;
          if (b->vertexInputDynamicState && !a->vertexInputDynamicState)
@@ -2498,6 +3082,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_external_memory_rdma))
+            break;
          const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV *a = &supported_VkPhysicalDeviceExternalMemoryRDMAFeaturesNV;
          const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV *b = (const void *) features;
          if (b->externalMemoryRDMA && !a->externalMemoryRDMA)
@@ -2506,6 +3092,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_color_write_enable))
+            break;
          const VkPhysicalDeviceColorWriteEnableFeaturesEXT *a = &supported_VkPhysicalDeviceColorWriteEnableFeaturesEXT;
          const VkPhysicalDeviceColorWriteEnableFeaturesEXT *b = (const void *) features;
          if (b->colorWriteEnable && !a->colorWriteEnable)
@@ -2514,6 +3102,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_synchronization2))
+            break;
          const VkPhysicalDeviceSynchronization2Features *a = &supported_VkPhysicalDeviceSynchronization2Features;
          const VkPhysicalDeviceSynchronization2Features *b = (const void *) features;
          if (b->synchronization2 && !a->synchronization2)
@@ -2522,6 +3112,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_host_image_copy))
+            break;
          const VkPhysicalDeviceHostImageCopyFeaturesEXT *a = &supported_VkPhysicalDeviceHostImageCopyFeaturesEXT;
          const VkPhysicalDeviceHostImageCopyFeaturesEXT *b = (const void *) features;
          if (b->hostImageCopy && !a->hostImageCopy)
@@ -2530,6 +3122,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_primitives_generated_query))
+            break;
          const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *a = &supported_VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT;
          const VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT *b = (const void *) features;
          if (b->primitivesGeneratedQuery && !a->primitivesGeneratedQuery)
@@ -2544,6 +3138,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_legacy_dithering))
+            break;
          const VkPhysicalDeviceLegacyDitheringFeaturesEXT *a = &supported_VkPhysicalDeviceLegacyDitheringFeaturesEXT;
          const VkPhysicalDeviceLegacyDitheringFeaturesEXT *b = (const void *) features;
          if (b->legacyDithering && !a->legacyDithering)
@@ -2552,6 +3148,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_multisampled_render_to_single_sampled))
+            break;
          const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *a = &supported_VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT;
          const VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT *b = (const void *) features;
          if (b->multisampledRenderToSingleSampled && !a->multisampledRenderToSingleSampled)
@@ -2560,6 +3158,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_pipeline_protected_access))
+            break;
          const VkPhysicalDevicePipelineProtectedAccessFeaturesEXT *a = &supported_VkPhysicalDevicePipelineProtectedAccessFeaturesEXT;
          const VkPhysicalDevicePipelineProtectedAccessFeaturesEXT *b = (const void *) features;
          if (b->pipelineProtectedAccess && !a->pipelineProtectedAccess)
@@ -2568,6 +3168,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_video_maintenance1))
+            break;
          const VkPhysicalDeviceVideoMaintenance1FeaturesKHR *a = &supported_VkPhysicalDeviceVideoMaintenance1FeaturesKHR;
          const VkPhysicalDeviceVideoMaintenance1FeaturesKHR *b = (const void *) features;
          if (b->videoMaintenance1 && !a->videoMaintenance1)
@@ -2576,6 +3178,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_inherited_viewport_scissor))
+            break;
          const VkPhysicalDeviceInheritedViewportScissorFeaturesNV *a = &supported_VkPhysicalDeviceInheritedViewportScissorFeaturesNV;
          const VkPhysicalDeviceInheritedViewportScissorFeaturesNV *b = (const void *) features;
          if (b->inheritedViewportScissor2D && !a->inheritedViewportScissor2D)
@@ -2584,6 +3188,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_ycbcr_2plane_444_formats))
+            break;
          const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *a = &supported_VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
          const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *b = (const void *) features;
          if (b->ycbcr2plane444Formats && !a->ycbcr2plane444Formats)
@@ -2592,6 +3198,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_provoking_vertex))
+            break;
          const VkPhysicalDeviceProvokingVertexFeaturesEXT *a = &supported_VkPhysicalDeviceProvokingVertexFeaturesEXT;
          const VkPhysicalDeviceProvokingVertexFeaturesEXT *b = (const void *) features;
          if (b->provokingVertexLast && !a->provokingVertexLast)
@@ -2603,6 +3211,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_descriptor_buffer))
+            break;
          const VkPhysicalDeviceDescriptorBufferFeaturesEXT *a = &supported_VkPhysicalDeviceDescriptorBufferFeaturesEXT;
          const VkPhysicalDeviceDescriptorBufferFeaturesEXT *b = (const void *) features;
          if (b->descriptorBuffer && !a->descriptorBuffer)
@@ -2620,6 +3230,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_shader_integer_dot_product))
+            break;
          const VkPhysicalDeviceShaderIntegerDotProductFeatures *a = &supported_VkPhysicalDeviceShaderIntegerDotProductFeatures;
          const VkPhysicalDeviceShaderIntegerDotProductFeatures *b = (const void *) features;
          if (b->shaderIntegerDotProduct && !a->shaderIntegerDotProduct)
@@ -2628,6 +3240,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.NV_fragment_shader_barycentric || physical_device->supported_extensions.KHR_fragment_shader_barycentric))
+            break;
          const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *a = &supported_VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR;
          const VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR *b = (const void *) features;
          if (b->fragmentShaderBarycentric && !a->fragmentShaderBarycentric)
@@ -2636,6 +3250,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_ray_tracing_motion_blur))
+            break;
          const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV *a = &supported_VkPhysicalDeviceRayTracingMotionBlurFeaturesNV;
          const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV *b = (const void *) features;
          if (b->rayTracingMotionBlur && !a->rayTracingMotionBlur)
@@ -2647,6 +3263,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_ray_tracing_validation))
+            break;
          const VkPhysicalDeviceRayTracingValidationFeaturesNV *a = &supported_VkPhysicalDeviceRayTracingValidationFeaturesNV;
          const VkPhysicalDeviceRayTracingValidationFeaturesNV *b = (const void *) features;
          if (b->rayTracingValidation && !a->rayTracingValidation)
@@ -2655,6 +3273,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_rgba10x6_formats))
+            break;
          const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *a = &supported_VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT;
          const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *b = (const void *) features;
          if (b->formatRgba10x6WithoutYCbCrSampler && !a->formatRgba10x6WithoutYCbCrSampler)
@@ -2663,6 +3283,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES: {
+         if (!(physical_device->properties.apiVersion >= VK_MAKE_VERSION(1, 3, 0) || physical_device->supported_extensions.KHR_dynamic_rendering))
+            break;
          const VkPhysicalDeviceDynamicRenderingFeatures *a = &supported_VkPhysicalDeviceDynamicRenderingFeatures;
          const VkPhysicalDeviceDynamicRenderingFeatures *b = (const void *) features;
          if (b->dynamicRendering && !a->dynamicRendering)
@@ -2671,6 +3293,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_image_view_min_lod))
+            break;
          const VkPhysicalDeviceImageViewMinLodFeaturesEXT *a = &supported_VkPhysicalDeviceImageViewMinLodFeaturesEXT;
          const VkPhysicalDeviceImageViewMinLodFeaturesEXT *b = (const void *) features;
          if (b->minLod && !a->minLod)
@@ -2679,6 +3303,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.ARM_rasterization_order_attachment_access || physical_device->supported_extensions.EXT_rasterization_order_attachment_access))
+            break;
          const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *a = &supported_VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT;
          const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT *b = (const void *) features;
          if (b->rasterizationOrderColorAttachmentAccess && !a->rasterizationOrderColorAttachmentAccess)
@@ -2693,6 +3319,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_linear_color_attachment))
+            break;
          const VkPhysicalDeviceLinearColorAttachmentFeaturesNV *a = &supported_VkPhysicalDeviceLinearColorAttachmentFeaturesNV;
          const VkPhysicalDeviceLinearColorAttachmentFeaturesNV *b = (const void *) features;
          if (b->linearColorAttachment && !a->linearColorAttachment)
@@ -2701,6 +3329,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_graphics_pipeline_library))
+            break;
          const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *a = &supported_VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT;
          const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT *b = (const void *) features;
          if (b->graphicsPipelineLibrary && !a->graphicsPipelineLibrary)
@@ -2709,6 +3339,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE: {
+         if (!(physical_device->supported_extensions.VALVE_descriptor_set_host_mapping))
+            break;
          const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE *a = &supported_VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE;
          const VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE *b = (const void *) features;
          if (b->descriptorSetHostMapping && !a->descriptorSetHostMapping)
@@ -2717,6 +3349,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_nested_command_buffer))
+            break;
          const VkPhysicalDeviceNestedCommandBufferFeaturesEXT *a = &supported_VkPhysicalDeviceNestedCommandBufferFeaturesEXT;
          const VkPhysicalDeviceNestedCommandBufferFeaturesEXT *b = (const void *) features;
          if (b->nestedCommandBuffer && !a->nestedCommandBuffer)
@@ -2731,6 +3365,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_shader_module_identifier))
+            break;
          const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *a = &supported_VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT;
          const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT *b = (const void *) features;
          if (b->shaderModuleIdentifier && !a->shaderModuleIdentifier)
@@ -2739,6 +3375,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_image_compression_control))
+            break;
          const VkPhysicalDeviceImageCompressionControlFeaturesEXT *a = &supported_VkPhysicalDeviceImageCompressionControlFeaturesEXT;
          const VkPhysicalDeviceImageCompressionControlFeaturesEXT *b = (const void *) features;
          if (b->imageCompressionControl && !a->imageCompressionControl)
@@ -2747,6 +3385,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_image_compression_control_swapchain))
+            break;
          const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT *a = &supported_VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT;
          const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT *b = (const void *) features;
          if (b->imageCompressionControlSwapchain && !a->imageCompressionControlSwapchain)
@@ -2755,6 +3395,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_subpass_merge_feedback))
+            break;
          const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *a = &supported_VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT;
          const VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT *b = (const void *) features;
          if (b->subpassMergeFeedback && !a->subpassMergeFeedback)
@@ -2763,6 +3405,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_opacity_micromap))
+            break;
          const VkPhysicalDeviceOpacityMicromapFeaturesEXT *a = &supported_VkPhysicalDeviceOpacityMicromapFeaturesEXT;
          const VkPhysicalDeviceOpacityMicromapFeaturesEXT *b = (const void *) features;
          if (b->micromap && !a->micromap)
@@ -2777,6 +3421,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_pipeline_properties))
+            break;
          const VkPhysicalDevicePipelinePropertiesFeaturesEXT *a = &supported_VkPhysicalDevicePipelinePropertiesFeaturesEXT;
          const VkPhysicalDevicePipelinePropertiesFeaturesEXT *b = (const void *) features;
          if (b->pipelinePropertiesIdentifier && !a->pipelinePropertiesIdentifier)
@@ -2785,6 +3431,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD: {
+         if (!(physical_device->supported_extensions.AMD_shader_early_and_late_fragment_tests))
+            break;
          const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD *a = &supported_VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD;
          const VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD *b = (const void *) features;
          if (b->shaderEarlyAndLateFragmentTests && !a->shaderEarlyAndLateFragmentTests)
@@ -2793,6 +3441,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_non_seamless_cube_map))
+            break;
          const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *a = &supported_VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT;
          const VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT *b = (const void *) features;
          if (b->nonSeamlessCubeMap && !a->nonSeamlessCubeMap)
@@ -2801,6 +3451,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_pipeline_robustness))
+            break;
          const VkPhysicalDevicePipelineRobustnessFeaturesEXT *a = &supported_VkPhysicalDevicePipelineRobustnessFeaturesEXT;
          const VkPhysicalDevicePipelineRobustnessFeaturesEXT *b = (const void *) features;
          if (b->pipelineRobustness && !a->pipelineRobustness)
@@ -2809,6 +3461,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM: {
+         if (!(physical_device->supported_extensions.QCOM_image_processing))
+            break;
          const VkPhysicalDeviceImageProcessingFeaturesQCOM *a = &supported_VkPhysicalDeviceImageProcessingFeaturesQCOM;
          const VkPhysicalDeviceImageProcessingFeaturesQCOM *b = (const void *) features;
          if (b->textureSampleWeighted && !a->textureSampleWeighted)
@@ -2823,6 +3477,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM: {
+         if (!(physical_device->supported_extensions.QCOM_tile_properties))
+            break;
          const VkPhysicalDeviceTilePropertiesFeaturesQCOM *a = &supported_VkPhysicalDeviceTilePropertiesFeaturesQCOM;
          const VkPhysicalDeviceTilePropertiesFeaturesQCOM *b = (const void *) features;
          if (b->tileProperties && !a->tileProperties)
@@ -2831,6 +3487,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC: {
+         if (!(physical_device->supported_extensions.SEC_amigo_profiling))
+            break;
          const VkPhysicalDeviceAmigoProfilingFeaturesSEC *a = &supported_VkPhysicalDeviceAmigoProfilingFeaturesSEC;
          const VkPhysicalDeviceAmigoProfilingFeaturesSEC *b = (const void *) features;
          if (b->amigoProfiling && !a->amigoProfiling)
@@ -2839,6 +3497,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_attachment_feedback_loop_layout))
+            break;
          const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *a = &supported_VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT;
          const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT *b = (const void *) features;
          if (b->attachmentFeedbackLoopLayout && !a->attachmentFeedbackLoopLayout)
@@ -2847,6 +3507,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_depth_clamp_zero_one))
+            break;
          const VkPhysicalDeviceDepthClampZeroOneFeaturesEXT *a = &supported_VkPhysicalDeviceDepthClampZeroOneFeaturesEXT;
          const VkPhysicalDeviceDepthClampZeroOneFeaturesEXT *b = (const void *) features;
          if (b->depthClampZeroOne && !a->depthClampZeroOne)
@@ -2855,6 +3517,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_device_address_binding_report))
+            break;
          const VkPhysicalDeviceAddressBindingReportFeaturesEXT *a = &supported_VkPhysicalDeviceAddressBindingReportFeaturesEXT;
          const VkPhysicalDeviceAddressBindingReportFeaturesEXT *b = (const void *) features;
          if (b->reportAddressBinding && !a->reportAddressBinding)
@@ -2863,6 +3527,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_optical_flow))
+            break;
          const VkPhysicalDeviceOpticalFlowFeaturesNV *a = &supported_VkPhysicalDeviceOpticalFlowFeaturesNV;
          const VkPhysicalDeviceOpticalFlowFeaturesNV *b = (const void *) features;
          if (b->opticalFlow && !a->opticalFlow)
@@ -2871,6 +3537,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FAULT_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_device_fault))
+            break;
          const VkPhysicalDeviceFaultFeaturesEXT *a = &supported_VkPhysicalDeviceFaultFeaturesEXT;
          const VkPhysicalDeviceFaultFeaturesEXT *b = (const void *) features;
          if (b->deviceFault && !a->deviceFault)
@@ -2882,6 +3550,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_pipeline_library_group_handles))
+            break;
          const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT *a = &supported_VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT;
          const VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT *b = (const void *) features;
          if (b->pipelineLibraryGroupHandles && !a->pipelineLibraryGroupHandles)
@@ -2890,6 +3560,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM: {
+         if (!(physical_device->supported_extensions.ARM_shader_core_builtins))
+            break;
          const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *a = &supported_VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM;
          const VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM *b = (const void *) features;
          if (b->shaderCoreBuiltins && !a->shaderCoreBuiltins)
@@ -2898,6 +3570,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_frame_boundary))
+            break;
          const VkPhysicalDeviceFrameBoundaryFeaturesEXT *a = &supported_VkPhysicalDeviceFrameBoundaryFeaturesEXT;
          const VkPhysicalDeviceFrameBoundaryFeaturesEXT *b = (const void *) features;
          if (b->frameBoundary && !a->frameBoundary)
@@ -2906,6 +3580,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_dynamic_rendering_unused_attachments))
+            break;
          const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *a = &supported_VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT;
          const VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT *b = (const void *) features;
          if (b->dynamicRenderingUnusedAttachments && !a->dynamicRenderingUnusedAttachments)
@@ -2914,6 +3590,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_swapchain_maintenance1))
+            break;
          const VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT *a = &supported_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT;
          const VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT *b = (const void *) features;
          if (b->swapchainMaintenance1 && !a->swapchainMaintenance1)
@@ -2922,6 +3600,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_depth_bias_control))
+            break;
          const VkPhysicalDeviceDepthBiasControlFeaturesEXT *a = &supported_VkPhysicalDeviceDepthBiasControlFeaturesEXT;
          const VkPhysicalDeviceDepthBiasControlFeaturesEXT *b = (const void *) features;
          if (b->depthBiasControl && !a->depthBiasControl)
@@ -2939,6 +3619,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_ray_tracing_invocation_reorder))
+            break;
          const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV *a = &supported_VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV;
          const VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV *b = (const void *) features;
          if (b->rayTracingInvocationReorder && !a->rayTracingInvocationReorder)
@@ -2947,6 +3629,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_extended_sparse_address_space))
+            break;
          const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV *a = &supported_VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV;
          const VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV *b = (const void *) features;
          if (b->extendedSparseAddressSpace && !a->extendedSparseAddressSpace)
@@ -2955,6 +3639,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM: {
+         if (!(physical_device->supported_extensions.QCOM_multiview_per_view_viewports))
+            break;
          const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM *a = &supported_VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM;
          const VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM *b = (const void *) features;
          if (b->multiviewPerViewViewports && !a->multiviewPerViewViewports)
@@ -2963,6 +3649,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_ray_tracing_position_fetch))
+            break;
          const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR *a = &supported_VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR;
          const VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR *b = (const void *) features;
          if (b->rayTracingPositionFetch && !a->rayTracingPositionFetch)
@@ -2971,6 +3659,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM: {
+         if (!(physical_device->supported_extensions.QCOM_multiview_per_view_render_areas))
+            break;
          const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM *a = &supported_VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM;
          const VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM *b = (const void *) features;
          if (b->multiviewPerViewRenderAreas && !a->multiviewPerViewRenderAreas)
@@ -2979,6 +3669,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_shader_object))
+            break;
          const VkPhysicalDeviceShaderObjectFeaturesEXT *a = &supported_VkPhysicalDeviceShaderObjectFeaturesEXT;
          const VkPhysicalDeviceShaderObjectFeaturesEXT *b = (const void *) features;
          if (b->shaderObject && !a->shaderObject)
@@ -2987,6 +3679,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_shader_tile_image))
+            break;
          const VkPhysicalDeviceShaderTileImageFeaturesEXT *a = &supported_VkPhysicalDeviceShaderTileImageFeaturesEXT;
          const VkPhysicalDeviceShaderTileImageFeaturesEXT *b = (const void *) features;
          if (b->shaderTileImageColorReadAccess && !a->shaderTileImageColorReadAccess)
@@ -3001,6 +3695,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_cooperative_matrix))
+            break;
          const VkPhysicalDeviceCooperativeMatrixFeaturesKHR *a = &supported_VkPhysicalDeviceCooperativeMatrixFeaturesKHR;
          const VkPhysicalDeviceCooperativeMatrixFeaturesKHR *b = (const void *) features;
          if (b->cooperativeMatrix && !a->cooperativeMatrix)
@@ -3012,6 +3708,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM: {
+         if (!(physical_device->supported_extensions.QCOM_filter_cubic_clamp))
+            break;
          const VkPhysicalDeviceCubicClampFeaturesQCOM *a = &supported_VkPhysicalDeviceCubicClampFeaturesQCOM;
          const VkPhysicalDeviceCubicClampFeaturesQCOM *b = (const void *) features;
          if (b->cubicRangeClamp && !a->cubicRangeClamp)
@@ -3020,6 +3718,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM: {
+         if (!(physical_device->supported_extensions.QCOM_ycbcr_degamma))
+            break;
          const VkPhysicalDeviceYcbcrDegammaFeaturesQCOM *a = &supported_VkPhysicalDeviceYcbcrDegammaFeaturesQCOM;
          const VkPhysicalDeviceYcbcrDegammaFeaturesQCOM *b = (const void *) features;
          if (b->ycbcrDegamma && !a->ycbcrDegamma)
@@ -3028,6 +3728,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM: {
+         if (!(physical_device->supported_extensions.QCOM_filter_cubic_weights))
+            break;
          const VkPhysicalDeviceCubicWeightsFeaturesQCOM *a = &supported_VkPhysicalDeviceCubicWeightsFeaturesQCOM;
          const VkPhysicalDeviceCubicWeightsFeaturesQCOM *b = (const void *) features;
          if (b->selectableCubicWeights && !a->selectableCubicWeights)
@@ -3036,6 +3738,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM: {
+         if (!(physical_device->supported_extensions.QCOM_image_processing2))
+            break;
          const VkPhysicalDeviceImageProcessing2FeaturesQCOM *a = &supported_VkPhysicalDeviceImageProcessing2FeaturesQCOM;
          const VkPhysicalDeviceImageProcessing2FeaturesQCOM *b = (const void *) features;
          if (b->textureBlockMatch2 && !a->textureBlockMatch2)
@@ -3044,6 +3748,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_descriptor_pool_overallocation))
+            break;
          const VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV *a = &supported_VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV;
          const VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV *b = (const void *) features;
          if (b->descriptorPoolOverallocation && !a->descriptorPoolOverallocation)
@@ -3052,6 +3758,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_per_stage_descriptor_set))
+            break;
          const VkPhysicalDevicePerStageDescriptorSetFeaturesNV *a = &supported_VkPhysicalDevicePerStageDescriptorSetFeaturesNV;
          const VkPhysicalDevicePerStageDescriptorSetFeaturesNV *b = (const void *) features;
          if (b->perStageDescriptorSet && !a->perStageDescriptorSet)
@@ -3063,6 +3771,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM: {
+         if (!(physical_device->supported_extensions.ARM_scheduling_controls))
+            break;
          const VkPhysicalDeviceSchedulingControlsFeaturesARM *a = &supported_VkPhysicalDeviceSchedulingControlsFeaturesARM;
          const VkPhysicalDeviceSchedulingControlsFeaturesARM *b = (const void *) features;
          if (b->schedulingControls && !a->schedulingControls)
@@ -3071,6 +3781,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG: {
+         if (!(physical_device->supported_extensions.IMG_relaxed_line_rasterization))
+            break;
          const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *a = &supported_VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG;
          const VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG *b = (const void *) features;
          if (b->relaxedLineRasterization && !a->relaxedLineRasterization)
@@ -3079,6 +3791,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM: {
+         if (!(physical_device->supported_extensions.ARM_render_pass_striped))
+            break;
          const VkPhysicalDeviceRenderPassStripedFeaturesARM *a = &supported_VkPhysicalDeviceRenderPassStripedFeaturesARM;
          const VkPhysicalDeviceRenderPassStripedFeaturesARM *b = (const void *) features;
          if (b->renderPassStriped && !a->renderPassStriped)
@@ -3087,6 +3801,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_shader_maximal_reconvergence))
+            break;
          const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *a = &supported_VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR;
          const VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR *b = (const void *) features;
          if (b->shaderMaximalReconvergence && !a->shaderMaximalReconvergence)
@@ -3095,6 +3811,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_shader_subgroup_rotate))
+            break;
          const VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR *a = &supported_VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR;
          const VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR *b = (const void *) features;
          if (b->shaderSubgroupRotate && !a->shaderSubgroupRotate)
@@ -3106,6 +3824,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_shader_expect_assume))
+            break;
          const VkPhysicalDeviceShaderExpectAssumeFeaturesKHR *a = &supported_VkPhysicalDeviceShaderExpectAssumeFeaturesKHR;
          const VkPhysicalDeviceShaderExpectAssumeFeaturesKHR *b = (const void *) features;
          if (b->shaderExpectAssume && !a->shaderExpectAssume)
@@ -3114,6 +3834,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_shader_float_controls2))
+            break;
          const VkPhysicalDeviceShaderFloatControls2FeaturesKHR *a = &supported_VkPhysicalDeviceShaderFloatControls2FeaturesKHR;
          const VkPhysicalDeviceShaderFloatControls2FeaturesKHR *b = (const void *) features;
          if (b->shaderFloatControls2 && !a->shaderFloatControls2)
@@ -3122,6 +3844,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_dynamic_rendering_local_read))
+            break;
          const VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR *a = &supported_VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR;
          const VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR *b = (const void *) features;
          if (b->dynamicRenderingLocalRead && !a->dynamicRenderingLocalRead)
@@ -3130,6 +3854,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR: {
+         if (!(physical_device->supported_extensions.KHR_shader_quad_control))
+            break;
          const VkPhysicalDeviceShaderQuadControlFeaturesKHR *a = &supported_VkPhysicalDeviceShaderQuadControlFeaturesKHR;
          const VkPhysicalDeviceShaderQuadControlFeaturesKHR *b = (const void *) features;
          if (b->shaderQuadControl && !a->shaderQuadControl)
@@ -3138,6 +3864,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_shader_atomic_float16_vector))
+            break;
          const VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV *a = &supported_VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV;
          const VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV *b = (const void *) features;
          if (b->shaderFloat16VectorAtomics && !a->shaderFloat16VectorAtomics)
@@ -3146,6 +3874,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_map_memory_placed))
+            break;
          const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *a = &supported_VkPhysicalDeviceMapMemoryPlacedFeaturesEXT;
          const VkPhysicalDeviceMapMemoryPlacedFeaturesEXT *b = (const void *) features;
          if (b->memoryMapPlaced && !a->memoryMapPlaced)
@@ -3160,6 +3890,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV: {
+         if (!(physical_device->supported_extensions.NV_raw_access_chains))
+            break;
          const VkPhysicalDeviceRawAccessChainsFeaturesNV *a = &supported_VkPhysicalDeviceRawAccessChainsFeaturesNV;
          const VkPhysicalDeviceRawAccessChainsFeaturesNV *b = (const void *) features;
          if (b->shaderRawAccessChains && !a->shaderRawAccessChains)
@@ -3168,6 +3900,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA: {
+         if (!(physical_device->supported_extensions.MESA_image_alignment_control))
+            break;
          const VkPhysicalDeviceImageAlignmentControlFeaturesMESA *a = &supported_VkPhysicalDeviceImageAlignmentControlFeaturesMESA;
          const VkPhysicalDeviceImageAlignmentControlFeaturesMESA *b = (const void *) features;
          if (b->imageAlignmentControl && !a->imageAlignmentControl)
@@ -3176,6 +3910,8 @@
          break;
       }
       case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT: {
+         if (!(physical_device->supported_extensions.EXT_shader_replicated_composites))
+            break;
          const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *a = &supported_VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT;
          const VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT *b = (const void *) features;
          if (b->shaderReplicatedComposites && !a->shaderReplicatedComposites)

Closes: #10177 (closed)

Closes: #11391 (closed)

/cc @eric @hakzsam @KonstantinSeurer @tshikaboom @olv @justonli

Edited by Eric Engestrom

Merge request reports