Use MVKExtensions.def to check OS version support for all Vulkan extensions.

In the interests of Single Source of Truth, OS version support is now populated
in MVKExtensions.def, and that info is used to validate each Vulkan extension
against OS version support for the functionality required by the extension, with
the default being unsupported, unless otherwise indicated in MVKExtensions.def.

- Add OS version info for each extension in MVKExtensions.def.
- mvkIsSupportedOnPlatform() checks every extension for OS version support,
  not just a separately-populated list of OS version limitations (that defaulted
  to supported, instead of unsupported).
- Visually clean up MVKExtensions.def for easier reading.
diff --git a/MoltenVK/MoltenVK/Layers/MVKExtensions.def b/MoltenVK/MoltenVK/Layers/MVKExtensions.def
index d5980e4..baf519f 100644
--- a/MoltenVK/MoltenVK/Layers/MVKExtensions.def
+++ b/MoltenVK/MoltenVK/Layers/MVKExtensions.def
@@ -16,13 +16,15 @@
  * limitations under the License.
  */
 
-// To use this file, define the macro MVK_EXTENSION(var, EXT, type), then #include this file.
+// To use this file, define the macro MVK_EXTENSION(var, EXT, type, macos, ios), then #include this file.
 // To add a new extension, simply add an MVK_EXTENSION line below. The macro takes the
 // portion of the extension name without the leading "VK_", both in lowercase and uppercase,
 // plus a value representing the extension type (instance/device/...).
 // The last line in the list must be an MVK_EXTENSION_LAST line; this is used in the MVKExtensionList
 // constructor to avoid a dangling ',' at the end of the initializer list.
 
+#define MVK_NA  kMVKOSVersionUnsupported
+
 #ifndef MVK_EXTENSION_INSTANCE
 #define MVK_EXTENSION_INSTANCE	0
 #endif
@@ -36,84 +38,85 @@
 #endif
 
 #ifndef MVK_EXTENSION_LAST
-#define MVK_EXTENSION_LAST(var, EXT, type) MVK_EXTENSION(var, EXT, type)
+#define MVK_EXTENSION_LAST(var, EXT, type, macos, ios) MVK_EXTENSION(var, EXT, type, macos, ios)
 #endif
 
