Merge vk-gl-cts/vulkan-cts-1.1.5 into vk-gl-cts/master
authorAlexander Galazin <alexander.galazin@arm.com>
Wed, 9 Oct 2019 08:22:19 +0000 (10:22 +0200)
committerAlexander Galazin <alexander.galazin@arm.com>
Wed, 9 Oct 2019 17:13:29 +0000 (19:13 +0200)
Change-Id: I3a4370f43b25316f8cf4abf013eb08d0831dca91

38 files changed:
1  2 
AndroidGen.mk
android/cts/master/vk-master.txt
external/fetch_sources.py
external/vulkancts/framework/vulkan/vkBasicTypes.inl
external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
external/vulkancts/framework/vulkan/vkDeviceFeatures.inl
external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl
external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl
external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl
external/vulkancts/framework/vulkan/vkExtensionFunctions.inl
external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl
external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl
external/vulkancts/framework/vulkan/vkImageUtil.cpp
external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl
external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
external/vulkancts/framework/vulkan/vkRefUtil.cpp
external/vulkancts/framework/vulkan/vkRefUtil.hpp
external/vulkancts/framework/vulkan/vkStrUtil.inl
external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
external/vulkancts/framework/vulkan/vkStructTypes.inl
external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl
external/vulkancts/framework/vulkan/vkVulkan_c.inl
external/vulkancts/modules/vulkan/api/vktApiDriverPropertiesTests.cpp
external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp
external/vulkancts/modules/vulkan/image/vktImageCompressionTranscodingSupport.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSmokeTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationUtil.hpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationWin32KeyedMutexTests.cpp
external/vulkancts/modules/vulkan/vktTestPackage.cpp
external/vulkancts/mustpass/master/vk-default-no-waivers.txt
external/vulkancts/mustpass/master/vk-default.txt
external/vulkancts/scripts/src/vulkan_core.h

diff --cc AndroidGen.mk
Simple merge
Simple merge
@@@ -316,7 -316,7 +316,7 @@@ PACKAGES = 
        GitRepo(
                "https://github.com/KhronosGroup/SPIRV-Tools.git",
                None,
-               "3c7ff8d4f0a1c0f27328871fe64879170a4f0930",
 -              "2c0111e6eba779cf30e8c7f5a733ea0762895ba0",
++              "bd839ca6b5706388049fb044c27323a8b46c17f6",
                "spirv-tools"),
        GitRepo(
                "https://github.com/KhronosGroup/glslang.git",
@@@ -424,13 -420,13 +425,19 @@@ enum VkStructureTyp
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV                                         = 1000205002,
        VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV                                                                                            = 1000206000,
        VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV                                                         = 1000206001,
 -      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS2_FEATURES_INTEL                      = 1000209000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR                                       = 1000207000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR                                     = 1000207001,
+       VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR                                                                        = 1000207002,
+       VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR                                                            = 1000207003,
+       VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR                                                                                       = 1000207004,
+       VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR                                                                                     = 1000207005,
 +      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL                     = 1000209000,
 +      VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL                                                                          = 1000210000,
 +      VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL                                                         = 1000210001,
 +      VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL                                                                         = 1000210002,
 +      VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL                                                          = 1000210003,
 +      VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL                                                                       = 1000210004,
 +      VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL                                          = 1000210005,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR                                      = 1000211000,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT                                           = 1000212000,
        VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD                                           = 1000213000,
@@@ -2924,8 -2814,8 +2947,9 @@@ VK_DEFINE_PLATFORM_TYPE(CAMetalLayer
  #define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1
  #define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1
  #define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1
 +#define VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION 1
  #define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1
+ #define VK_KHR_SHADER_CLOCK_SPEC_VERSION 1
  #define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 1
  #define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1
  #define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2
  
  namespace vk
  {
 -#define DECL_PROTECTED_MEMORY_EXTENSION_NAME "not_existent_feature"
 -#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters"
 -#define VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME "VK_EXT_transform_feedback"
 -#define VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME "VK_NV_corner_sampled_image"
 +#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
 +#define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage"
 +#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
 +#define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address"
 +#define DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME "not_existent_feature"
 +#define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives"
  #define VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME "VK_EXT_conditional_rendering"
 -#define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8"
 +#define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix"
 +#define VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME "VK_NV_corner_sampled_image"
 +#define VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME "VK_NV_coverage_reduction_mode"
 +#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing"
  #define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable"
 +#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing"
 +#define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive"
 +#define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map"
 +#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric"
 +#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock"
 +#define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset"
  #define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer"
 +#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8"
  #define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block"
 -#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
 -#define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing"
 -#define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image"
 +#define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization"
 +#define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority"
 +#define VK_NV_MESH_SHADER_EXTENSION_NAME  "VK_NV_mesh_shader"
 +#define VK_KHR_MULTIVIEW_EXTENSION_NAME   "VK_KHR_multiview"
 +#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties"
 +#define DECL_PROTECTED_MEMORY_EXTENSION_NAME "not_existent_feature"
  #define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME "VK_NV_representative_fragment_test"
 -#define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage"
 +#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion"
 +#define VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "VK_EXT_scalar_block_layout"
  #define VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME "VK_KHR_shader_atomic_int64"
 -#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
 -#define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives"
 -#define VK_NV_MESH_SHADER_EXTENSION_NAME  "VK_NV_mesh_shader"
 -#define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric"
+ #define VK_KHR_SHADER_CLOCK_EXTENSION_NAME    "VK_KHR_shader_clock"
 +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation"
 +#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters"
 +#define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8"
  #define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint"
 -#define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive"
 +#define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2"
 +#define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types"
 +#define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image"
 +#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
 +#define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment"
+ #define VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME "VK_KHR_timeline_semaphore"
 -#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model"
 -#define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map"
 -#define VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "VK_EXT_scalar_block_layout"
 -#define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority"
 -#define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing"
 -#define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address"
 -#define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix"
 -#define VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME "VK_NV_coverage_reduction_mode"
 -#define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock"
 -#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays"
 +#define VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME "VK_EXT_transform_feedback"
  #define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout"
 -#define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset"
 -#define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8"
 -#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation"
 -#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties"
 -#define VK_KHR_MULTIVIEW_EXTENSION_NAME   "VK_KHR_multiview"
 -#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
  #define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers"
 -#define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion"
 +#define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor"
 +#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model"
 +#define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays"
  
  
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 46); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 45); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 44); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 43); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoherentMemoryFeaturesAMD>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0, 42); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, 41); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceConditionalRenderingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 40); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCooperativeMatrixFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 39); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCornerSampledImageFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION, 38); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoverageReductionModeFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION, 37); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION, 36); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 35); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 34); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExclusiveScissorFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 33); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 32); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION, 31); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 30); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, 29); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 28); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 27); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 26); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLineRasterizationFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 25); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMemoryPriorityFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 24); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMeshShaderFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 23); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 22); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION, 21); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 20); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION, 19); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION, 18); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 42); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, 41); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTransformFeedbackFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION, 40); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCornerSampledImageFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION, 39); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceConditionalRenderingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 38); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFloat16Int8FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 37); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 36); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 35); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 34); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 33); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 32); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShadingRateImageFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION, 31); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION, 30); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 29); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION, 28); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderClockFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION, 27); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION, 26); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, 25); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMeshShaderFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 24); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION, 23); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageFootprintFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION, 22); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExclusiveScissorFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 21); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTimelineSemaphoreFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION, 20); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION, 19); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 18); }
--template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION, 17); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION, 16); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 15); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, 14); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderFloat16Int8FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 13); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageFootprintFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION, 12); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION, 11); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION, 10); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShadingRateImageFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION, 9); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 8); }
- template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION, 7); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMemoryPriorityFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 16); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION, 15); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 14); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCooperativeMatrixFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 13); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoverageReductionModeFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION, 12); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 11); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION, 10); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION, 9); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, 8); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 7); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 6); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION, 5); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 4); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 3); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVariablePointersFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR, VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, VK_KHR_VARIABLE_POINTERS_SPEC_VERSION, 2); }
 -template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION, 1); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 48); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 47); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 46); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 45); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoherentMemoryFeaturesAMD>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0, 44); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, 43); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceConditionalRenderingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 42); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCooperativeMatrixFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 41); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCornerSampledImageFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION, 40); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoverageReductionModeFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION, 39); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION, 38); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 37); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 36); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExclusiveScissorFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 35); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 34); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION, 33); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 32); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, 31); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 30); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 29); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 28); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLineRasterizationFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 27); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMemoryPriorityFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 26); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMeshShaderFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 25); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 24); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION, 23); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 22); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION, 21); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION, 20); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION, 19); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION, 18); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderClockFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION, 17); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 16); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, 15); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderFloat16Int8FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 14); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageFootprintFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION, 13); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION, 12); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION, 11); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShadingRateImageFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION, 10); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 9); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION, 8); }
++template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTimelineSemaphoreFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR, VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION, 7); }
 +template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTransformFeedbackFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION, 6); }
 +template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION, 5); }
 +template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVariablePointersFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, VK_KHR_VARIABLE_POINTERS_SPEC_VERSION, 4); }
 +template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION, 3); }
 +template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION, 2); }
 +template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION, 1); }
  
  
  static const FeatureStructMapItem featureStructCreatorMap[] =
  {
 -      { createFeatureStructWrapper<VkPhysicalDeviceProtectedMemoryFeatures>, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0 },
 -      { createFeatureStructWrapper<VkPhysicalDeviceShaderDrawParametersFeatures>, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceTransformFeedbackFeaturesEXT>, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceCornerSampledImageFeaturesNV>, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDevice16BitStorageFeatures>, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDevice8BitStorageFeaturesKHR>, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceCoherentMemoryFeaturesAMD>, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0 },
 +      { createFeatureStructWrapper<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceConditionalRenderingFeaturesEXT>, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceFloat16Int8FeaturesKHR>, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceCooperativeMatrixFeaturesNV>, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceCornerSampledImageFeaturesNV>, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceCoverageReductionModeFeaturesNV>, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceDepthClipEnableFeaturesEXT>, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceExclusiveScissorFeaturesNV>, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceHostQueryResetFeaturesEXT>, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceImagelessFramebufferFeaturesKHR>, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceShadingRateImageFeaturesNV>, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceLineRasterizationFeaturesEXT>, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceMemoryPriorityFeaturesEXT>, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceMeshShaderFeaturesNV>, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceMultiviewFeatures>, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceProtectedMemoryFeatures>, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0 },
        { createFeatureStructWrapper<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDevice8BitStorageFeaturesKHR>, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceSamplerYcbcrConversionFeatures>, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT>, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceShaderAtomicInt64FeaturesKHR>, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceMeshShaderFeaturesNV>, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderClockFeaturesKHR>, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceShaderDrawParametersFeatures>, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceShaderFloat16Int8FeaturesKHR>, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceShaderImageFootprintFeaturesNV>, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceExclusiveScissorFeaturesNV>, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR>, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceShadingRateImageFeaturesNV>, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>, VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME, VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceTimelineSemaphoreFeaturesKHR>, VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR>, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT>, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceMemoryPriorityFeaturesEXT>, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceCooperativeMatrixFeaturesNV>, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceCoverageReductionModeFeaturesNV>, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceTransformFeedbackFeaturesEXT>, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR>, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceHostQueryResetFeaturesEXT>, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceMultiviewFeatures>, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDevice16BitStorageFeatures>, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceVariablePointersFeatures>, VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, VK_KHR_VARIABLE_POINTERS_SPEC_VERSION },
 -      { createFeatureStructWrapper<VkPhysicalDeviceSamplerYcbcrConversionFeatures>, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR>, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION },
 +      { createFeatureStructWrapper<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION },
  };
  } // vk
  
@@@ -1,49 -1,45 +1,51 @@@
  /* WARNING: This is auto-generated file. Do not modify, since changes will
   * be lost! Modify the generating script instead.
   */
 -const vk::VkPhysicalDeviceProtectedMemoryFeatures&                                            getProtectedMemoryFeatures                                      (void) const;
 -const vk::VkPhysicalDeviceShaderDrawParametersFeatures&                                       getShaderDrawParametersFeatures                         (void) const;
 -const vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT&                                       getTransformFeedbackFeatures                            (void) const;
 -const vk::VkPhysicalDeviceCornerSampledImageFeaturesNV&                                       getCornerSampledImageFeatures                           (void) const;
 +const vk::VkPhysicalDevice16BitStorageFeatures&                                                       get16BitStorageFeatures                                         (void) const;
 +const vk::VkPhysicalDevice8BitStorageFeaturesKHR&                                             get8BitStorageFeatures                                          (void) const;
 +const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                  getBlendOperationAdvancedFeatures                       (void) const;
 +const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&                             getBufferDeviceAddressFeatures                          (void) const;
 +const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&                                  getCoherentMemoryFeaturesAMD                            (void) const;
 +const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&                 getComputeShaderDerivativesFeatures                     (void) const;
  const vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT&                            getConditionalRenderingFeatures                         (void) const;
 -const vk::VkPhysicalDeviceFloat16Int8FeaturesKHR&                                             getFloat16Int8Features                                          (void) const;
 +const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&                                        getCooperativeMatrixFeatures                            (void) const;
 +const vk::VkPhysicalDeviceCornerSampledImageFeaturesNV&                                       getCornerSampledImageFeatures                           (void) const;
 +const vk::VkPhysicalDeviceCoverageReductionModeFeaturesNV&                            getCoverageReductionModeFeatures                        (void) const;
 +const vk::VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV& getDedicatedAllocationImageAliasingFeatures     (void) const;
  const vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT&                                 getDepthClipEnableFeatures                                      (void) const;
 +const vk::VkPhysicalDeviceDescriptorIndexingFeaturesEXT&                              getDescriptorIndexingFeatures                           (void) const;
 +const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&                                 getExclusiveScissorFeatures                                     (void) const;
 +const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&                              getFragmentDensityMapFeatures                           (void) const;
 +const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&                        getFragmentShaderBarycentricFeatures            (void) const;
 +const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&                 getFragmentShaderInterlockFeatures                      (void) const;
 +const vk::VkPhysicalDeviceHostQueryResetFeaturesEXT&                                  getHostQueryResetFeatures                                       (void) const;
  const vk::VkPhysicalDeviceImagelessFramebufferFeaturesKHR&                            getImagelessFramebufferFeatures                         (void) const;
 +const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                  getIndexTypeUint8Features                                       (void) const;
  const vk::VkPhysicalDeviceInlineUniformBlockFeaturesEXT&                              getInlineUniformBlockFeatures                           (void) const;
 -const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                  getBlendOperationAdvancedFeatures                       (void) const;
 -const vk::VkPhysicalDeviceDescriptorIndexingFeaturesEXT&                              getDescriptorIndexingFeatures                           (void) const;
 -const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&                                 getShadingRateImageFeatures                                     (void) const;
 +const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&                                       getLineRasterizationFeatures                            (void) const;
 +const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&                                  getMemoryPriorityFeatures                                       (void) const;
 +const vk::VkPhysicalDeviceMeshShaderFeaturesNV&                                                       getMeshShaderFeatures                                           (void) const;
 +const vk::VkPhysicalDeviceMultiviewFeatures&                                                  getMultiviewFeatures                                            (void) const;
 +const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&            getPipelineExecutablePropertiesFeatures         (void) const;
 +const vk::VkPhysicalDeviceProtectedMemoryFeatures&                                            getProtectedMemoryFeatures                                      (void) const;
  const vk::VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&                       getRepresentativeFragmentTestFeatures           (void) const;
 -const vk::VkPhysicalDevice8BitStorageFeaturesKHR&                                             get8BitStorageFeatures                                          (void) const;
 +const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&                             getSamplerYcbcrConversionFeatures                       (void) const;
 +const vk::VkPhysicalDeviceScalarBlockLayoutFeaturesEXT&                                       getScalarBlockLayoutFeatures                            (void) const;
  const vk::VkPhysicalDeviceShaderAtomicInt64FeaturesKHR&                                       getShaderAtomicInt64Features                            (void) const;
 -const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&                  getVertexAttributeDivisorFeatures                       (void) const;
 -const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&                 getComputeShaderDerivativesFeatures                     (void) const;
 -const vk::VkPhysicalDeviceMeshShaderFeaturesNV&                                                       getMeshShaderFeatures                                           (void) const;
 -const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&                        getFragmentShaderBarycentricFeatures            (void) const;
+ const vk::VkPhysicalDeviceShaderClockFeaturesKHR&                                             getShaderClockFeatures                                          (void) const;
 +const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&  getShaderDemoteToHelperInvocationFeatures       (void) const;
 +const vk::VkPhysicalDeviceShaderDrawParametersFeatures&                                       getShaderDrawParametersFeatures                         (void) const;
 +const vk::VkPhysicalDeviceShaderFloat16Int8FeaturesKHR&                                       getShaderFloat16Int8Features                            (void) const;
  const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&                             getShaderImageFootprintFeatures                         (void) const;
 -const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&                                 getExclusiveScissorFeatures                                     (void) const;
 +const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&                       getShaderIntegerFunctions2FeaturesINTEL         (void) const;
 +const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR&             getShaderSubgroupExtendedTypesFeatures          (void) const;
 +const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&                                 getShadingRateImageFeatures                                     (void) const;
 +const vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&                             getSubgroupSizeControlFeatures                          (void) const;
 +const vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&                            getTexelBufferAlignmentFeatures                         (void) const;
+ const vk::VkPhysicalDeviceTimelineSemaphoreFeaturesKHR&                                       getTimelineSemaphoreFeatures                            (void) const;
 -const vk::VkPhysicalDeviceVulkanMemoryModelFeaturesKHR&                                       getVulkanMemoryModelFeatures                            (void) const;
 -const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&                              getFragmentDensityMapFeatures                           (void) const;
 -const vk::VkPhysicalDeviceScalarBlockLayoutFeaturesEXT&                                       getScalarBlockLayoutFeatures                            (void) const;
 -const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&                                  getMemoryPriorityFeatures                                       (void) const;
 -const vk::VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV& getDedicatedAllocationImageAliasingFeatures     (void) const;
 -const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&                             getBufferDeviceAddressFeatures                          (void) const;
 -const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&                                        getCooperativeMatrixFeatures                            (void) const;
 -const vk::VkPhysicalDeviceCoverageReductionModeFeaturesNV&                            getCoverageReductionModeFeatures                        (void) const;
 -const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&                 getFragmentShaderInterlockFeatures                      (void) const;
 -const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                        getYcbcrImageArraysFeatures                                     (void) const;
 +const vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT&                                       getTransformFeedbackFeatures                            (void) const;
  const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR&             getUniformBufferStandardLayoutFeatures          (void) const;
 -const vk::VkPhysicalDeviceHostQueryResetFeaturesEXT&                                  getHostQueryResetFeatures                                       (void) const;
 -const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                  getIndexTypeUint8Features                                       (void) const;
 -const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&  getShaderDemoteToHelperInvocationFeatures       (void) const;
 -const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&            getPipelineExecutablePropertiesFeatures         (void) const;
 -const vk::VkPhysicalDeviceMultiviewFeatures&                                                  getMultiviewFeatures                                            (void) const;
 -const vk::VkPhysicalDevice16BitStorageFeatures&                                                       get16BitStorageFeatures                                         (void) const;
  const vk::VkPhysicalDeviceVariablePointersFeatures&                                           getVariablePointersFeatures                                     (void) const;
 -const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&                             getSamplerYcbcrConversionFeatures                       (void) const;
 +const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&                  getVertexAttributeDivisorFeatures                       (void) const;
 +const vk::VkPhysicalDeviceVulkanMemoryModelFeaturesKHR&                                       getVulkanMemoryModelFeatures                            (void) const;
 +const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                        getYcbcrImageArraysFeatures                                     (void) const;