-MVK_EXTENSION(KHR_16bit_storage, KHR_16BIT_STORAGE, DEVICE)
-MVK_EXTENSION(KHR_8bit_storage, KHR_8BIT_STORAGE, DEVICE)
-MVK_EXTENSION(KHR_bind_memory2, KHR_BIND_MEMORY_2, DEVICE)
-MVK_EXTENSION(KHR_create_renderpass2, KHR_CREATE_RENDERPASS_2, DEVICE)
-MVK_EXTENSION(KHR_dedicated_allocation, KHR_DEDICATED_ALLOCATION, DEVICE)
-MVK_EXTENSION(KHR_depth_stencil_resolve, KHR_DEPTH_STENCIL_RESOLVE, DEVICE)
-MVK_EXTENSION(KHR_descriptor_update_template, KHR_DESCRIPTOR_UPDATE_TEMPLATE, DEVICE)
-MVK_EXTENSION(KHR_device_group, KHR_DEVICE_GROUP, DEVICE)
-MVK_EXTENSION(KHR_device_group_creation, KHR_DEVICE_GROUP_CREATION, INSTANCE)
-MVK_EXTENSION(KHR_driver_properties, KHR_DRIVER_PROPERTIES, DEVICE)
-MVK_EXTENSION(KHR_external_fence, KHR_EXTERNAL_FENCE, DEVICE)
-MVK_EXTENSION(KHR_external_fence_capabilities, KHR_EXTERNAL_FENCE_CAPABILITIES, INSTANCE)
-MVK_EXTENSION(KHR_external_memory, KHR_EXTERNAL_MEMORY, DEVICE)
-MVK_EXTENSION(KHR_external_memory_capabilities, KHR_EXTERNAL_MEMORY_CAPABILITIES, INSTANCE)
-MVK_EXTENSION(KHR_external_semaphore, KHR_EXTERNAL_SEMAPHORE, DEVICE)
-MVK_EXTENSION(KHR_external_semaphore_capabilities, KHR_EXTERNAL_SEMAPHORE_CAPABILITIES, INSTANCE)
-MVK_EXTENSION(KHR_get_memory_requirements2, KHR_GET_MEMORY_REQUIREMENTS_2, DEVICE)
-MVK_EXTENSION(KHR_get_physical_device_properties2, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2, INSTANCE)
-MVK_EXTENSION(KHR_get_surface_capabilities2, KHR_GET_SURFACE_CAPABILITIES_2, INSTANCE)
-MVK_EXTENSION(KHR_imageless_framebuffer, KHR_IMAGELESS_FRAMEBUFFER, DEVICE)
-MVK_EXTENSION(KHR_image_format_list, KHR_IMAGE_FORMAT_LIST, DEVICE)
-MVK_EXTENSION(KHR_maintenance1, KHR_MAINTENANCE1, DEVICE)
-MVK_EXTENSION(KHR_maintenance2, KHR_MAINTENANCE2, DEVICE)
-MVK_EXTENSION(KHR_maintenance3, KHR_MAINTENANCE3, DEVICE)
-MVK_EXTENSION(KHR_multiview, KHR_MULTIVIEW, DEVICE)
-MVK_EXTENSION(KHR_portability_subset, KHR_PORTABILITY_SUBSET, DEVICE)
-MVK_EXTENSION(KHR_push_descriptor, KHR_PUSH_DESCRIPTOR, DEVICE)
-MVK_EXTENSION(KHR_relaxed_block_layout, KHR_RELAXED_BLOCK_LAYOUT, DEVICE)
-MVK_EXTENSION(KHR_sampler_mirror_clamp_to_edge, KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE, DEVICE)
-MVK_EXTENSION(KHR_sampler_ycbcr_conversion, KHR_SAMPLER_YCBCR_CONVERSION, DEVICE)
-MVK_EXTENSION(KHR_shader_draw_parameters, KHR_SHADER_DRAW_PARAMETERS, DEVICE)
-MVK_EXTENSION(KHR_shader_float16_int8, KHR_SHADER_FLOAT16_INT8, DEVICE)
-MVK_EXTENSION(KHR_shader_subgroup_extended_types, KHR_SHADER_SUBGROUP_EXTENDED_TYPES, DEVICE)
-MVK_EXTENSION(KHR_storage_buffer_storage_class, KHR_STORAGE_BUFFER_STORAGE_CLASS, DEVICE)
-MVK_EXTENSION(KHR_surface, KHR_SURFACE, INSTANCE)
-MVK_EXTENSION(KHR_swapchain, KHR_SWAPCHAIN, DEVICE)
-MVK_EXTENSION(KHR_swapchain_mutable_format, KHR_SWAPCHAIN_MUTABLE_FORMAT, DEVICE)
-MVK_EXTENSION(KHR_timeline_semaphore, KHR_TIMELINE_SEMAPHORE, DEVICE)
-MVK_EXTENSION(KHR_uniform_buffer_standard_layout, KHR_UNIFORM_BUFFER_STANDARD_LAYOUT, DEVICE)
-MVK_EXTENSION(KHR_variable_pointers, KHR_VARIABLE_POINTERS, DEVICE)
-MVK_EXTENSION(EXT_debug_marker, EXT_DEBUG_MARKER, DEVICE)
-MVK_EXTENSION(EXT_debug_report, EXT_DEBUG_REPORT, INSTANCE)
-MVK_EXTENSION(EXT_debug_utils, EXT_DEBUG_UTILS, INSTANCE)
-MVK_EXTENSION(EXT_descriptor_indexing, EXT_DESCRIPTOR_INDEXING, DEVICE)
-MVK_EXTENSION(EXT_fragment_shader_interlock, EXT_FRAGMENT_SHADER_INTERLOCK, DEVICE)
-MVK_EXTENSION(EXT_hdr_metadata, EXT_HDR_METADATA, DEVICE)
-MVK_EXTENSION(EXT_host_query_reset, EXT_HOST_QUERY_RESET, DEVICE)
-MVK_EXTENSION(EXT_image_robustness, EXT_IMAGE_ROBUSTNESS, DEVICE)
-MVK_EXTENSION(EXT_inline_uniform_block, EXT_INLINE_UNIFORM_BLOCK, DEVICE)
-MVK_EXTENSION(EXT_memory_budget, EXT_MEMORY_BUDGET, DEVICE)
-MVK_EXTENSION(EXT_metal_surface, EXT_METAL_SURFACE, INSTANCE)
-MVK_EXTENSION(EXT_post_depth_coverage, EXT_POST_DEPTH_COVERAGE, DEVICE)
-MVK_EXTENSION(EXT_private_data, EXT_PRIVATE_DATA, DEVICE)
-MVK_EXTENSION(EXT_robustness2, EXT_ROBUSTNESS_2, DEVICE)
-MVK_EXTENSION(EXT_scalar_block_layout, EXT_SCALAR_BLOCK_LAYOUT, DEVICE)
-MVK_EXTENSION(EXT_shader_stencil_export, EXT_SHADER_STENCIL_EXPORT, DEVICE)
-MVK_EXTENSION(EXT_shader_viewport_index_layer, EXT_SHADER_VIEWPORT_INDEX_LAYER, DEVICE)
-MVK_EXTENSION(EXT_subgroup_size_control, EXT_SUBGROUP_SIZE_CONTROL, DEVICE)
-MVK_EXTENSION(EXT_swapchain_colorspace, EXT_SWAPCHAIN_COLOR_SPACE, INSTANCE)
-MVK_EXTENSION(EXT_texel_buffer_alignment, EXT_TEXEL_BUFFER_ALIGNMENT, DEVICE)
-MVK_EXTENSION(EXT_texture_compression_astc_hdr, EXT_TEXTURE_COMPRESSION_ASTC_HDR, DEVICE)
-MVK_EXTENSION(EXT_vertex_attribute_divisor, EXT_VERTEX_ATTRIBUTE_DIVISOR, DEVICE)
-MVK_EXTENSION(AMD_gpu_shader_half_float, AMD_GPU_SHADER_HALF_FLOAT, DEVICE)
-MVK_EXTENSION(AMD_negative_viewport_height, AMD_NEGATIVE_VIEWPORT_HEIGHT, DEVICE)
-MVK_EXTENSION(AMD_shader_image_load_store_lod, AMD_SHADER_IMAGE_LOAD_STORE_LOD, DEVICE)
-MVK_EXTENSION(AMD_shader_trinary_minmax, AMD_SHADER_TRINARY_MINMAX, DEVICE)
-MVK_EXTENSION(IMG_format_pvrtc, IMG_FORMAT_PVRTC, DEVICE)
-MVK_EXTENSION(INTEL_shader_integer_functions2, INTEL_SHADER_INTEGER_FUNCTIONS_2, DEVICE)
-MVK_EXTENSION(GOOGLE_display_timing, GOOGLE_DISPLAY_TIMING, DEVICE)
-MVK_EXTENSION(MVK_ios_surface, MVK_IOS_SURFACE, INSTANCE)
-MVK_EXTENSION(MVK_macos_surface, MVK_MACOS_SURFACE, INSTANCE)
-MVK_EXTENSION(MVK_moltenvk, MVK_MOLTENVK, INSTANCE)
-MVK_EXTENSION_LAST(NV_glsl_shader, NV_GLSL_SHADER, DEVICE)
+MVK_EXTENSION(KHR_16bit_storage,                   KHR_16BIT_STORAGE,                    DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_8bit_storage,                    KHR_8BIT_STORAGE,                     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_bind_memory2,                    KHR_BIND_MEMORY_2,                    DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_create_renderpass2,              KHR_CREATE_RENDERPASS_2,              DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_dedicated_allocation,            KHR_DEDICATED_ALLOCATION,             DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_depth_stencil_resolve,           KHR_DEPTH_STENCIL_RESOLVE,            DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_descriptor_update_template,      KHR_DESCRIPTOR_UPDATE_TEMPLATE,       DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_device_group,                    KHR_DEVICE_GROUP,                     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_device_group_creation,           KHR_DEVICE_GROUP_CREATION,            INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(KHR_driver_properties,               KHR_DRIVER_PROPERTIES,                DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_external_fence,                  KHR_EXTERNAL_FENCE,                   DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_external_fence_capabilities,     KHR_EXTERNAL_FENCE_CAPABILITIES,      INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(KHR_external_memory,                 KHR_EXTERNAL_MEMORY,                  DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_external_memory_capabilities,    KHR_EXTERNAL_MEMORY_CAPABILITIES,     INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(KHR_external_semaphore,              KHR_EXTERNAL_SEMAPHORE,               DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_external_semaphore_capabilities, KHR_EXTERNAL_SEMAPHORE_CAPABILITIES,  INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(KHR_get_memory_requirements2,        KHR_GET_MEMORY_REQUIREMENTS_2,        DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_get_physical_device_properties2, KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2, INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(KHR_get_surface_capabilities2,       KHR_GET_SURFACE_CAPABILITIES_2,       INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(KHR_imageless_framebuffer,           KHR_IMAGELESS_FRAMEBUFFER,            DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_image_format_list,               KHR_IMAGE_FORMAT_LIST,                DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_maintenance1,                    KHR_MAINTENANCE1,                     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_maintenance2,                    KHR_MAINTENANCE2,                     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_maintenance3,                    KHR_MAINTENANCE3,                     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_multiview,                       KHR_MULTIVIEW,                        DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_portability_subset,              KHR_PORTABILITY_SUBSET,               DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_push_descriptor,                 KHR_PUSH_DESCRIPTOR,                  DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_relaxed_block_layout,            KHR_RELAXED_BLOCK_LAYOUT,             DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_sampler_mirror_clamp_to_edge,    KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE,     DEVICE,   10.11, 14.0)
+MVK_EXTENSION(KHR_sampler_ycbcr_conversion,        KHR_SAMPLER_YCBCR_CONVERSION,         DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_shader_draw_parameters,          KHR_SHADER_DRAW_PARAMETERS,           DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_shader_float16_int8,             KHR_SHADER_FLOAT16_INT8,              DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_shader_subgroup_extended_types,  KHR_SHADER_SUBGROUP_EXTENDED_TYPES,   DEVICE,   10.14, 13.0)
+MVK_EXTENSION(KHR_storage_buffer_storage_class,    KHR_STORAGE_BUFFER_STORAGE_CLASS,     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_surface,                         KHR_SURFACE,                          INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(KHR_swapchain,                       KHR_SWAPCHAIN,                        DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_swapchain_mutable_format,        KHR_SWAPCHAIN_MUTABLE_FORMAT,         DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_timeline_semaphore,              KHR_TIMELINE_SEMAPHORE,               DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_uniform_buffer_standard_layout,  KHR_UNIFORM_BUFFER_STANDARD_LAYOUT,   DEVICE,   10.11,  8.0)
+MVK_EXTENSION(KHR_variable_pointers,               KHR_VARIABLE_POINTERS,                DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_debug_marker,                    EXT_DEBUG_MARKER,                     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_debug_report,                    EXT_DEBUG_REPORT,                     INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(EXT_debug_utils,                     EXT_DEBUG_UTILS,                      INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(EXT_descriptor_indexing,             EXT_DESCRIPTOR_INDEXING,              DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_fragment_shader_interlock,       EXT_FRAGMENT_SHADER_INTERLOCK,        DEVICE,   10.13, 11.0)
+MVK_EXTENSION(EXT_hdr_metadata,                    EXT_HDR_METADATA,                     DEVICE,   10.15, MVK_NA)
+MVK_EXTENSION(EXT_host_query_reset,                EXT_HOST_QUERY_RESET,                 DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_image_robustness,                EXT_IMAGE_ROBUSTNESS,                 DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_inline_uniform_block,            EXT_INLINE_UNIFORM_BLOCK,             DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_memory_budget,                   EXT_MEMORY_BUDGET,                    DEVICE,   10.13, 11.0)
+MVK_EXTENSION(EXT_metal_surface,                   EXT_METAL_SURFACE,                    INSTANCE, 10.11,  8.0)
+MVK_EXTENSION(EXT_post_depth_coverage,             EXT_POST_DEPTH_COVERAGE,              DEVICE,   11.0,  11.0)
+MVK_EXTENSION(EXT_private_data,                    EXT_PRIVATE_DATA,                     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_robustness2,                     EXT_ROBUSTNESS_2,                     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_scalar_block_layout,             EXT_SCALAR_BLOCK_LAYOUT,              DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_shader_stencil_export,           EXT_SHADER_STENCIL_EXPORT,            DEVICE,   10.14, 12.0)
+MVK_EXTENSION(EXT_shader_viewport_index_layer,     EXT_SHADER_VIEWPORT_INDEX_LAYER,      DEVICE,   10.11,  8.0)
+MVK_EXTENSION(EXT_subgroup_size_control,           EXT_SUBGROUP_SIZE_CONTROL,            DEVICE,   10.14, 13.0)
+MVK_EXTENSION(EXT_swapchain_colorspace,            EXT_SWAPCHAIN_COLOR_SPACE,            INSTANCE, 10.11,  9.0)
+MVK_EXTENSION(EXT_texel_buffer_alignment,          EXT_TEXEL_BUFFER_ALIGNMENT,           DEVICE,   10.13, 11.0)
+MVK_EXTENSION(EXT_texture_compression_astc_hdr,    EXT_TEXTURE_COMPRESSION_ASTC_HDR,     DEVICE,   11.0,  13.0)
+MVK_EXTENSION(EXT_vertex_attribute_divisor,        EXT_VERTEX_ATTRIBUTE_DIVISOR,         DEVICE,   10.11,  8.0)
+MVK_EXTENSION(AMD_gpu_shader_half_float,           AMD_GPU_SHADER_HALF_FLOAT,            DEVICE,   10.11,  8.0)
+MVK_EXTENSION(AMD_negative_viewport_height,        AMD_NEGATIVE_VIEWPORT_HEIGHT,         DEVICE,   10.11,  8.0)
+MVK_EXTENSION(AMD_shader_image_load_store_lod,     AMD_SHADER_IMAGE_LOAD_STORE_LOD,      DEVICE,   11.0,   8.0)
+MVK_EXTENSION(AMD_shader_trinary_minmax,           AMD_SHADER_TRINARY_MINMAX,            DEVICE,   10.14, 12.0)
+MVK_EXTENSION(IMG_format_pvrtc,                    IMG_FORMAT_PVRTC,                     DEVICE,   11.0,   8.0)
+MVK_EXTENSION(INTEL_shader_integer_functions2,     INTEL_SHADER_INTEGER_FUNCTIONS_2,     DEVICE,   10.11,  8.0)
+MVK_EXTENSION(GOOGLE_display_timing,               GOOGLE_DISPLAY_TIMING,                DEVICE,   10.11,  8.0)
+MVK_EXTENSION(MVK_ios_surface,                     MVK_IOS_SURFACE,                      INSTANCE, MVK_NA, 8.0)
+MVK_EXTENSION(MVK_macos_surface,                   MVK_MACOS_SURFACE,                    INSTANCE, 10.11, MVK_NA)
+MVK_EXTENSION(MVK_moltenvk,                        MVK_MOLTENVK,                         INSTANCE, 10.11,  8.0)
+MVK_EXTENSION_LAST(NV_glsl_shader,                 NV_GLSL_SHADER,                       DEVICE,   10.11,  8.0)
 
 #undef MVK_EXTENSION
 #undef MVK_EXTENSION_LAST
 #undef MVK_EXTENSION_INSTANCE
 #undef MVK_EXTENSION_DEVICE
+#undef MVK_NA
diff --git a/MoltenVK/MoltenVK/Layers/MVKExtensions.h b/MoltenVK/MoltenVK/Layers/MVKExtensions.h
index 3b4d884..5ec5153 100644
--- a/MoltenVK/MoltenVK/Layers/MVKExtensions.h
+++ b/MoltenVK/MoltenVK/Layers/MVKExtensions.h
@@ -52,7 +52,7 @@
 
 	union {
 		struct {
-#define MVK_EXTENSION(var, EXT, type) MVKExtension vk_ ##var;
+#define MVK_EXTENSION(var, EXT, type, macos, ios) MVKExtension vk_ ##var;
 #include "MVKExtensions.def"
 		};
 		MVKExtension extensionArray;
diff --git a/MoltenVK/MoltenVK/Layers/MVKExtensions.mm b/MoltenVK/MoltenVK/Layers/MVKExtensions.mm
index 8866c93..834f96b 100644
--- a/MoltenVK/MoltenVK/Layers/MVKExtensions.mm
+++ b/MoltenVK/MoltenVK/Layers/MVKExtensions.mm
@@ -39,13 +39,12 @@
 }
 
 // Extension properties
-#define MVK_EXTENSION(var, EXT, type) \
+#define MVK_EXTENSION(var, EXT, type, macos, ios) \
 static VkExtensionProperties kVkExtProps_ ##EXT = mvkMakeExtProps(VK_ ##EXT ##_EXTENSION_NAME, VK_ ##EXT ##_SPEC_VERSION);
 #include "MVKExtensions.def"
 
 // Returns whether the specified properties are valid for this platform
 static bool mvkIsSupportedOnPlatform(VkExtensionProperties* pProperties) {
-#define MVK_NA  kMVKOSVersionUnsupported
 #define MVK_EXTENSION_MIN_OS(EXT, MAC, IOS) \
 	if (pProperties == &kVkExtProps_##EXT) { return mvkOSVersionIsAtLeast(MAC, IOS); }
 
@@ -53,6 +52,7 @@
 	// only advertise those supported extensions that have been specifically configured.
 	auto advExtns = mvkConfig().advertiseExtensions;
 	if ( !mvkIsAnyFlagEnabled(advExtns, MVK_CONFIG_ADVERTISE_EXTENSIONS_ALL) ) {
+#define MVK_NA  kMVKOSVersionUnsupported
 		if (mvkIsAnyFlagEnabled(advExtns, MVK_CONFIG_ADVERTISE_EXTENSIONS_MOLTENVK)) {
 			MVK_EXTENSION_MIN_OS(MVK_MOLTENVK,                         10.11,  8.0)
 		}
@@ -67,32 +67,17 @@
 			MVK_EXTENSION_MIN_OS(KHR_PORTABILITY_SUBSET,               10.11,  8.0)
 			MVK_EXTENSION_MIN_OS(KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2, 10.11,  8.0)
 		}
+#undef MVK_NA
 
 		return false;
 	}
 
-	MVK_EXTENSION_MIN_OS(MVK_IOS_SURFACE,                    MVK_NA, 8.0)
-	MVK_EXTENSION_MIN_OS(MVK_MACOS_SURFACE,                  10.11,  MVK_NA)
-
-	MVK_EXTENSION_MIN_OS(EXT_HDR_METADATA,                   10.15,  MVK_NA)
-	MVK_EXTENSION_MIN_OS(AMD_SHADER_IMAGE_LOAD_STORE_LOD,    10.16,  8.0)
-	MVK_EXTENSION_MIN_OS(IMG_FORMAT_PVRTC,                   10.16,  8.0)
-	MVK_EXTENSION_MIN_OS(KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE,   10.11,  14.0)
-	MVK_EXTENSION_MIN_OS(EXT_SWAPCHAIN_COLOR_SPACE,          10.11,  9.0)
-	MVK_EXTENSION_MIN_OS(KHR_SHADER_SUBGROUP_EXTENDED_TYPES, 10.14,  13.0)
-	MVK_EXTENSION_MIN_OS(EXT_FRAGMENT_SHADER_INTERLOCK,      10.13,  11.0)
-	MVK_EXTENSION_MIN_OS(EXT_MEMORY_BUDGET,                  10.13,  11.0)
-	MVK_EXTENSION_MIN_OS(EXT_POST_DEPTH_COVERAGE,            10.16,  11.0)
-	MVK_EXTENSION_MIN_OS(EXT_SHADER_STENCIL_EXPORT,          10.14,  12.0)
-	MVK_EXTENSION_MIN_OS(EXT_SUBGROUP_SIZE_CONTROL,          10.14,  13.0)
-	MVK_EXTENSION_MIN_OS(EXT_TEXEL_BUFFER_ALIGNMENT,         10.13,  11.0)
-	MVK_EXTENSION_MIN_OS(EXT_TEXTURE_COMPRESSION_ASTC_HDR,   10.16,  13.0)
-	MVK_EXTENSION_MIN_OS(AMD_SHADER_TRINARY_MINMAX,          10.14,  12.0)
-
-	return true;
-
-#undef MVK_NA
+	// Otherwise, emumerate all available extensions to match the extension being validated for OS support.
+#define MVK_EXTENSION(var, EXT, type, macos, ios)  MVK_EXTENSION_MIN_OS(EXT, macos, ios)
+#include "MVKExtensions.def"
 #undef MVK_EXTENSION_MIN_OS
+
+	return false;
 }
 
 // Disable by default unless asked to enable for platform and the extension is valid for this platform
@@ -106,8 +91,8 @@
 #pragma mark MVKExtensionList
 
 MVKExtensionList::MVKExtensionList(MVKVulkanAPIObject* apiObject, bool enableForPlatform) : _apiObject(apiObject),
-#define MVK_EXTENSION_LAST(var, EXT, type)		vk_ ##var(&kVkExtProps_ ##EXT, enableForPlatform)
-#define MVK_EXTENSION(var, EXT, type)			MVK_EXTENSION_LAST(var, EXT, type),
+#define MVK_EXTENSION_LAST(var, EXT, type, macos, ios)		vk_ ##var(&kVkExtProps_ ##EXT, enableForPlatform)
+#define MVK_EXTENSION(var, EXT, type, macos, ios)			MVK_EXTENSION_LAST(var, EXT, type, macos, ios),
 #include "MVKExtensions.def"
 {
 	initCount();
@@ -118,7 +103,7 @@
 void MVKExtensionList::initCount() {
 	_count = 0;
 
-#define MVK_EXTENSION(var, EXT, type) _count++;
+#define MVK_EXTENSION(var, EXT, type, macos, ios) _count++;
 #include "MVKExtensions.def"
 }
 
@@ -127,14 +112,14 @@
 void MVKExtensionList::disableAllButEnabledInstanceExtensions() {
 #define MVK_EXTENSION_INSTANCE         true
 #define MVK_EXTENSION_DEVICE           false
-#define MVK_EXTENSION(var, EXT, type)  MVK_ENSURE_EXTENSION_TYPE(var, EXT, type)
+#define MVK_EXTENSION(var, EXT, type, macos, ios)  MVK_ENSURE_EXTENSION_TYPE(var, EXT, type)
 #include "MVKExtensions.def"
 }
 
 void MVKExtensionList::disableAllButEnabledDeviceExtensions() {
 #define MVK_EXTENSION_INSTANCE         false
 #define MVK_EXTENSION_DEVICE           true
-#define MVK_EXTENSION(var, EXT, type)  MVK_ENSURE_EXTENSION_TYPE(var, EXT, type)
+#define MVK_EXTENSION(var, EXT, type, macos, ios)  MVK_ENSURE_EXTENSION_TYPE(var, EXT, type)
 #include "MVKExtensions.def"
 }