@@@ -1,49 -1,45 +1,51 @@@
  /* WARNING: This is auto-generated file. Do not modify, since changes will
   * be lost! Modify the generating script instead.
   */
 -const vk::VkPhysicalDeviceProtectedMemoryFeatures&                                            Context::getProtectedMemoryFeatures                                             (void) const { return m_device->getProtectedMemoryFeatures();                                   }
 -const vk::VkPhysicalDeviceShaderDrawParametersFeatures&                                       Context::getShaderDrawParametersFeatures                                (void) const { return m_device->getShaderDrawParametersFeatures();                              }
 -const vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT&                                       Context::getTransformFeedbackFeatures                                   (void) const { return m_device->getTransformFeedbackFeatures();                                 }
 -const vk::VkPhysicalDeviceCornerSampledImageFeaturesNV&                                       Context::getCornerSampledImageFeatures                                  (void) const { return m_device->getCornerSampledImageFeatures();                                }
 +const vk::VkPhysicalDevice16BitStorageFeatures&                                                       Context::get16BitStorageFeatures                                                (void) const { return m_device->get16BitStorageFeatures();                                              }
 +const vk::VkPhysicalDevice8BitStorageFeaturesKHR&                                             Context::get8BitStorageFeatures                                                 (void) const { return m_device->get8BitStorageFeatures();                                               }
 +const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                  Context::getBlendOperationAdvancedFeatures                              (void) const { return m_device->getBlendOperationAdvancedFeatures();                    }
 +const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&                             Context::getBufferDeviceAddressFeatures                                 (void) const { return m_device->getBufferDeviceAddressFeatures();                               }
 +const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&                                  Context::getCoherentMemoryFeaturesAMD                                   (void) const { return m_device->getCoherentMemoryFeaturesAMD();                                 }
 +const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&                 Context::getComputeShaderDerivativesFeatures                    (void) const { return m_device->getComputeShaderDerivativesFeatures();                  }
  const vk::VkPhysicalDeviceConditionalRenderingFeaturesEXT&                            Context::getConditionalRenderingFeatures                                (void) const { return m_device->getConditionalRenderingFeatures();                              }
 -const vk::VkPhysicalDeviceFloat16Int8FeaturesKHR&                                             Context::getFloat16Int8Features                                                 (void) const { return m_device->getFloat16Int8Features();                                               }
 +const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&                                        Context::getCooperativeMatrixFeatures                                   (void) const { return m_device->getCooperativeMatrixFeatures();                                 }
 +const vk::VkPhysicalDeviceCornerSampledImageFeaturesNV&                                       Context::getCornerSampledImageFeatures                                  (void) const { return m_device->getCornerSampledImageFeatures();                                }
 +const vk::VkPhysicalDeviceCoverageReductionModeFeaturesNV&                            Context::getCoverageReductionModeFeatures                               (void) const { return m_device->getCoverageReductionModeFeatures();                             }
 +const vk::VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV& Context::getDedicatedAllocationImageAliasingFeatures    (void) const { return m_device->getDedicatedAllocationImageAliasingFeatures();  }
  const vk::VkPhysicalDeviceDepthClipEnableFeaturesEXT&                                 Context::getDepthClipEnableFeatures                                             (void) const { return m_device->getDepthClipEnableFeatures();                                   }
 +const vk::VkPhysicalDeviceDescriptorIndexingFeaturesEXT&                              Context::getDescriptorIndexingFeatures                                  (void) const { return m_device->getDescriptorIndexingFeatures();                                }
 +const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&                                 Context::getExclusiveScissorFeatures                                    (void) const { return m_device->getExclusiveScissorFeatures();                                  }
 +const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&                              Context::getFragmentDensityMapFeatures                                  (void) const { return m_device->getFragmentDensityMapFeatures();                                }
 +const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&                        Context::getFragmentShaderBarycentricFeatures                   (void) const { return m_device->getFragmentShaderBarycentricFeatures();                 }
 +const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&                 Context::getFragmentShaderInterlockFeatures                             (void) const { return m_device->getFragmentShaderInterlockFeatures();                   }
 +const vk::VkPhysicalDeviceHostQueryResetFeaturesEXT&                                  Context::getHostQueryResetFeatures                                              (void) const { return m_device->getHostQueryResetFeatures();                                    }
  const vk::VkPhysicalDeviceImagelessFramebufferFeaturesKHR&                            Context::getImagelessFramebufferFeatures                                (void) const { return m_device->getImagelessFramebufferFeatures();                              }
 +const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                  Context::getIndexTypeUint8Features                                              (void) const { return m_device->getIndexTypeUint8Features();                                    }
  const vk::VkPhysicalDeviceInlineUniformBlockFeaturesEXT&                              Context::getInlineUniformBlockFeatures                                  (void) const { return m_device->getInlineUniformBlockFeatures();                                }
 -const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                  Context::getBlendOperationAdvancedFeatures                              (void) const { return m_device->getBlendOperationAdvancedFeatures();                    }
 -const vk::VkPhysicalDeviceDescriptorIndexingFeaturesEXT&                              Context::getDescriptorIndexingFeatures                                  (void) const { return m_device->getDescriptorIndexingFeatures();                                }
 -const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&                                 Context::getShadingRateImageFeatures                                    (void) const { return m_device->getShadingRateImageFeatures();                                  }
 +const vk::VkPhysicalDeviceLineRasterizationFeaturesEXT&                                       Context::getLineRasterizationFeatures                                   (void) const { return m_device->getLineRasterizationFeatures();                                 }
 +const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&                                  Context::getMemoryPriorityFeatures                                              (void) const { return m_device->getMemoryPriorityFeatures();                                    }
 +const vk::VkPhysicalDeviceMeshShaderFeaturesNV&                                                       Context::getMeshShaderFeatures                                                  (void) const { return m_device->getMeshShaderFeatures();                                                }
 +const vk::VkPhysicalDeviceMultiviewFeatures&                                                  Context::getMultiviewFeatures                                                   (void) const { return m_device->getMultiviewFeatures();                                                 }
 +const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&            Context::getPipelineExecutablePropertiesFeatures                (void) const { return m_device->getPipelineExecutablePropertiesFeatures();              }
 +const vk::VkPhysicalDeviceProtectedMemoryFeatures&                                            Context::getProtectedMemoryFeatures                                             (void) const { return m_device->getProtectedMemoryFeatures();                                   }
  const vk::VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&                       Context::getRepresentativeFragmentTestFeatures                  (void) const { return m_device->getRepresentativeFragmentTestFeatures();                }
 -const vk::VkPhysicalDevice8BitStorageFeaturesKHR&                                             Context::get8BitStorageFeatures                                                 (void) const { return m_device->get8BitStorageFeatures();                                               }
 +const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&                             Context::getSamplerYcbcrConversionFeatures                              (void) const { return m_device->getSamplerYcbcrConversionFeatures();                    }
 +const vk::VkPhysicalDeviceScalarBlockLayoutFeaturesEXT&                                       Context::getScalarBlockLayoutFeatures                                   (void) const { return m_device->getScalarBlockLayoutFeatures();                                 }
  const vk::VkPhysicalDeviceShaderAtomicInt64FeaturesKHR&                                       Context::getShaderAtomicInt64Features                                   (void) const { return m_device->getShaderAtomicInt64Features();                                 }
 -const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&                  Context::getVertexAttributeDivisorFeatures                              (void) const { return m_device->getVertexAttributeDivisorFeatures();                    }
 -const vk::VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&                 Context::getComputeShaderDerivativesFeatures                    (void) const { return m_device->getComputeShaderDerivativesFeatures();                  }
 -const vk::VkPhysicalDeviceMeshShaderFeaturesNV&                                                       Context::getMeshShaderFeatures                                                  (void) const { return m_device->getMeshShaderFeatures();                                                }
 -const vk::VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&                        Context::getFragmentShaderBarycentricFeatures                   (void) const { return m_device->getFragmentShaderBarycentricFeatures();                 }
+ const vk::VkPhysicalDeviceShaderClockFeaturesKHR&                                             Context::getShaderClockFeatures                                                 (void) const { return m_device->getShaderClockFeatures();                                               }
 +const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&  Context::getShaderDemoteToHelperInvocationFeatures              (void) const { return m_device->getShaderDemoteToHelperInvocationFeatures();    }
 +const vk::VkPhysicalDeviceShaderDrawParametersFeatures&                                       Context::getShaderDrawParametersFeatures                                (void) const { return m_device->getShaderDrawParametersFeatures();                              }
 +const vk::VkPhysicalDeviceShaderFloat16Int8FeaturesKHR&                                       Context::getShaderFloat16Int8Features                                   (void) const { return m_device->getShaderFloat16Int8Features();                                 }
  const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&                             Context::getShaderImageFootprintFeatures                                (void) const { return m_device->getShaderImageFootprintFeatures();                              }
 -const vk::VkPhysicalDeviceExclusiveScissorFeaturesNV&                                 Context::getExclusiveScissorFeatures                                    (void) const { return m_device->getExclusiveScissorFeatures();                                  }
 +const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&                       Context::getShaderIntegerFunctions2FeaturesINTEL                (void) const { return m_device->getShaderIntegerFunctions2FeaturesINTEL();              }
 +const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR&             Context::getShaderSubgroupExtendedTypesFeatures                 (void) const { return m_device->getShaderSubgroupExtendedTypesFeatures();               }
 +const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&                                 Context::getShadingRateImageFeatures                                    (void) const { return m_device->getShadingRateImageFeatures();                                  }
 +const vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&                             Context::getSubgroupSizeControlFeatures                                 (void) const { return m_device->getSubgroupSizeControlFeatures();                               }
 +const vk::VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&                            Context::getTexelBufferAlignmentFeatures                                (void) const { return m_device->getTexelBufferAlignmentFeatures();                              }
+ const vk::VkPhysicalDeviceTimelineSemaphoreFeaturesKHR&                                       Context::getTimelineSemaphoreFeatures                                   (void) const { return m_device->getTimelineSemaphoreFeatures();                                 }
 -const vk::VkPhysicalDeviceVulkanMemoryModelFeaturesKHR&                                       Context::getVulkanMemoryModelFeatures                                   (void) const { return m_device->getVulkanMemoryModelFeatures();                                 }
 -const vk::VkPhysicalDeviceFragmentDensityMapFeaturesEXT&                              Context::getFragmentDensityMapFeatures                                  (void) const { return m_device->getFragmentDensityMapFeatures();                                }
 -const vk::VkPhysicalDeviceScalarBlockLayoutFeaturesEXT&                                       Context::getScalarBlockLayoutFeatures                                   (void) const { return m_device->getScalarBlockLayoutFeatures();                                 }
 -const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&                                  Context::getMemoryPriorityFeatures                                              (void) const { return m_device->getMemoryPriorityFeatures();                                    }
 -const vk::VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV& Context::getDedicatedAllocationImageAliasingFeatures    (void) const { return m_device->getDedicatedAllocationImageAliasingFeatures();  }
 -const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&                             Context::getBufferDeviceAddressFeatures                                 (void) const { return m_device->getBufferDeviceAddressFeatures();                               }
 -const vk::VkPhysicalDeviceCooperativeMatrixFeaturesNV&                                        Context::getCooperativeMatrixFeatures                                   (void) const { return m_device->getCooperativeMatrixFeatures();                                 }
 -const vk::VkPhysicalDeviceCoverageReductionModeFeaturesNV&                            Context::getCoverageReductionModeFeatures                               (void) const { return m_device->getCoverageReductionModeFeatures();                             }
 -const vk::VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&                 Context::getFragmentShaderInterlockFeatures                             (void) const { return m_device->getFragmentShaderInterlockFeatures();                   }
 -const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                        Context::getYcbcrImageArraysFeatures                                    (void) const { return m_device->getYcbcrImageArraysFeatures();                                  }
 +const vk::VkPhysicalDeviceTransformFeedbackFeaturesEXT&                                       Context::getTransformFeedbackFeatures                                   (void) const { return m_device->getTransformFeedbackFeatures();                                 }
  const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR&             Context::getUniformBufferStandardLayoutFeatures                 (void) const { return m_device->getUniformBufferStandardLayoutFeatures();               }
 -const vk::VkPhysicalDeviceHostQueryResetFeaturesEXT&                                  Context::getHostQueryResetFeatures                                              (void) const { return m_device->getHostQueryResetFeatures();                                    }
 -const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                  Context::getIndexTypeUint8Features                                              (void) const { return m_device->getIndexTypeUint8Features();                                    }
 -const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&  Context::getShaderDemoteToHelperInvocationFeatures              (void) const { return m_device->getShaderDemoteToHelperInvocationFeatures();    }
 -const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&            Context::getPipelineExecutablePropertiesFeatures                (void) const { return m_device->getPipelineExecutablePropertiesFeatures();              }
 -const vk::VkPhysicalDeviceMultiviewFeatures&                                                  Context::getMultiviewFeatures                                                   (void) const { return m_device->getMultiviewFeatures();                                                 }
 -const vk::VkPhysicalDevice16BitStorageFeatures&                                                       Context::get16BitStorageFeatures                                                (void) const { return m_device->get16BitStorageFeatures();                                              }
  const vk::VkPhysicalDeviceVariablePointersFeatures&                                           Context::getVariablePointersFeatures                                    (void) const { return m_device->getVariablePointersFeatures();                                  }
 -const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&                             Context::getSamplerYcbcrConversionFeatures                              (void) const { return m_device->getSamplerYcbcrConversionFeatures();                    }
 +const vk::VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&                  Context::getVertexAttributeDivisorFeatures                              (void) const { return m_device->getVertexAttributeDivisorFeatures();                    }
 +const vk::VkPhysicalDeviceVulkanMemoryModelFeaturesKHR&                                       Context::getVulkanMemoryModelFeatures                                   (void) const { return m_device->getVulkanMemoryModelFeatures();                                 }
 +const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                        Context::getYcbcrImageArraysFeatures                                    (void) const { return m_device->getYcbcrImageArraysFeatures();                                  }
@@@ -1,49 -1,45 +1,51 @@@
  /* WARNING: This is auto-generated file. Do not modify, since changes will
   * be lost! Modify the generating script instead.
   */
 -const VkPhysicalDeviceProtectedMemoryFeatures&                                                getProtectedMemoryFeatures                                      (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceProtectedMemoryFeatures>();                                               }
 -const VkPhysicalDeviceShaderDrawParametersFeatures&                                   getShaderDrawParametersFeatures                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDrawParametersFeatures>();                                  }
 -const VkPhysicalDeviceTransformFeedbackFeaturesEXT&                                   getTransformFeedbackFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTransformFeedbackFeaturesEXT>();                                  }
 -const VkPhysicalDeviceCornerSampledImageFeaturesNV&                                   getCornerSampledImageFeatures                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCornerSampledImageFeaturesNV>();                                  }
 +const VkPhysicalDevice16BitStorageFeatures&                                                   get16BitStorageFeatures                                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice16BitStorageFeatures>();                                                  }
 +const VkPhysicalDevice8BitStorageFeaturesKHR&                                         get8BitStorageFeatures                                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice8BitStorageFeaturesKHR>();                                                }
 +const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                      getBlendOperationAdvancedFeatures                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>();                             }
 +const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&                         getBufferDeviceAddressFeatures                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>();                                }
 +const VkPhysicalDeviceCoherentMemoryFeaturesAMD&                                      getCoherentMemoryFeaturesAMD                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCoherentMemoryFeaturesAMD>();                                             }
 +const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&                     getComputeShaderDerivativesFeatures                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>();                    }
  const VkPhysicalDeviceConditionalRenderingFeaturesEXT&                                getConditionalRenderingFeatures                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceConditionalRenderingFeaturesEXT>();                               }
 -const VkPhysicalDeviceFloat16Int8FeaturesKHR&                                         getFloat16Int8Features                                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFloat16Int8FeaturesKHR>();                                                }
 +const VkPhysicalDeviceCooperativeMatrixFeaturesNV&                                    getCooperativeMatrixFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCooperativeMatrixFeaturesNV>();                                   }
 +const VkPhysicalDeviceCornerSampledImageFeaturesNV&                                   getCornerSampledImageFeatures                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCornerSampledImageFeaturesNV>();                                  }
 +const VkPhysicalDeviceCoverageReductionModeFeaturesNV&                                getCoverageReductionModeFeatures                        (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCoverageReductionModeFeaturesNV>();                               }
 +const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV&     getDedicatedAllocationImageAliasingFeatures     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>();    }
  const VkPhysicalDeviceDepthClipEnableFeaturesEXT&                                     getDepthClipEnableFeatures                                      (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDepthClipEnableFeaturesEXT>();                                    }
 +const VkPhysicalDeviceDescriptorIndexingFeaturesEXT&                          getDescriptorIndexingFeatures                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>();                                 }
 +const VkPhysicalDeviceExclusiveScissorFeaturesNV&                                     getExclusiveScissorFeatures                                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExclusiveScissorFeaturesNV>();                                    }
 +const VkPhysicalDeviceFragmentDensityMapFeaturesEXT&                          getFragmentDensityMapFeatures                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>();                                 }
 +const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&                    getFragmentShaderBarycentricFeatures            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>();                   }
 +const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&                     getFragmentShaderInterlockFeatures                      (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>();                    }
 +const VkPhysicalDeviceHostQueryResetFeaturesEXT&                                      getHostQueryResetFeatures                                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceHostQueryResetFeaturesEXT>();                                             }
  const VkPhysicalDeviceImagelessFramebufferFeaturesKHR&                                getImagelessFramebufferFeatures                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceImagelessFramebufferFeaturesKHR>();                               }
 +const VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                      getIndexTypeUint8Features                                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>();                                             }
  const VkPhysicalDeviceInlineUniformBlockFeaturesEXT&                          getInlineUniformBlockFeatures                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>();                                 }
 -const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                      getBlendOperationAdvancedFeatures                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>();                             }
 -const VkPhysicalDeviceDescriptorIndexingFeaturesEXT&                          getDescriptorIndexingFeatures                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>();                                 }
 -const VkPhysicalDeviceShadingRateImageFeaturesNV&                                     getShadingRateImageFeatures                                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShadingRateImageFeaturesNV>();                                    }
 +const VkPhysicalDeviceLineRasterizationFeaturesEXT&                                   getLineRasterizationFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceLineRasterizationFeaturesEXT>();                                  }
 +const VkPhysicalDeviceMemoryPriorityFeaturesEXT&                                      getMemoryPriorityFeatures                                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMemoryPriorityFeaturesEXT>();                                             }
 +const VkPhysicalDeviceMeshShaderFeaturesNV&                                                   getMeshShaderFeatures                                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMeshShaderFeaturesNV>();                                                  }
 +const VkPhysicalDeviceMultiviewFeatures&                                                      getMultiviewFeatures                                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMultiviewFeatures>();                                                             }
 +const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&                getPipelineExecutablePropertiesFeatures         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>();               }
 +const VkPhysicalDeviceProtectedMemoryFeatures&                                                getProtectedMemoryFeatures                                      (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceProtectedMemoryFeatures>();                                               }
  const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&                   getRepresentativeFragmentTestFeatures           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>();                  }
 -const VkPhysicalDevice8BitStorageFeaturesKHR&                                         get8BitStorageFeatures                                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice8BitStorageFeaturesKHR>();                                                }
 +const VkPhysicalDeviceSamplerYcbcrConversionFeatures&                         getSamplerYcbcrConversionFeatures                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>();                                }
 +const VkPhysicalDeviceScalarBlockLayoutFeaturesEXT&                                   getScalarBlockLayoutFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT>();                                  }
  const VkPhysicalDeviceShaderAtomicInt64FeaturesKHR&                                   getShaderAtomicInt64Features                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderAtomicInt64FeaturesKHR>();                                  }
 -const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&                      getVertexAttributeDivisorFeatures                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>();                             }
 -const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV&                     getComputeShaderDerivativesFeatures                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>();                    }
 -const VkPhysicalDeviceMeshShaderFeaturesNV&                                                   getMeshShaderFeatures                                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMeshShaderFeaturesNV>();                                                  }
 -const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV&                    getFragmentShaderBarycentricFeatures            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>();                   }
+ const VkPhysicalDeviceShaderClockFeaturesKHR&                                         getShaderClockFeatures                                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderClockFeaturesKHR>();                                                }
 +const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&      getShaderDemoteToHelperInvocationFeatures       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>();             }
 +const VkPhysicalDeviceShaderDrawParametersFeatures&                                   getShaderDrawParametersFeatures                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDrawParametersFeatures>();                                  }
 +const VkPhysicalDeviceShaderFloat16Int8FeaturesKHR&                                   getShaderFloat16Int8Features                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderFloat16Int8FeaturesKHR>();                                  }
  const VkPhysicalDeviceShaderImageFootprintFeaturesNV&                         getShaderImageFootprintFeatures                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderImageFootprintFeaturesNV>();                                }
 -const VkPhysicalDeviceExclusiveScissorFeaturesNV&                                     getExclusiveScissorFeatures                                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceExclusiveScissorFeaturesNV>();                                    }
 +const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&                   getShaderIntegerFunctions2FeaturesINTEL         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>();                  }
 +const VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR&         getShaderSubgroupExtendedTypesFeatures          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR>();                }
 +const VkPhysicalDeviceShadingRateImageFeaturesNV&                                     getShadingRateImageFeatures                                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShadingRateImageFeaturesNV>();                                    }
 +const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&                         getSubgroupSizeControlFeatures                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>();                                }
 +const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT&                                getTexelBufferAlignmentFeatures                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>();                               }
+ const VkPhysicalDeviceTimelineSemaphoreFeaturesKHR&                                   getTimelineSemaphoreFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTimelineSemaphoreFeaturesKHR>();                                  }
 -const VkPhysicalDeviceVulkanMemoryModelFeaturesKHR&                                   getVulkanMemoryModelFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR>();                                  }
 -const VkPhysicalDeviceFragmentDensityMapFeaturesEXT&                          getFragmentDensityMapFeatures                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>();                                 }
 -const VkPhysicalDeviceScalarBlockLayoutFeaturesEXT&                                   getScalarBlockLayoutFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT>();                                  }
 -const VkPhysicalDeviceMemoryPriorityFeaturesEXT&                                      getMemoryPriorityFeatures                                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMemoryPriorityFeaturesEXT>();                                             }
 -const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV&     getDedicatedAllocationImageAliasingFeatures     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>();    }
 -const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&                         getBufferDeviceAddressFeatures                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>();                                }
 -const VkPhysicalDeviceCooperativeMatrixFeaturesNV&                                    getCooperativeMatrixFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCooperativeMatrixFeaturesNV>();                                   }
 -const VkPhysicalDeviceCoverageReductionModeFeaturesNV&                                getCoverageReductionModeFeatures                        (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCoverageReductionModeFeaturesNV>();                               }
 -const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT&                     getFragmentShaderInterlockFeatures                      (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>();                    }
 -const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                    getYcbcrImageArraysFeatures                                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>();                                   }
 +const VkPhysicalDeviceTransformFeedbackFeaturesEXT&                                   getTransformFeedbackFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceTransformFeedbackFeaturesEXT>();                                  }
  const VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR&         getUniformBufferStandardLayoutFeatures          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR>();                }
 -const VkPhysicalDeviceHostQueryResetFeaturesEXT&                                      getHostQueryResetFeatures                                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceHostQueryResetFeaturesEXT>();                                             }
 -const VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                      getIndexTypeUint8Features                                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>();                                             }
 -const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&      getShaderDemoteToHelperInvocationFeatures       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>();             }
 -const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&                getPipelineExecutablePropertiesFeatures         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>();               }
 -const VkPhysicalDeviceMultiviewFeatures&                                                      getMultiviewFeatures                                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMultiviewFeatures>();                                                             }
 -const VkPhysicalDevice16BitStorageFeatures&                                                   get16BitStorageFeatures                                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice16BitStorageFeatures>();                                                  }
  const VkPhysicalDeviceVariablePointersFeatures&                                               getVariablePointersFeatures                                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVariablePointersFeatures>();                                              }
 -const VkPhysicalDeviceSamplerYcbcrConversionFeatures&                         getSamplerYcbcrConversionFeatures                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>();                                }
 +const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT&                      getVertexAttributeDivisorFeatures                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>();                             }
 +const VkPhysicalDeviceVulkanMemoryModelFeaturesKHR&                                   getVulkanMemoryModelFeatures                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR>();                                  }
 +const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                    getYcbcrImageArraysFeatures                                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>();                                   }
@@@ -1181,16 -1201,11 +1211,21 @@@ template<> VkStructureType getStructure
        return VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV;
  }
  
 +template<> VkStructureType getStructureType<VkPhysicalDeviceShaderSMBuiltinsPropertiesNV> (void)
 +{
 +      return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV;
 +}
 +
 +template<> VkStructureType getStructureType<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV> (void)
 +{
 +      return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV;
 +}
 +
+ template<> VkStructureType getStructureType<VkPhysicalDeviceShaderClockFeaturesKHR> (void)
+ {
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR;
+ }
  template<> VkStructureType getStructureType<VkDrmFormatModifierPropertiesListEXT> (void)
  {
        return VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT;
@@@ -47,8 -47,8 +47,9 @@@ const char*   getDescriptorUpdateTemplate
  const char*   getColorSpaceKHRName                                                                    (VkColorSpaceKHR value);
  const char*   getPresentModeKHRName                                                                   (VkPresentModeKHR value);
  const char*   getDriverIdKHRName                                                                              (VkDriverIdKHR value);
 +const char*   getShaderFloatControlsIndependenceKHRName                               (VkShaderFloatControlsIndependenceKHR value);
  const char*   getPipelineExecutableStatisticFormatKHRName                             (VkPipelineExecutableStatisticFormatKHR value);
+ const char*   getSemaphoreTypeKHRName                                                                 (VkSemaphoreTypeKHR value);
  const char*   getDebugReportObjectTypeEXTName                                                 (VkDebugReportObjectTypeEXT value);
  const char*   getRasterizationOrderAMDName                                                    (VkRasterizationOrderAMD value);
  const char*   getShaderInfoTypeAMDName                                                                (VkShaderInfoTypeAMD value);
@@@ -134,8 -128,8 +135,9 @@@ inline tcu::Format::Enum<VkDescriptorUp
  inline tcu::Format::Enum<VkColorSpaceKHR>                                                                     getColorSpaceKHRStr                                                                     (VkColorSpaceKHR value)                                                                 { return tcu::Format::Enum<VkColorSpaceKHR>(getColorSpaceKHRName, value);                                                                                                                                       }
  inline tcu::Format::Enum<VkPresentModeKHR>                                                                    getPresentModeKHRStr                                                            (VkPresentModeKHR value)                                                                { return tcu::Format::Enum<VkPresentModeKHR>(getPresentModeKHRName, value);                                                                                                                                     }
  inline tcu::Format::Enum<VkDriverIdKHR>                                                                               getDriverIdKHRStr                                                                       (VkDriverIdKHR value)                                                                   { return tcu::Format::Enum<VkDriverIdKHR>(getDriverIdKHRName, value);                                                                                                                                           }
 +inline tcu::Format::Enum<VkShaderFloatControlsIndependenceKHR>                                getShaderFloatControlsIndependenceKHRStr                        (VkShaderFloatControlsIndependenceKHR value)                    { return tcu::Format::Enum<VkShaderFloatControlsIndependenceKHR>(getShaderFloatControlsIndependenceKHRName, value);                                                     }
  inline tcu::Format::Enum<VkPipelineExecutableStatisticFormatKHR>                      getPipelineExecutableStatisticFormatKHRStr                      (VkPipelineExecutableStatisticFormatKHR value)                  { return tcu::Format::Enum<VkPipelineExecutableStatisticFormatKHR>(getPipelineExecutableStatisticFormatKHRName, value);                                         }
+ inline tcu::Format::Enum<VkSemaphoreTypeKHR>                                                          getSemaphoreTypeKHRStr                                                          (VkSemaphoreTypeKHR value)                                                              { return tcu::Format::Enum<VkSemaphoreTypeKHR>(getSemaphoreTypeKHRName, value);                                                                                                                         }
  inline tcu::Format::Enum<VkDebugReportObjectTypeEXT>                                          getDebugReportObjectTypeEXTStr                                          (VkDebugReportObjectTypeEXT value)                                              { return tcu::Format::Enum<VkDebugReportObjectTypeEXT>(getDebugReportObjectTypeEXTName, value);                                                                                         }
  inline tcu::Format::Enum<VkRasterizationOrderAMD>                                                     getRasterizationOrderAMDStr                                                     (VkRasterizationOrderAMD value)                                                 { return tcu::Format::Enum<VkRasterizationOrderAMD>(getRasterizationOrderAMDName, value);                                                                                                       }
  inline tcu::Format::Enum<VkShaderInfoTypeAMD>                                                         getShaderInfoTypeAMDStr                                                         (VkShaderInfoTypeAMD value)                                                             { return tcu::Format::Enum<VkShaderInfoTypeAMD>(getShaderInfoTypeAMDName, value);                                                                                                                       }
@@@ -221,8 -209,8 +223,9 @@@ inline std::ostream&       operator<<      (std::o
  inline std::ostream&  operator<<      (std::ostream& s, VkColorSpaceKHR value)                                                                        { return s << getColorSpaceKHRStr(value);                                                                       }
  inline std::ostream&  operator<<      (std::ostream& s, VkPresentModeKHR value)                                                                       { return s << getPresentModeKHRStr(value);                                                                      }
  inline std::ostream&  operator<<      (std::ostream& s, VkDriverIdKHR value)                                                                          { return s << getDriverIdKHRStr(value);                                                                         }
 +inline std::ostream&  operator<<      (std::ostream& s, VkShaderFloatControlsIndependenceKHR value)                           { return s << getShaderFloatControlsIndependenceKHRStr(value);                          }
  inline std::ostream&  operator<<      (std::ostream& s, VkPipelineExecutableStatisticFormatKHR value)                         { return s << getPipelineExecutableStatisticFormatKHRStr(value);                        }
+ inline std::ostream&  operator<<      (std::ostream& s, VkSemaphoreTypeKHR value)                                                                     { return s << getSemaphoreTypeKHRStr(value);                                                            }
  inline std::ostream&  operator<<      (std::ostream& s, VkDebugReportObjectTypeEXT value)                                                     { return s << getDebugReportObjectTypeEXTStr(value);                                            }
  inline std::ostream&  operator<<      (std::ostream& s, VkRasterizationOrderAMD value)                                                        { return s << getRasterizationOrderAMDStr(value);                                                       }
  inline std::ostream&  operator<<      (std::ostream& s, VkShaderInfoTypeAMD value)                                                            { return s << getShaderInfoTypeAMDStr(value);                                                           }
@@@ -713,8 -698,7 +723,9 @@@ std::ostream&      operator<<      (std::ostream
  std::ostream& operator<<      (std::ostream& s, const VkPipelineColorBlendAdvancedStateCreateInfoEXT& value);
  std::ostream& operator<<      (std::ostream& s, const VkPipelineCoverageToColorStateCreateInfoNV& value);
  std::ostream& operator<<      (std::ostream& s, const VkPipelineCoverageModulationStateCreateInfoNV& value);
 +std::ostream& operator<<      (std::ostream& s, const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV& value);
 +std::ostream& operator<<      (std::ostream& s, const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV& value);
+ std::ostream& operator<<      (std::ostream& s, const VkPhysicalDeviceShaderClockFeaturesKHR& value);
  std::ostream& operator<<      (std::ostream& s, const VkDrmFormatModifierPropertiesEXT& value);
  std::ostream& operator<<      (std::ostream& s, const VkDrmFormatModifierPropertiesListEXT& value);
  std::ostream& operator<<      (std::ostream& s, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT& value);
@@@ -436,13 -432,13 +437,19 @@@ const char* getStructureTypeName (VkStr
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV";
                case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV:                                                                                              return "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV";
                case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:                                                   return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV";
 -              case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS2_FEATURES_INTEL:                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS2_FEATURES_INTEL";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR:                                 return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR:                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR";
+               case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR:                                                                  return "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR:                                                              return "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR";
+               case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR:                                                                                 return "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR";
+               case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR:                                                                               return "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR";
 +              case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL";
 +              case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL:                                                                    return "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL";
 +              case VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL:                                                   return "VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL";
 +              case VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL:                                                                   return "VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL";
 +              case VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL:                                                    return "VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL";
 +              case VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL:                                                                 return "VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL";
 +              case VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL:                                    return "VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR:                                return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:                                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT";
                case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD:                                             return "VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD";
@@@ -7400,27 -7320,17 +7496,38 @@@ std::ostream& operator<< (std::ostream
        return s;
  }
  
 +std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV& value)
 +{
 +      s << "VkPhysicalDeviceShaderSMBuiltinsPropertiesNV = {\n";
 +      s << "\tsType = " << value.sType << '\n';
 +      s << "\tpNext = " << value.pNext << '\n';
 +      s << "\tshaderSMCount = " << value.shaderSMCount << '\n';
 +      s << "\tshaderWarpsPerSM = " << value.shaderWarpsPerSM << '\n';
 +      s << '}';
 +      return s;
 +}
 +
 +std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV& value)
 +{
 +      s << "VkPhysicalDeviceShaderSMBuiltinsFeaturesNV = {\n";
 +      s << "\tsType = " << value.sType << '\n';
 +      s << "\tpNext = " << value.pNext << '\n';
 +      s << "\tshaderSMBuiltins = " << value.shaderSMBuiltins << '\n';
 +      s << '}';
 +      return s;
 +}
 +
+ std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderClockFeaturesKHR& value)
+ {
+       s << "VkPhysicalDeviceShaderClockFeaturesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tshaderSubgroupClock = " << value.shaderSubgroupClock << '\n';
+       s << "\tshaderDeviceClock = " << value.shaderDeviceClock << '\n';
+       s << '}';
+       return s;
+ }
  std::ostream& operator<< (std::ostream& s, const VkDrmFormatModifierPropertiesEXT& value)
  {
        s << "VkDrmFormatModifierPropertiesEXT = {\n";
@@@ -3125,21 -3161,14 +3175,29 @@@ struct VkPipelineCoverageModulationStat
        const float*                                                                    pCoverageModulationTable;
  };
  
 +struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV
 +{
 +      VkStructureType sType;
 +      void*                   pNext;
 +      deUint32                shaderSMCount;
 +      deUint32                shaderWarpsPerSM;
 +};
 +
 +struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV
 +{
 +      VkStructureType sType;
 +      void*                   pNext;
 +      VkBool32                shaderSMBuiltins;
 +};
 +
+ struct VkPhysicalDeviceShaderClockFeaturesKHR
+ {
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderSubgroupClock;
+       VkBool32                shaderDeviceClock;
+ };
  struct VkDrmFormatModifierPropertiesEXT
  {
        deUint64                                drmFormatModifier;
@@@ -474,13 -470,13 +475,19 @@@ typedef enum VkStructureType 
      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002,
      VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000,
      VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001,
 -    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS2_FEATURES_INTEL = 1000209000,
+     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = 1000207000,
+     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = 1000207001,
+     VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = 1000207002,
+     VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = 1000207003,
+     VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = 1000207004,
+     VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = 1000207005,
 +    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000,
 +    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = 1000210000,
 +    VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001,
 +    VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = 1000210002,
 +    VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = 1000210003,
 +    VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = 1000210004,
 +    VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = 1000210005,
      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = 1000211000,
      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000,
      VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000,
  #include "vktSynchronizationOperationResources.hpp"
  #include "vktExternalMemoryUtil.hpp"
  #include "vktTestGroupUtil.hpp"
 +#include "vktCustomInstancesDevices.hpp"
  
+ #include "deRandom.hpp"
  #include "tcuResultCollector.hpp"
  #include "tcuTestLog.hpp"
 +#include "tcuCommandLine.hpp"
  
  using tcu::TestLog;
  using namespace vkt::ExternalMemoryUtil;
@@@ -293,23 -308,123 +310,24 @@@ SimpleAllocation::~SimpleAllocation (vo
        m_vkd.freeMemory(m_device, getMemory(), DE_NULL);
  }
  
 -class DeviceId
 +CustomInstance createTestInstance (Context& context)
  {
 -public:
 -                                      DeviceId                (deUint32               vendorId,
 -                                                                       deUint32               driverVersion,
 -                                                                       const deUint8  driverUUID[VK_UUID_SIZE],
 -                                                                       const deUint8  deviceUUID[VK_UUID_SIZE]);
 -
 -      bool                    operator==              (const DeviceId& other) const;
 -      bool                    operator|=              (const DeviceId& other) const;
 -
 -private:
 -      const deUint32  m_vendorId;
 -      const deUint32  m_driverVersion;
 -      deUint8                 m_driverUUID[VK_UUID_SIZE];
 -      deUint8                 m_deviceUUID[VK_UUID_SIZE];
 -};
 -
 -DeviceId::DeviceId (deUint32          vendorId,
 -                                      deUint32                driverVersion,
 -                                      const deUint8   driverUUID[VK_UUID_SIZE],
 -                                      const deUint8   deviceUUID[VK_UUID_SIZE])
 -      : m_vendorId            (vendorId)
 -      , m_driverVersion       (driverVersion)
 -{
 -      deMemcpy(m_driverUUID, driverUUID, sizeof(m_driverUUID));
 -      deMemcpy(m_deviceUUID, deviceUUID, sizeof(m_deviceUUID));
 -}
 +      std::vector<std::string> extensions;
 +      extensions.push_back("VK_KHR_get_physical_device_properties2");
 +      extensions.push_back("VK_KHR_external_semaphore_capabilities");
 +      extensions.push_back("VK_KHR_external_memory_capabilities");
  
 -bool DeviceId::operator== (const DeviceId& other) const
 -{
 -      if (this == &other)
 -              return true;
 -
 -      if (m_vendorId != other.m_vendorId)
 -              return false;
 -
 -      if (m_driverVersion != other.m_driverVersion)
 -              return false;
 -
 -      if (deMemCmp(m_driverUUID, other.m_driverUUID, sizeof(m_driverUUID)) != 0)
 -              return false;
 -
 -      return deMemCmp(m_deviceUUID, other.m_deviceUUID, sizeof(m_deviceUUID)) == 0;
 +      return createCustomInstanceWithExtensions(context, extensions);
  }
  
 -DeviceId getDeviceId (const vk::InstanceInterface&    vki,
 -                                        vk::VkPhysicalDevice                  physicalDevice)
 -{
 -      vk::VkPhysicalDeviceIDProperties                        propertiesId;
 -      vk::VkPhysicalDeviceProperties2                         properties;
 -
 -      deMemset(&properties, 0, sizeof(properties));
 -      deMemset(&propertiesId, 0, sizeof(propertiesId));
 -
 -      propertiesId.sType      = vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
 -
 -      properties.sType        = vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
 -      properties.pNext        = &propertiesId;
 -
 -      vki.getPhysicalDeviceProperties2(physicalDevice, &properties);
 -
 -      return DeviceId(properties.properties.vendorID, properties.properties.driverVersion, propertiesId.driverUUID, propertiesId.deviceUUID);
 -}
 -
 -vk::Move<vk::VkInstance> createInstance (const vk::PlatformInterface& vkp, deUint32 version)
 -{
 -      try
 -      {
 -              std::vector<std::string> extensions;
 -              if (!vk::isCoreInstanceExtension(version, "VK_KHR_get_physical_device_properties2"))
 -                      extensions.push_back("VK_KHR_get_physical_device_properties2");
 -              if (!vk::isCoreInstanceExtension(version, "VK_KHR_external_semaphore_capabilities"))
 -                      extensions.push_back("VK_KHR_external_semaphore_capabilities");
 -              if (!vk::isCoreInstanceExtension(version, "VK_KHR_external_memory_capabilities"))
 -                      extensions.push_back("VK_KHR_external_memory_capabilities");
 -
 -              return vk::createDefaultInstance(vkp, version, std::vector<std::string>(), extensions);
 -      }
 -      catch (const vk::Error& error)
 -      {
 -              if (error.getError() == vk::VK_ERROR_EXTENSION_NOT_PRESENT)
 -                      TCU_THROW(NotSupportedError, "Required external memory extensions not supported by the instance");
 -              else
 -                      throw;
 -      }
 -}
 -
 -vk::VkPhysicalDevice getPhysicalDevice (const vk::InstanceInterface&  vki,
 -                                                                              vk::VkInstance                                  instance,
 -                                                                              const tcu::CommandLine&                 cmdLine)
 -{
 -      return vk::chooseDevice(vki, instance, cmdLine);
 -}
 -
 -vk::VkPhysicalDevice getPhysicalDevice (const vk::InstanceInterface& vki, vk::VkInstance instance, const DeviceId& deviceId)
 -{
 -      const std::vector<vk::VkPhysicalDevice> devices (vk::enumeratePhysicalDevices(vki, instance));
 -
 -      for (size_t deviceNdx = 0; deviceNdx < devices.size(); deviceNdx++)
 -      {
 -              if (deviceId == getDeviceId(vki, devices[deviceNdx]))
 -                      return devices[deviceNdx];
 -      }
 -
 -      TCU_FAIL("No matching device found");
 -
 -      return (vk::VkPhysicalDevice)0;
 -}
 -
 -vk::Move<vk::VkDevice> createDevice (const Context&                                   context,
 -                                                                       const vk::PlatformInterface&   vkp,
 -                                                                       vk::VkInstance                                 instance,
 -                                                                       const vk::InstanceInterface&   vki,
 -                                                                       const vk::VkPhysicalDevice             physicalDevice,
 -                                                                       bool                                                   timelineSemaphores)
 +vk::Move<vk::VkDevice> createTestDevice (const Context&                                       context,
 +                                                                               const vk::PlatformInterface&   vkp,
 +                                                                               vk::VkInstance                                 instance,
 +                                                                               const vk::InstanceInterface&   vki,
-                                                                                const vk::VkPhysicalDevice             physicalDevice)
++                                                                               const vk::VkPhysicalDevice             physicalDevice,
++                                                                               bool                                                   timelineSemaphores)
  {
 +      const bool                                                                              validationEnabled               = context.getTestContext().getCommandLine().isValidationEnabled();
        const float                                                                             priority                                = 0.0f;
        const std::vector<vk::VkQueueFamilyProperties>  queueFamilyProperties   = vk::getPhysicalDeviceQueueFamilyProperties(vki, physicalDevice);
        std::vector<deUint32>                                                   queueFamilyIndices              (queueFamilyProperties.size(), 0xFFFFFFFFu);
  // Class to wrap a singleton instance and device
  class InstanceAndDevice
  {
-       InstanceAndDevice       (Context& context)
+ public:
 -
 -      InstanceAndDevice       (const Context&         context,
 -                                               const TestConfig&      config)
 -              : m_instance            (createInstance(context.getPlatformInterface(), context.getUsedApiVersion()))
 -              , m_vki                         (context.getPlatformInterface(), *m_instance)
 -              , m_physicalDevice      (getPhysicalDevice(m_vki, *m_instance, context.getTestContext().getCommandLine()))
 -              , m_logicalDevice       (createDevice(context, context.getPlatformInterface(), *m_instance, m_vki, m_physicalDevice, config.semaphoreType == vk::VK_SEMAPHORE_TYPE_TIMELINE_KHR))
++      InstanceAndDevice       (Context&                       context,
++                           const TestConfig&  config)
 +              : m_instance            (createTestInstance(context))
 +              , m_vki                         (m_instance.getDriver())
 +              , m_physicalDevice      (vk::chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine()))
-               , m_logicalDevice       (createTestDevice(context, context.getPlatformInterface(), m_instance, m_vki, m_physicalDevice))
++              , m_logicalDevice       (createTestDevice(context, context.getPlatformInterface(), m_instance, m_vki, m_physicalDevice, config.semaphoreType == vk::VK_SEMAPHORE_TYPE_TIMELINE_KHR))
        {
        }
  
- public:
-       static vk::VkInstance getInstanceA(Context& context)
 -      const vk::Unique<vk::VkInstance>& getInstance()
++      vk::VkInstance                          getInstance()
        {
-               if (!m_instanceA)
-                       m_instanceA = SharedPtr<InstanceAndDevice>(new InstanceAndDevice(context));
-               return m_instanceA->m_instance;
+               return m_instance;
        }
-       static vk::VkInstance getInstanceB(Context& context)
-       {
-               if (!m_instanceB)
-                       m_instanceB = SharedPtr<InstanceAndDevice>(new InstanceAndDevice(context));
  
-               return m_instanceB->m_instance;
-       }
-       static const vk::InstanceDriver& getDriverA()
-       {
-               DE_ASSERT(m_instanceA);
-               return m_instanceA->m_instance.getDriver();
-       }
-       static const vk::InstanceDriver& getDriverB()
-       {
-               DE_ASSERT(m_instanceB);
-               return m_instanceB->m_instance.getDriver();
-       }
-       static vk::VkPhysicalDevice getPhysicalDeviceA()
-       {
-               DE_ASSERT(m_instanceA);
-               return m_instanceA->m_physicalDevice;
-       }
-       static vk::VkPhysicalDevice getPhysicalDeviceB()
-       {
-               DE_ASSERT(m_instanceB);
-               return m_instanceB->m_physicalDevice;
-       }
-       static const Unique<vk::VkDevice>& getDeviceA()
++      const vk::InstanceDriver&       getDriver()
 +      {
-               DE_ASSERT(m_instanceA);
-               return m_instanceA->m_logicalDevice;
++              return m_vki;
 +      }
-       static const Unique<vk::VkDevice>& getDeviceB()
-       {
-               DE_ASSERT(m_instanceB);
-               return m_instanceB->m_logicalDevice;
-       }
-       static void collectMessagesA()
-       {
-               DE_ASSERT(m_instanceA);
-               m_instanceA->m_instance.collectMessages();
-       }
-       static void collectMessagesB()
++
++      vk::VkPhysicalDevice            getPhysicalDevice()
 +      {
-               DE_ASSERT(m_instanceB);
-               m_instanceB->m_instance.collectMessages();
++              return m_physicalDevice;
 +      }
-       static void destroy()
++
+       const Unique<vk::VkDevice>& getDevice()
        {
-               m_instanceA.clear();
-               m_instanceB.clear();
 -              DE_ASSERT(m_instance);
+               return m_logicalDevice;
        }
  
  private:
 -      const Unique<vk::VkInstance>    m_instance;
 -      const vk::InstanceDriver                m_vki;
 +      CustomInstance                                  m_instance;
 +      const vk::InstanceDriver&               m_vki;
        const vk::VkPhysicalDevice              m_physicalDevice;
        const Unique<vk::VkDevice>              m_logicalDevice;
-       static SharedPtr<InstanceAndDevice>     m_instanceA;
-       static SharedPtr<InstanceAndDevice>     m_instanceB;
  };
- SharedPtr<InstanceAndDevice>          InstanceAndDevice::m_instanceA;
- SharedPtr<InstanceAndDevice>          InstanceAndDevice::m_instanceB;
  
  
  vk::VkQueue getQueue (const vk::DeviceInterface&      vkd,
@@@ -983,18 -1055,22 +966,20 @@@ private
        const de::UniquePtr<OperationSupport>                           m_supportReadOp;
        const NotSupportedChecker                                                       m_notSupportedChecker; // Must declare before VkInstance to effectively reduce runtimes!
  
 -      InstanceAndDevice                                                                       m_instanceAndDeviceA;
 -      const vk::Unique<vk::VkInstance>&                                       m_instanceA;
 +      const bool                                                                                      m_getMemReq2Supported;
  
 -      const vk::InstanceDriver                                                        m_vkiA;
++      InstanceAndDevice                                                                       m_instanceAndDeviceA;
 +      const vk::VkInstance                                                            m_instanceA;
 +      const vk::InstanceDriver&                                                       m_vkiA;
        const vk::VkPhysicalDevice                                                      m_physicalDeviceA;
        const std::vector<vk::VkQueueFamilyProperties>          m_queueFamiliesA;
        const std::vector<deUint32>                                                     m_queueFamilyIndicesA;
        const vk::Unique<vk::VkDevice>&                                         m_deviceA;
        const vk::DeviceDriver                                                          m_vkdA;
  
 -      const vk::Unique<vk::VkInstance>&                                       m_instanceB;
 -      const vk::InstanceDriver                                                        m_vkiB;
+       InstanceAndDevice                                                                       m_instanceAndDeviceB;
 +      const vk::VkInstance                                                            m_instanceB;
 +      const vk::InstanceDriver&                                                       m_vkiB;
        const vk::VkPhysicalDevice                                                      m_physicalDeviceB;
        const std::vector<vk::VkQueueFamilyProperties>          m_queueFamiliesB;
        const std::vector<deUint32>                                                     m_queueFamilyIndicesB;
@@@ -1018,23 -1094,27 +1003,25 @@@ SharingTestInstance::SharingTestInstanc
        , m_supportWriteOp                      (makeOperationSupport(config.writeOp, config.resource))
        , m_supportReadOp                       (makeOperationSupport(config.readOp, config.resource))
        , m_notSupportedChecker         (context, m_config, *m_supportWriteOp, *m_supportReadOp)
 +      , m_getMemReq2Supported         (vk::isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_get_memory_requirements2"))
  
-       , m_instanceA                           (InstanceAndDevice::getInstanceA(context))
-       , m_vkiA                                        (InstanceAndDevice::getDriverA())
-       , m_physicalDeviceA                     (InstanceAndDevice::getPhysicalDeviceA())
+       , m_instanceAndDeviceA          (context, config)
+       , m_instanceA                           (m_instanceAndDeviceA.getInstance())
 -
 -      , m_vkiA                                        (context.getPlatformInterface(), *m_instanceA) // \todo [2017-06-13 pyry] Provide correct extension list
 -      , m_physicalDeviceA                     (getPhysicalDevice(m_vkiA, *m_instanceA, context.getTestContext().getCommandLine()))
++      , m_vkiA                                        (m_instanceAndDeviceA.getDriver())
++      , m_physicalDeviceA                     (m_instanceAndDeviceA.getPhysicalDevice())
        , m_queueFamiliesA                      (vk::getPhysicalDeviceQueueFamilyProperties(m_vkiA, m_physicalDeviceA))
        , m_queueFamilyIndicesA         (getFamilyIndices(m_queueFamiliesA))
-       , m_deviceA                                     (InstanceAndDevice::getDeviceA())
 -      , m_getMemReq2Supported         (vk::isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_get_memory_requirements2"))
+       , m_deviceA                                     (m_instanceAndDeviceA.getDevice())
 -      , m_vkdA                                        (context.getPlatformInterface(), *m_instanceA, *m_deviceA)
 +      , m_vkdA                                        (context.getPlatformInterface(), m_instanceA, *m_deviceA)
  
-       , m_instanceB                           (InstanceAndDevice::getInstanceB(context))
-       , m_vkiB                                        (InstanceAndDevice::getDriverB())
-       , m_physicalDeviceB                     (InstanceAndDevice::getPhysicalDeviceB())
+       , m_instanceAndDeviceB          (context, config)
+       , m_instanceB                           (m_instanceAndDeviceB.getInstance())
 -
 -      , m_vkiB                                        (context.getPlatformInterface(), *m_instanceB) // \todo [2017-06-13 pyry] Provide correct extension list
 -      , m_physicalDeviceB                     (getPhysicalDevice(m_vkiB, *m_instanceB, getDeviceId(m_vkiA, m_physicalDeviceA)))
++      , m_vkiB                                        (m_instanceAndDeviceB.getDriver())
++      , m_physicalDeviceB                     (m_instanceAndDeviceB.getPhysicalDevice())
        , m_queueFamiliesB                      (vk::getPhysicalDeviceQueueFamilyProperties(m_vkiB, m_physicalDeviceB))
        , m_queueFamilyIndicesB         (getFamilyIndices(m_queueFamiliesB))
-       , m_deviceB                                     (InstanceAndDevice::getDeviceB())
+       , m_deviceB                                     (m_instanceAndDeviceB.getDevice())
 -      , m_vkdB                                        (context.getPlatformInterface(), *m_instanceB, *m_deviceB)
 +      , m_vkdB                                        (context.getPlatformInterface(), m_instanceB, *m_deviceB)
  
        , m_semaphoreHandleType         (m_config.semaphoreHandleType)
        , m_memoryHandleType            (m_config.memoryHandleType)
@@@ -1058,16 -1138,16 +1045,16 @@@ tcu::TestStatus SharingTestInstance::it
                                                                                                                                        "WriteQueue-" + de::toString(queueFamilyA) + "-ReadQueue-" + de::toString(queueFamilyB),
                                                                                                                                        "WriteQueue-" + de::toString(queueFamilyA) + "-ReadQueue-" + de::toString(queueFamilyB));
  
-               const vk::Unique<vk::VkSemaphore>               semaphoreA                      (createExportableSemaphore(m_vkdA, *m_deviceA, m_semaphoreHandleType));
-               const vk::Unique<vk::VkSemaphore>               semaphoreB                      (createSemaphore(m_vkdB, *m_deviceB));
 -      const vk::Unique<vk::VkSemaphore>               semaphoreA                      (createExportableSemaphoreType(m_vkdA, *m_deviceA, m_config.semaphoreType, m_semaphoreHandleType));
 -      const vk::Unique<vk::VkSemaphore>               semaphoreB                      (createSemaphoreType(m_vkdB, *m_deviceB, m_config.semaphoreType));
++              const vk::Unique<vk::VkSemaphore>               semaphoreA                      (createExportableSemaphoreType(m_vkdA, *m_deviceA, m_config.semaphoreType, m_semaphoreHandleType));
++              const vk::Unique<vk::VkSemaphore>               semaphoreB                      (createSemaphoreType(m_vkdB, *m_deviceB, m_config.semaphoreType));
  
 -      deUint32                                                                exportedMemoryTypeIndex = ~0U;
 -      const de::UniquePtr<Resource>                   resourceA                       (createResource(m_vkdA, *m_deviceA, m_config.resource, m_queueFamilyIndicesA, *m_supportReadOp, *m_supportWriteOp, m_memoryHandleType, exportedMemoryTypeIndex, m_config.dedicated, m_getMemReq2Supported));
 +              deUint32                                                                exportedMemoryTypeIndex = ~0U;
 +              const de::UniquePtr<Resource>                   resourceA                       (createResource(m_vkdA, *m_deviceA, m_config.resource, m_queueFamilyIndicesA, *m_supportReadOp, *m_supportWriteOp, m_memoryHandleType, exportedMemoryTypeIndex, m_config.dedicated, m_getMemReq2Supported));
  
 -      NativeHandle                                                    nativeMemoryHandle;
 -      getMemoryNative(m_vkdA, *m_deviceA, resourceA->getMemory(), m_memoryHandleType, nativeMemoryHandle);
 +              NativeHandle                                                    nativeMemoryHandle;
 +              getMemoryNative(m_vkdA, *m_deviceA, resourceA->getMemory(), m_memoryHandleType, nativeMemoryHandle);
  
 -      const de::UniquePtr<Resource>                   resourceB                       (importResource(m_vkdB, *m_deviceB, m_config.resource, m_queueFamilyIndicesB, *m_supportReadOp, *m_supportWriteOp, nativeMemoryHandle, m_memoryHandleType, exportedMemoryTypeIndex, m_config.dedicated));
 +              const de::UniquePtr<Resource>                   resourceB                       (importResource(m_vkdB, *m_deviceB, m_config.resource, m_queueFamilyIndicesB, *m_supportReadOp, *m_supportWriteOp, nativeMemoryHandle, m_memoryHandleType, exportedMemoryTypeIndex, m_config.dedicated));
  
  
                const vk::VkQueue                                               queueA                          (getQueue(m_vkdA, *m_deviceA, queueFamilyA));
@@@ -1845,42 -2761,184 +2761,180 @@@ public
                m_image = de::MovePtr<Image>(new Image(
                        vk, device, allocator, makeImageCreateInfo(VK_IMAGE_TYPE_2D, m_imageExtent, format, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT), MemoryRequirement::Any));
  
-               // Image data will be copied here, so it can be read on the host.
-               m_hostBuffer = de::MovePtr<Buffer>(new Buffer(
-                       vk, device, allocator, makeBufferCreateInfo(m_resource.getBuffer().size, VK_BUFFER_USAGE_TRANSFER_DST_BIT), MemoryRequirement::HostVisible));
+               // Image data will be copied here, so it can be read on the host.
+               m_hostBuffer = de::MovePtr<Buffer>(new Buffer(
+                       vk, device, allocator, makeBufferCreateInfo(m_resource.getBuffer().size, VK_BUFFER_USAGE_TRANSFER_DST_BIT), MemoryRequirement::HostVisible));
+       }
+       void recordCommands (const VkCommandBuffer cmdBuffer)
+       {
+               const DeviceInterface&  vk                      = m_context.getDeviceInterface();
 -              const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_subresourceLayers, m_imageExtent);
++              const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_imageExtent, m_subresourceLayers);
+               // Resource -> Image
+               {
+                       const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
+                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
+                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+                               **m_image, m_subresourceRange);
+                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                       vk.cmdCopyBufferToImage(cmdBuffer, m_resource.getBuffer().handle, **m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
+               }
+               // Image -> Host buffer
+               {
+                       const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
+                               VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+                               **m_image, m_subresourceRange);
+                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                       vk.cmdCopyImageToBuffer(cmdBuffer, **m_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **m_hostBuffer, 1u, &copyRegion);
+                       const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_hostBuffer, 0u, m_resource.getBuffer().size);
+                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+               }
+       }
+       SyncInfo getInSyncInfo (void) const
+       {
+               const SyncInfo syncInfo =
+               {
+                       VK_PIPELINE_STAGE_TRANSFER_BIT,         // VkPipelineStageFlags         stageMask;
+                       VK_ACCESS_TRANSFER_READ_BIT,            // VkAccessFlags                        accessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                      // VkImageLayout                        imageLayout;
+               };
+               return syncInfo;
+       }
+       SyncInfo getOutSyncInfo (void) const
+       {
+               return emptySyncInfo;
+       }
+       Data getData (void) const
+       {
+               return getHostBufferData(m_context, *m_hostBuffer, m_resource.getBuffer().size);
+       }
+       void setData (const Data& data)
+       {
+               setHostBufferData(m_context, *m_hostBuffer, data);
+       }
+ private:
+       OperationContext&                               m_context;
+       Resource&                                               m_resource;
+       const VkImageSubresourceRange   m_subresourceRange;
+       const VkImageSubresourceLayers  m_subresourceLayers;
+       de::MovePtr<Buffer>                             m_hostBuffer;
+       de::MovePtr<Image>                              m_image;
+       VkExtent3D                                              m_imageExtent;
+ };
+ class Support : public OperationSupport
+ {
+ public:
+       Support (const ResourceDescription& resourceDesc, const AccessMode mode)
+               : m_mode                                (mode)
+               , m_resourceType                (resourceDesc.type)
+               , m_requiredQueueFlags  (resourceDesc.type == RESOURCE_TYPE_IMAGE && isDepthStencilFormat(resourceDesc.imageFormat) ? VK_QUEUE_GRAPHICS_BIT : VK_QUEUE_TRANSFER_BIT)
+       {
+               // From spec:
+               //   Because depth or stencil aspect buffer to image copies may require format conversions on some implementations,
+               //   they are not supported on queues that do not support graphics.
+               DE_ASSERT(m_mode == ACCESS_MODE_READ || m_mode == ACCESS_MODE_WRITE);
+               DE_ASSERT(m_mode == ACCESS_MODE_READ || resourceDesc.type != RESOURCE_TYPE_BUFFER);
+               DE_ASSERT(m_mode == ACCESS_MODE_WRITE || resourceDesc.type != RESOURCE_TYPE_IMAGE);
+       }
+       deUint32 getInResourceUsageFlags (void) const
+       {
+               if (m_resourceType == RESOURCE_TYPE_IMAGE)
+                       return m_mode == ACCESS_MODE_READ ? VK_IMAGE_USAGE_TRANSFER_SRC_BIT : 0;
+               else
+                       return m_mode == ACCESS_MODE_READ ? VK_BUFFER_USAGE_TRANSFER_SRC_BIT : 0;
+       }
+       deUint32 getOutResourceUsageFlags (void) const
+       {
+               if (m_resourceType == RESOURCE_TYPE_IMAGE)
+                       return m_mode == ACCESS_MODE_WRITE ? VK_IMAGE_USAGE_TRANSFER_DST_BIT : 0;
+               else
+                       return m_mode == ACCESS_MODE_WRITE ? VK_BUFFER_USAGE_TRANSFER_DST_BIT : 0;
+       }
+       VkQueueFlags getQueueFlags (const OperationContext& context) const
+       {
+               DE_UNREF(context);
+               return m_requiredQueueFlags;
+       }
+       de::MovePtr<Operation> build (OperationContext& context, Resource& resource) const
+       {
+               if (m_mode == ACCESS_MODE_READ)
+                       return de::MovePtr<Operation>(new ReadImplementation(context, resource));
+               else
+                       return de::MovePtr<Operation>(new WriteImplementation(context, resource));
+       }
+       de::MovePtr<Operation> build (OperationContext&, Resource&, Resource&) const
+       {
+               DE_ASSERT(0);
+               return de::MovePtr<Operation>();
+       }
+ private:
+       const AccessMode                        m_mode;
+       const enum ResourceType         m_resourceType;
+       const VkQueueFlags                      m_requiredQueueFlags;
+ };
+ class CopyImplementation : public Operation
+ {
+ public:
+       CopyImplementation (OperationContext& context, Resource& inResource, Resource& outResource)
+               : m_context             (context)
+               , m_inResource  (inResource)
+               , m_outResource (outResource)
+       {
+               DE_ASSERT(m_inResource.getType() == RESOURCE_TYPE_BUFFER);
+               DE_ASSERT(m_outResource.getType() == RESOURCE_TYPE_IMAGE);
        }
  
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
                const DeviceInterface&  vk                      = m_context.getDeviceInterface();
-               const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_imageExtent, m_subresourceLayers);
 -              const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_outResource.getImage().subresourceLayers, m_outResource.getImage().extent);
--
--              // Resource -> Image
--              {
-                       const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
++              const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_outResource.getImage().extent, m_outResource.getImage().subresourceLayers);
+               const VkBufferMemoryBarrier bufferLayoutBarrier =
+                       makeBufferMemoryBarrier(
+                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_READ_BIT,
+                               m_inResource.getBuffer().handle, 0, m_inResource.getBuffer().size);
+               const VkImageMemoryBarrier imageLayoutBarrier =
+                       makeImageMemoryBarrier(
                                (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
                                VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                               **m_image, m_subresourceRange);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
-                       vk.cmdCopyBufferToImage(cmdBuffer, m_resource.getBuffer().handle, **m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
-               }
-               // Image -> Host buffer
-               {
-                       const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
-                               VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
-                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-                               **m_image, m_subresourceRange);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                               m_outResource.getImage().handle, m_outResource.getImage().subresourceRange);
+               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL,
+                                                         1u, &bufferLayoutBarrier, 1u, &imageLayoutBarrier);
  
-                       vk.cmdCopyImageToBuffer(cmdBuffer, **m_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **m_hostBuffer, 1u, &copyRegion);
+               vk.cmdCopyBufferToImage(cmdBuffer, m_inResource.getBuffer().handle, m_outResource.getImage().handle, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
 -              }
+       }
  
-                       const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_hostBuffer, 0u, m_resource.getBuffer().size);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
-               }
+       SyncInfo getInSyncInfo (void) const
+       {
+               const SyncInfo syncInfo =
+               {
+                       VK_PIPELINE_STAGE_TRANSFER_BIT,                 // VkPipelineStageFlags         stageMask;
+                       VK_ACCESS_TRANSFER_READ_BIT,                    // VkAccessFlags                        accessMask;
+                       VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,   // VkImageLayout                        imageLayout;
+               };
+               return syncInfo;
        }
  
-       SyncInfo getSyncInfo (void) const
+       SyncInfo getOutSyncInfo (void) const
        {
                const SyncInfo syncInfo =
                {
@@@ -2099,6 -3183,82 +3179,82 @@@ private
        const VkDeviceSize              m_bufferSize;
  };
  
 -              const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_subresourceLayers, m_inResource.getImage().extent);
+ class CopyImplementation : public Operation
+ {
+ public:
+       CopyImplementation (OperationContext& context, Resource& inResource, Resource& outResource)
+               : m_context                             (context)
+               , m_inResource                  (inResource)
+               , m_outResource                 (outResource)
+               , m_subresourceRange    (makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u))
+               , m_subresourceLayers   (makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u))
+       {
+               DE_ASSERT(m_inResource.getType() == RESOURCE_TYPE_IMAGE);
+               DE_ASSERT(m_outResource.getType() == RESOURCE_TYPE_BUFFER);
+       }
+       void recordCommands (const VkCommandBuffer cmdBuffer)
+       {
+               const DeviceInterface&  vk                      = m_context.getDeviceInterface();
++              const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_inResource.getImage().extent, m_subresourceLayers);
+               {
+                       const VkImageMemoryBarrier imageLayoutBarrier = makeImageMemoryBarrier(
+                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_READ_BIT,
+                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+                               m_inResource.getImage().handle, m_subresourceRange);
+                       const VkBufferMemoryBarrier bufferLayoutBarrier = makeBufferMemoryBarrier(
+                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
+                               m_outResource.getBuffer().handle, 0, m_outResource.getBuffer().size);
+                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL,
+                                                                 1u, &bufferLayoutBarrier, 1u, &imageLayoutBarrier);
+               }
+               vk.cmdCopyImageToBuffer(cmdBuffer, m_inResource.getImage().handle, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, m_outResource.getBuffer().handle, 1u, &copyRegion);
+       }
+       SyncInfo getInSyncInfo (void) const
+       {
+               const SyncInfo syncInfo =
+               {
+                       VK_PIPELINE_STAGE_TRANSFER_BIT,         // VkPipelineStageFlags         stageMask;
+                       VK_ACCESS_TRANSFER_READ_BIT,            // VkAccessFlags                        accessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                      // VkImageLayout                        imageLayout;
+               };
+               return syncInfo;
+       }
+       SyncInfo getOutSyncInfo (void) const
+       {
+               const SyncInfo syncInfo =
+               {
+                       VK_PIPELINE_STAGE_TRANSFER_BIT,         // VkPipelineStageFlags         stageMask;
+                       VK_ACCESS_TRANSFER_WRITE_BIT,           // VkAccessFlags                        accessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                      // VkImageLayout                        imageLayout;
+               };
+               return syncInfo;
+       }
+       Data getData (void) const
+       {
+               Data data = { 0, DE_NULL };
+               return data;
+       }
+       void setData (const Data&)
+       {
+               DE_ASSERT(0);
+       }
+ private:
+       OperationContext&                               m_context;
+       Resource&                                               m_inResource;
+       Resource&                                               m_outResource;
+       const VkImageSubresourceRange   m_subresourceRange;
+       const VkImageSubresourceLayers  m_subresourceLayers;
+ };
  class Support : public OperationSupport
  {
  public:
  #include "vktSynchronizationOperationTestData.hpp"
  #include "vktSynchronizationOperationResources.hpp"
  #include "vktTestGroupUtil.hpp"
 +#include "tcuCommandLine.hpp"
  
+ #include <set>
  namespace vkt
  {
  namespace synchronization
@@@ -137,7 -155,10 +157,11 @@@ class MultiQueue
                                &context.getDeviceFeatures()                                                                    //const VkPhysicalDeviceFeatures*       pEnabledFeatures;
                        };
  
 -                      m_logicalDevice = createDevice(context.getPlatformInterface(), context.getInstance(), instance, physicalDevice, &deviceInfo);
 +                      m_logicalDevice = createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), context.getInstance(), instance, physicalDevice, &deviceInfo);
+                       if (timelineSemaphore && !context.getTimelineSemaphoreFeatures().timelineSemaphore)
+                               TCU_THROW(NotSupportedError, "Timeline semaphore not supported");
++                      m_logicalDevice = createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), context.getInstance(), instance, physicalDevice, &deviceInfo);
                        m_deviceDriver  = MovePtr<DeviceDriver>(new DeviceDriver(context.getPlatformInterface(), context.getInstance(), *m_logicalDevice));
                        m_allocator             = MovePtr<Allocator>(new SimpleAllocator(*m_deviceDriver, *m_logicalDevice, getPhysicalDeviceMemoryProperties(instance, physicalDevice)));
  
@@@ -1077,19 -1088,19 +1090,19 @@@ tcu::TestStatus testFences (Context& co
        return TestStatus::pass("synchronization-fences passed");
  }
  
- tcu::TestStatus testSemaphores (Context& context)
+ tcu::TestStatus testSemaphores (Context& context, VkSemaphoreTypeKHR semaphoreType)
  {
-       TestLog&                                        log                                     = context.getTestContext().getLog();
-       const PlatformInterface&        platformInterface       = context.getPlatformInterface();
-       const InstanceInterface&        instanceInterface       = context.getInstanceInterface();
-       const VkPhysicalDevice          physicalDevice          = context.getPhysicalDevice();
-       deUint32                                        queueFamilyIdx;
-       vk::Move<VkDevice>                      device                          = createTestDevice(platformInterface, context.getInstance(), instanceInterface, physicalDevice, context.getTestContext().getCommandLine().isValidationEnabled(), &queueFamilyIdx);
-       const DeviceDriver                      deviceInterface         (platformInterface, context.getInstance(), *device);
-       SimpleAllocator                         allocator                       (deviceInterface,
-                                                                                                        *device,
-                                                                                                        getPhysicalDeviceMemoryProperties(instanceInterface, physicalDevice));
-       const VkQueue                           queue[2]                        =
+       TestLog&                                                        log                                             = context.getTestContext().getLog();
+       const PlatformInterface&                        platformInterface               = context.getPlatformInterface();
+       const InstanceInterface&                        instanceInterface               = context.getInstanceInterface();
+       const VkPhysicalDevice                          physicalDevice                  = context.getPhysicalDevice();
+       deUint32                                                        queueFamilyIdx;
 -      vk::Move<VkDevice>                                      device                                  = createTestDevice(platformInterface, context.getInstance(), instanceInterface, physicalDevice, &queueFamilyIdx);
++      vk::Move<VkDevice>                                      device                                  = createTestDevice(platformInterface, context.getInstance(), instanceInterface, physicalDevice, context.getTestContext().getCommandLine().isValidationEnabled(), &queueFamilyIdx);
+       const DeviceDriver                                      deviceInterface                 (platformInterface, context.getInstance(), *device);
+       SimpleAllocator                                         allocator                               (deviceInterface,
+                                                                                                                                *device,
+                                                                                                                                getPhysicalDeviceMemoryProperties(instanceInterface, physicalDevice));
+       const VkQueue                                           queue[2]                                =
        {
                getDeviceQueue(deviceInterface, *device, queueFamilyIdx, 0),
                getDeviceQueue(deviceInterface, *device, queueFamilyIdx, 1)
index 01da6ed,47073a0..e225e52
mode 100644,100755..100644
@@@ -471,13 -467,13 +472,19 @@@ typedef enum VkStructureType 
      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002,
      VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000,
      VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001,
 -    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS2_FEATURES_INTEL = 1000209000,
+     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = 1000207000,
+     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = 1000207001,
+     VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = 1000207002,
+     VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = 1000207003,
+     VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = 1000207004,
+     VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = 1000207005,
 +    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000,
 +    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = 1000210000,
 +    VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001,
 +    VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = 1000210002,
 +    VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = 1000210003,
 +    VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = 1000210004,
 +    VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = 1000210005,
      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = 1000211000,
      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000,
      VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000,