VK_KHR_pipeline_executable_properties tests
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 21 May 2019 23:35:19 +0000 (18:35 -0500)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 15 Aug 2019 16:01:54 +0000 (11:01 -0500)
Components: Vulkan
New Tests: dEQP-VK.pipeline.executable_properties.*

Change-Id: I5534d945e65e645b8e43c23008b887797f4a5b85

31 files changed:
AndroidGen.mk
android/cts/master/vk-master.txt
external/vulkancts/framework/vulkan/vkBasicTypes.inl
external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
external/vulkancts/framework/vulkan/vkDeviceExtensions.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/vkInitDeviceFunctionPointers.inl
external/vulkancts/framework/vulkan/vkMandatoryFeatures.inl
external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
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/pipeline/CMakeLists.txt
external/vulkancts/modules/vulkan/pipeline/vktPipelineExecutablePropertiesTests.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/pipeline/vktPipelineExecutablePropertiesTests.hpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/pipeline/vktPipelineTests.cpp
external/vulkancts/mustpass/master/vk-default-no-waivers.txt
external/vulkancts/mustpass/master/vk-default.txt
external/vulkancts/scripts/src/extensions_data.txt
external/vulkancts/scripts/src/mandatory_features.txt
external/vulkancts/scripts/src/vulkan_core.h

index 86eed0b..7f70e3a 100644 (file)
@@ -190,6 +190,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/pipeline/vktPipelineDerivativeTests.cpp \
        external/vulkancts/modules/vulkan/pipeline/vktPipelineDynamicOffsetTests.cpp \
        external/vulkancts/modules/vulkan/pipeline/vktPipelineEarlyDestroyTests.cpp \
+       external/vulkancts/modules/vulkan/pipeline/vktPipelineExecutablePropertiesTests.cpp \
        external/vulkancts/modules/vulkan/pipeline/vktPipelineFramebufferAttachmentTests.cpp \
        external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp \
        external/vulkancts/modules/vulkan/pipeline/vktPipelineImageTests.cpp \
index c825bb6..36e265f 100644 (file)
@@ -214270,6 +214270,22 @@ dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compar
 dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compare_op_less_or_equal_clear_value_-7_wc_2_viewport_min_-12_max_12
 dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compare_op_less_or_equal_clear_value_-7_wc_6_viewport_min_-12_max_12
 dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compare_op_less_or_equal_clear_value_-7_wc_12_viewport_min_-12_max_12
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage_statistics
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage_statistics
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage_statistics
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage_statistics_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage_statistics_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage_statistics_internal_representations
+dEQP-VK.pipeline.executable_properties.compute.compute_stage
+dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics
+dEQP-VK.pipeline.executable_properties.compute.compute_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics_internal_representations
 dEQP-VK.pipeline.vertex_only.position_to_ssbo
 dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.no_access.single_descriptor.1d
 dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.no_access.single_descriptor.1d_base_mip
index 3742986..2d166d9 100644 (file)
@@ -477,6 +477,12 @@ enum VkStructureType
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT                                     = 1000259002,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT                                         = 1000261000,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT                                         = 1000265000,
+       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR           = 1000269000,
+       VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR                                                                                                     = 1000269001,
+       VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR                                                            = 1000269002,
+       VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR                                                                          = 1000269003,
+       VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR                                                                     = 1000269004,
+       VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR                                       = 1000269005,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT       = 1000276000,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT                           = 1000281000,
        VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT                         = 1000281001,
@@ -1462,6 +1468,16 @@ enum VkShaderFloatControlsIndependenceKHR
        VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM_KHR              = 0x7FFFFFFF,
 };
 
+enum VkPipelineExecutableStatisticFormatKHR
+{
+       VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR              = 0,
+       VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR               = 1,
+       VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR              = 2,
+       VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR             = 3,
+       VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_KHR_LAST,
+       VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR    = 0x7FFFFFFF,
+};
+
 enum VkDebugReportObjectTypeEXT
 {
        VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT                                                 = 0,
@@ -2150,15 +2166,17 @@ typedef deUint32 VkShaderModuleCreateFlags;
 
 enum VkPipelineCreateFlagBits
 {
-       VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT                             = 0x00000001,
-       VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                                = 0x00000002,
-       VK_PIPELINE_CREATE_DERIVATIVE_BIT                                               = 0x00000004,
-       VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT             = 0x00000008,
-       VK_PIPELINE_CREATE_DISPATCH_BASE                                                = 0x00000010,
-       VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV                                 = 0x00000020,
-       VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
-       VK_PIPELINE_CREATE_DISPATCH_BASE_KHR                                    = VK_PIPELINE_CREATE_DISPATCH_BASE,
-       VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM                                   = 0x7FFFFFFF,
+       VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT                                     = 0x00000001,
+       VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                                        = 0x00000002,
+       VK_PIPELINE_CREATE_DERIVATIVE_BIT                                                       = 0x00000004,
+       VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT                     = 0x00000008,
+       VK_PIPELINE_CREATE_DISPATCH_BASE                                                        = 0x00000010,
+       VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV                                         = 0x00000020,
+       VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR                           = 0x00000040,
+       VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR     = 0x00000080,
+       VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR         = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
+       VK_PIPELINE_CREATE_DISPATCH_BASE_KHR                                            = VK_PIPELINE_CREATE_DISPATCH_BASE,
+       VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM                                           = 0x7FFFFFFF,
 };
 typedef deUint32 VkPipelineCreateFlags;
 
@@ -2881,6 +2899,7 @@ VK_DEFINE_PLATFORM_TYPE(CAMetalLayer,                             void*);
 #define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3
 #define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION 1
 #define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION 1
+#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1
 #define VK_EXT_DEBUG_REPORT_SPEC_VERSION 9
 #define VK_NV_GLSL_SHADER_SPEC_VERSION 1
 #define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1
index 78d8ea9..97af25f 100644 (file)
@@ -164,6 +164,9 @@ virtual VkResult                    acquireProfilingLockKHR                                                 (VkDevice device, const VkAcqui
 virtual void                           releaseProfilingLockKHR                                                 (VkDevice device) const;
 virtual void                           cmdDrawIndirectCountKHR                                                 (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const;
 virtual void                           cmdDrawIndexedIndirectCountKHR                                  (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const;
+virtual VkResult                       getPipelineExecutablePropertiesKHR                              (VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, deUint32* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties) const;
+virtual VkResult                       getPipelineExecutableStatisticsKHR                              (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics) const;
+virtual VkResult                       getPipelineExecutableInternalRepresentationsKHR (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations) const;
 virtual VkResult                       debugMarkerSetObjectTagEXT                                              (VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo) const;
 virtual VkResult                       debugMarkerSetObjectNameEXT                                             (VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo) const;
 virtual void                           cmdDebugMarkerBeginEXT                                                  (VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) const;
index 99098e4..13b2a2f 100644 (file)
@@ -817,6 +817,21 @@ void DeviceDriver::cmdDrawIndexedIndirectCountKHR (VkCommandBuffer commandBuffer
        m_vk.cmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
 }
 
+VkResult DeviceDriver::getPipelineExecutablePropertiesKHR (VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, deUint32* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties) const
+{
+       return m_vk.getPipelineExecutablePropertiesKHR(device, pPipelineInfo, pExecutableCount, pProperties);
+}
+
+VkResult DeviceDriver::getPipelineExecutableStatisticsKHR (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics) const
+{
+       return m_vk.getPipelineExecutableStatisticsKHR(device, pExecutableInfo, pStatisticCount, pStatistics);
+}
+
+VkResult DeviceDriver::getPipelineExecutableInternalRepresentationsKHR (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations) const
+{
+       return m_vk.getPipelineExecutableInternalRepresentationsKHR(device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations);
+}
+
 VkResult DeviceDriver::debugMarkerSetObjectTagEXT (VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo) const
 {
        return m_vk.debugMarkerSetObjectTagEXT(device, pTagInfo);
index 5241e20..a25faa6 100644 (file)
@@ -47,5 +47,6 @@ static const char* s_allowedDeviceKhrExtensions[] =
        "VK_KHR_vulkan_memory_model",
        "VK_KHR_uniform_buffer_standard_layout",
        "VK_KHR_imageless_framebuffer",
+       "VK_KHR_pipeline_executable_properties",
 };
 
index 0119f94..0c25114 100644 (file)
@@ -30,6 +30,7 @@ namespace vk
 #define VK_NV_MESH_SHADER_EXTENSION_NAME  "VK_NV_mesh_shader"
 #define VK_KHR_MULTIVIEW_EXTENSION_NAME   "VK_KHR_multiview"
 #define DECL_KHR_PERFORMANCE_COUNTER_EXTENSION_NAME "not_existent_feature"
+#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_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion"
@@ -51,31 +52,32 @@ namespace vk
 #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, 44); }
-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, 43); }
-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, 42); }
-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, 41); }
-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, 40); }
-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, 39); }
-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, 38); }
-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, 37); }
-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, 36); }
-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, 35); }
-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, 34); }
-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, 33); }
-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, 32); }
-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, 31); }
-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, 30); }
-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, 29); }
-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, 28); }
-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, 27); }
-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, 26); }
-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, 25); }
-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, 24); }
-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, 23); }
-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, 22); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 21); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePerformanceCounterFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTER_FEATURES_KHR, DECL_KHR_PERFORMANCE_COUNTER_EXTENSION_NAME, 0, 20); }
+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, 45); }
+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, 44); }
+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, 43); }
+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, 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<VkPhysicalDevicePerformanceCounterFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_COUNTER_FEATURES_KHR, DECL_KHR_PERFORMANCE_COUNTER_EXTENSION_NAME, 0, 21); }
+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, 20); }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 19); }
 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, 18); }
 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, 17); }
@@ -124,6 +126,7 @@ static const FeatureStructMapItem featureStructCreatorMap[] =
        { 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<VkPhysicalDevicePerformanceCounterFeaturesKHR>, DECL_KHR_PERFORMANCE_COUNTER_EXTENSION_NAME, 0 },
+       { 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<VkPhysicalDeviceSamplerYcbcrConversionFeatures>, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION },
index 7a60cc0..19f2a92 100644 (file)
@@ -26,6 +26,7 @@ const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&                                  getMemoryPriorityFeatur
 const vk::VkPhysicalDeviceMeshShaderFeaturesNV&                                                        getMeshShaderFeatures                                           (void) const;
 const vk::VkPhysicalDeviceMultiviewFeatures&                                                   getMultiviewFeatures                                            (void) const;
 const vk::VkPhysicalDevicePerformanceCounterFeaturesKHR&                               getPerformanceCounterFeatures                           (void) const;
+const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&             getPipelineExecutablePropertiesFeatures         (void) const;
 const vk::VkPhysicalDeviceProtectedMemoryFeatures&                                             getProtectedMemoryFeatures                                      (void) const;
 const vk::VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV&                        getRepresentativeFragmentTestFeatures           (void) const;
 const vk::VkPhysicalDeviceSamplerYcbcrConversionFeatures&                              getSamplerYcbcrConversionFeatures                       (void) const;
index c382917..aba2ecb 100644 (file)
@@ -26,6 +26,7 @@ const vk::VkPhysicalDeviceMemoryPriorityFeaturesEXT&                                  Context::getMemoryPrior
 const vk::VkPhysicalDeviceMeshShaderFeaturesNV&                                                        Context::getMeshShaderFeatures                                                  (void) const { return m_device->getMeshShaderFeatures();                                                }
 const vk::VkPhysicalDeviceMultiviewFeatures&                                                   Context::getMultiviewFeatures                                                   (void) const { return m_device->getMultiviewFeatures();                                                 }
 const vk::VkPhysicalDevicePerformanceCounterFeaturesKHR&                               Context::getPerformanceCounterFeatures                                  (void) const { return m_device->getPerformanceCounterFeatures();                                }
+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::VkPhysicalDeviceSamplerYcbcrConversionFeatures&                              Context::getSamplerYcbcrConversionFeatures                              (void) const { return m_device->getSamplerYcbcrConversionFeatures();                    }
index 446889b..cc76116 100644 (file)
@@ -26,6 +26,7 @@ const VkPhysicalDeviceMemoryPriorityFeaturesEXT&                                      getMemoryPriorityFeatures
 const VkPhysicalDeviceMeshShaderFeaturesNV&                                                    getMeshShaderFeatures                                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMeshShaderFeaturesNV>();                                                  }
 const VkPhysicalDeviceMultiviewFeatures&                                                       getMultiviewFeatures                                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMultiviewFeatures>();                                                             }
 const VkPhysicalDevicePerformanceCounterFeaturesKHR&                           getPerformanceCounterFeatures                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePerformanceCounterFeaturesKHR>();                                 }
+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 VkPhysicalDeviceSamplerYcbcrConversionFeatures&                          getSamplerYcbcrConversionFeatures                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSamplerYcbcrConversionFeatures>();                                }
index 0733196..a26a452 100644 (file)
@@ -164,6 +164,9 @@ AcquireProfilingLockKHRFunc                                                 acquireProfilingLockKHR;
 ReleaseProfilingLockKHRFunc                                                    releaseProfilingLockKHR;
 CmdDrawIndirectCountKHRFunc                                                    cmdDrawIndirectCountKHR;
 CmdDrawIndexedIndirectCountKHRFunc                                     cmdDrawIndexedIndirectCountKHR;
+GetPipelineExecutablePropertiesKHRFunc                         getPipelineExecutablePropertiesKHR;
+GetPipelineExecutableStatisticsKHRFunc                         getPipelineExecutableStatisticsKHR;
+GetPipelineExecutableInternalRepresentationsKHRFunc    getPipelineExecutableInternalRepresentationsKHR;
 DebugMarkerSetObjectTagEXTFunc                                         debugMarkerSetObjectTagEXT;
 DebugMarkerSetObjectNameEXTFunc                                                debugMarkerSetObjectNameEXT;
 CmdDebugMarkerBeginEXTFunc                                                     cmdDebugMarkerBeginEXT;
index d6d0406..876cf4c 100644 (file)
@@ -275,6 +275,12 @@ void getDeviceExtensionFunctions (deUint32 apiVersion, ::std::string extName, ::
                functions.push_back("vkCmdDrawIndirectCountKHR");
                functions.push_back("vkCmdDrawIndexedIndirectCountKHR");
        }
+       else if (extName == "VK_KHR_pipeline_executable_properties")
+       {
+               functions.push_back("vkGetPipelineExecutablePropertiesKHR");
+               functions.push_back("vkGetPipelineExecutableStatisticsKHR");
+               functions.push_back("vkGetPipelineExecutableInternalRepresentationsKHR");
+       }
        else if (extName == "VK_EXT_debug_marker")
        {
                functions.push_back("vkDebugMarkerSetObjectTagEXT");
@@ -534,6 +540,7 @@ void getDeviceExtensionFunctions (deUint32 apiVersion, ::std::string extName, ::
        "VK_KHR_bind_memory2",
        "VK_KHR_maintenance3",
        "VK_KHR_draw_indirect_count",
+       "VK_KHR_pipeline_executable_properties",
        "VK_EXT_debug_marker",
        "VK_EXT_transform_feedback",
        "VK_NVX_image_view_handle",
index 19ae21f..74cad91 100644 (file)
@@ -239,6 +239,9 @@ typedef VKAPI_ATTR VkResult                         (VKAPI_CALL* BindImageMemory2KHRFunc)
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* GetDescriptorSetLayoutSupportKHRFunc)                                                                      (VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawIndirectCountKHRFunc)                                                                                       (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* CmdDrawIndexedIndirectCountKHRFunc)                                                                        (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPipelineExecutablePropertiesKHRFunc)                                                            (VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, deUint32* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPipelineExecutableStatisticsKHRFunc)                                                            (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics);
+typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* GetPipelineExecutableInternalRepresentationsKHRFunc)                                       (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
 typedef VKAPI_ATTR VkResult                            (VKAPI_CALL* CreateDebugReportCallbackEXTFunc)                                                                          (VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* DestroyDebugReportCallbackEXTFunc)                                                                         (VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator);
 typedef VKAPI_ATTR void                                        (VKAPI_CALL* DebugReportMessageEXTFunc)                                                                                         (VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, deUint64 object, deUintptr location, deInt32 messageCode, const char* pLayerPrefix, const char* pMessage);
index 59d2165..9d56a25 100644 (file)
@@ -851,6 +851,36 @@ template<> VkStructureType getStructureType<VkPhysicalDeviceUniformBufferStandar
        return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPipelineInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPipelineExecutablePropertiesKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPipelineExecutableInfoKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPipelineExecutableStatisticKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR;
+}
+
+template<> VkStructureType getStructureType<VkPipelineExecutableInternalRepresentationKHR> (void)
+{
+       return VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR;
+}
+
 template<> VkStructureType getStructureType<VkDebugReportCallbackCreateInfoEXT> (void)
 {
        return VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
index 8f10dee..3e2c3ab 100644 (file)
 /* WARNING: This is auto-generated file. Do not modify, since changes will
  * be lost! Modify the generating script instead.
  */
-m_vk.getDeviceProcAddr                                                         = (GetDeviceProcAddrFunc)                                                               GET_PROC_ADDR("vkGetDeviceProcAddr");
-m_vk.destroyDevice                                                                     = (DestroyDeviceFunc)                                                                   GET_PROC_ADDR("vkDestroyDevice");
-m_vk.getDeviceQueue                                                                    = (GetDeviceQueueFunc)                                                                  GET_PROC_ADDR("vkGetDeviceQueue");
-m_vk.queueSubmit                                                                       = (QueueSubmitFunc)                                                                             GET_PROC_ADDR("vkQueueSubmit");
-m_vk.queueWaitIdle                                                                     = (QueueWaitIdleFunc)                                                                   GET_PROC_ADDR("vkQueueWaitIdle");
-m_vk.deviceWaitIdle                                                                    = (DeviceWaitIdleFunc)                                                                  GET_PROC_ADDR("vkDeviceWaitIdle");
-m_vk.allocateMemory                                                                    = (AllocateMemoryFunc)                                                                  GET_PROC_ADDR("vkAllocateMemory");
-m_vk.freeMemory                                                                                = (FreeMemoryFunc)                                                                              GET_PROC_ADDR("vkFreeMemory");
-m_vk.mapMemory                                                                         = (MapMemoryFunc)                                                                               GET_PROC_ADDR("vkMapMemory");
-m_vk.unmapMemory                                                                       = (UnmapMemoryFunc)                                                                             GET_PROC_ADDR("vkUnmapMemory");
-m_vk.flushMappedMemoryRanges                                           = (FlushMappedMemoryRangesFunc)                                                 GET_PROC_ADDR("vkFlushMappedMemoryRanges");
-m_vk.invalidateMappedMemoryRanges                                      = (InvalidateMappedMemoryRangesFunc)                                    GET_PROC_ADDR("vkInvalidateMappedMemoryRanges");
-m_vk.getDeviceMemoryCommitment                                         = (GetDeviceMemoryCommitmentFunc)                                               GET_PROC_ADDR("vkGetDeviceMemoryCommitment");
-m_vk.bindBufferMemory                                                          = (BindBufferMemoryFunc)                                                                GET_PROC_ADDR("vkBindBufferMemory");
-m_vk.bindImageMemory                                                           = (BindImageMemoryFunc)                                                                 GET_PROC_ADDR("vkBindImageMemory");
-m_vk.getBufferMemoryRequirements                                       = (GetBufferMemoryRequirementsFunc)                                             GET_PROC_ADDR("vkGetBufferMemoryRequirements");
-m_vk.getImageMemoryRequirements                                                = (GetImageMemoryRequirementsFunc)                                              GET_PROC_ADDR("vkGetImageMemoryRequirements");
-m_vk.getImageSparseMemoryRequirements                          = (GetImageSparseMemoryRequirementsFunc)                                GET_PROC_ADDR("vkGetImageSparseMemoryRequirements");
-m_vk.queueBindSparse                                                           = (QueueBindSparseFunc)                                                                 GET_PROC_ADDR("vkQueueBindSparse");
-m_vk.createFence                                                                       = (CreateFenceFunc)                                                                             GET_PROC_ADDR("vkCreateFence");
-m_vk.destroyFence                                                                      = (DestroyFenceFunc)                                                                    GET_PROC_ADDR("vkDestroyFence");
-m_vk.resetFences                                                                       = (ResetFencesFunc)                                                                             GET_PROC_ADDR("vkResetFences");
-m_vk.getFenceStatus                                                                    = (GetFenceStatusFunc)                                                                  GET_PROC_ADDR("vkGetFenceStatus");
-m_vk.waitForFences                                                                     = (WaitForFencesFunc)                                                                   GET_PROC_ADDR("vkWaitForFences");
-m_vk.createSemaphore                                                           = (CreateSemaphoreFunc)                                                                 GET_PROC_ADDR("vkCreateSemaphore");
-m_vk.destroySemaphore                                                          = (DestroySemaphoreFunc)                                                                GET_PROC_ADDR("vkDestroySemaphore");
-m_vk.createEvent                                                                       = (CreateEventFunc)                                                                             GET_PROC_ADDR("vkCreateEvent");
-m_vk.destroyEvent                                                                      = (DestroyEventFunc)                                                                    GET_PROC_ADDR("vkDestroyEvent");
-m_vk.getEventStatus                                                                    = (GetEventStatusFunc)                                                                  GET_PROC_ADDR("vkGetEventStatus");
-m_vk.setEvent                                                                          = (SetEventFunc)                                                                                GET_PROC_ADDR("vkSetEvent");
-m_vk.resetEvent                                                                                = (ResetEventFunc)                                                                              GET_PROC_ADDR("vkResetEvent");
-m_vk.createQueryPool                                                           = (CreateQueryPoolFunc)                                                                 GET_PROC_ADDR("vkCreateQueryPool");
-m_vk.destroyQueryPool                                                          = (DestroyQueryPoolFunc)                                                                GET_PROC_ADDR("vkDestroyQueryPool");
-m_vk.getQueryPoolResults                                                       = (GetQueryPoolResultsFunc)                                                             GET_PROC_ADDR("vkGetQueryPoolResults");
-m_vk.createBuffer                                                                      = (CreateBufferFunc)                                                                    GET_PROC_ADDR("vkCreateBuffer");
-m_vk.destroyBuffer                                                                     = (DestroyBufferFunc)                                                                   GET_PROC_ADDR("vkDestroyBuffer");
-m_vk.createBufferView                                                          = (CreateBufferViewFunc)                                                                GET_PROC_ADDR("vkCreateBufferView");
-m_vk.destroyBufferView                                                         = (DestroyBufferViewFunc)                                                               GET_PROC_ADDR("vkDestroyBufferView");
-m_vk.createImage                                                                       = (CreateImageFunc)                                                                             GET_PROC_ADDR("vkCreateImage");
-m_vk.destroyImage                                                                      = (DestroyImageFunc)                                                                    GET_PROC_ADDR("vkDestroyImage");
-m_vk.getImageSubresourceLayout                                         = (GetImageSubresourceLayoutFunc)                                               GET_PROC_ADDR("vkGetImageSubresourceLayout");
-m_vk.createImageView                                                           = (CreateImageViewFunc)                                                                 GET_PROC_ADDR("vkCreateImageView");
-m_vk.destroyImageView                                                          = (DestroyImageViewFunc)                                                                GET_PROC_ADDR("vkDestroyImageView");
-m_vk.createShaderModule                                                                = (CreateShaderModuleFunc)                                                              GET_PROC_ADDR("vkCreateShaderModule");
-m_vk.destroyShaderModule                                                       = (DestroyShaderModuleFunc)                                                             GET_PROC_ADDR("vkDestroyShaderModule");
-m_vk.createPipelineCache                                                       = (CreatePipelineCacheFunc)                                                             GET_PROC_ADDR("vkCreatePipelineCache");
-m_vk.destroyPipelineCache                                                      = (DestroyPipelineCacheFunc)                                                    GET_PROC_ADDR("vkDestroyPipelineCache");
-m_vk.getPipelineCacheData                                                      = (GetPipelineCacheDataFunc)                                                    GET_PROC_ADDR("vkGetPipelineCacheData");
-m_vk.mergePipelineCaches                                                       = (MergePipelineCachesFunc)                                                             GET_PROC_ADDR("vkMergePipelineCaches");
-m_vk.createGraphicsPipelines                                           = (CreateGraphicsPipelinesFunc)                                                 GET_PROC_ADDR("vkCreateGraphicsPipelines");
-m_vk.createComputePipelines                                                    = (CreateComputePipelinesFunc)                                                  GET_PROC_ADDR("vkCreateComputePipelines");
-m_vk.destroyPipeline                                                           = (DestroyPipelineFunc)                                                                 GET_PROC_ADDR("vkDestroyPipeline");
-m_vk.createPipelineLayout                                                      = (CreatePipelineLayoutFunc)                                                    GET_PROC_ADDR("vkCreatePipelineLayout");
-m_vk.destroyPipelineLayout                                                     = (DestroyPipelineLayoutFunc)                                                   GET_PROC_ADDR("vkDestroyPipelineLayout");
-m_vk.createSampler                                                                     = (CreateSamplerFunc)                                                                   GET_PROC_ADDR("vkCreateSampler");
-m_vk.destroySampler                                                                    = (DestroySamplerFunc)                                                                  GET_PROC_ADDR("vkDestroySampler");
-m_vk.createDescriptorSetLayout                                         = (CreateDescriptorSetLayoutFunc)                                               GET_PROC_ADDR("vkCreateDescriptorSetLayout");
-m_vk.destroyDescriptorSetLayout                                                = (DestroyDescriptorSetLayoutFunc)                                              GET_PROC_ADDR("vkDestroyDescriptorSetLayout");
-m_vk.createDescriptorPool                                                      = (CreateDescriptorPoolFunc)                                                    GET_PROC_ADDR("vkCreateDescriptorPool");
-m_vk.destroyDescriptorPool                                                     = (DestroyDescriptorPoolFunc)                                                   GET_PROC_ADDR("vkDestroyDescriptorPool");
-m_vk.resetDescriptorPool                                                       = (ResetDescriptorPoolFunc)                                                             GET_PROC_ADDR("vkResetDescriptorPool");
-m_vk.allocateDescriptorSets                                                    = (AllocateDescriptorSetsFunc)                                                  GET_PROC_ADDR("vkAllocateDescriptorSets");
-m_vk.freeDescriptorSets                                                                = (FreeDescriptorSetsFunc)                                                              GET_PROC_ADDR("vkFreeDescriptorSets");
-m_vk.updateDescriptorSets                                                      = (UpdateDescriptorSetsFunc)                                                    GET_PROC_ADDR("vkUpdateDescriptorSets");
-m_vk.createFramebuffer                                                         = (CreateFramebufferFunc)                                                               GET_PROC_ADDR("vkCreateFramebuffer");
-m_vk.destroyFramebuffer                                                                = (DestroyFramebufferFunc)                                                              GET_PROC_ADDR("vkDestroyFramebuffer");
-m_vk.createRenderPass                                                          = (CreateRenderPassFunc)                                                                GET_PROC_ADDR("vkCreateRenderPass");
-m_vk.destroyRenderPass                                                         = (DestroyRenderPassFunc)                                                               GET_PROC_ADDR("vkDestroyRenderPass");
-m_vk.getRenderAreaGranularity                                          = (GetRenderAreaGranularityFunc)                                                GET_PROC_ADDR("vkGetRenderAreaGranularity");
-m_vk.createCommandPool                                                         = (CreateCommandPoolFunc)                                                               GET_PROC_ADDR("vkCreateCommandPool");
-m_vk.destroyCommandPool                                                                = (DestroyCommandPoolFunc)                                                              GET_PROC_ADDR("vkDestroyCommandPool");
-m_vk.resetCommandPool                                                          = (ResetCommandPoolFunc)                                                                GET_PROC_ADDR("vkResetCommandPool");
-m_vk.allocateCommandBuffers                                                    = (AllocateCommandBuffersFunc)                                                  GET_PROC_ADDR("vkAllocateCommandBuffers");
-m_vk.freeCommandBuffers                                                                = (FreeCommandBuffersFunc)                                                              GET_PROC_ADDR("vkFreeCommandBuffers");
-m_vk.beginCommandBuffer                                                                = (BeginCommandBufferFunc)                                                              GET_PROC_ADDR("vkBeginCommandBuffer");
-m_vk.endCommandBuffer                                                          = (EndCommandBufferFunc)                                                                GET_PROC_ADDR("vkEndCommandBuffer");
-m_vk.resetCommandBuffer                                                                = (ResetCommandBufferFunc)                                                              GET_PROC_ADDR("vkResetCommandBuffer");
-m_vk.cmdBindPipeline                                                           = (CmdBindPipelineFunc)                                                                 GET_PROC_ADDR("vkCmdBindPipeline");
-m_vk.cmdSetViewport                                                                    = (CmdSetViewportFunc)                                                                  GET_PROC_ADDR("vkCmdSetViewport");
-m_vk.cmdSetScissor                                                                     = (CmdSetScissorFunc)                                                                   GET_PROC_ADDR("vkCmdSetScissor");
-m_vk.cmdSetLineWidth                                                           = (CmdSetLineWidthFunc)                                                                 GET_PROC_ADDR("vkCmdSetLineWidth");
-m_vk.cmdSetDepthBias                                                           = (CmdSetDepthBiasFunc)                                                                 GET_PROC_ADDR("vkCmdSetDepthBias");
-m_vk.cmdSetBlendConstants                                                      = (CmdSetBlendConstantsFunc)                                                    GET_PROC_ADDR("vkCmdSetBlendConstants");
-m_vk.cmdSetDepthBounds                                                         = (CmdSetDepthBoundsFunc)                                                               GET_PROC_ADDR("vkCmdSetDepthBounds");
-m_vk.cmdSetStencilCompareMask                                          = (CmdSetStencilCompareMaskFunc)                                                GET_PROC_ADDR("vkCmdSetStencilCompareMask");
-m_vk.cmdSetStencilWriteMask                                                    = (CmdSetStencilWriteMaskFunc)                                                  GET_PROC_ADDR("vkCmdSetStencilWriteMask");
-m_vk.cmdSetStencilReference                                                    = (CmdSetStencilReferenceFunc)                                                  GET_PROC_ADDR("vkCmdSetStencilReference");
-m_vk.cmdBindDescriptorSets                                                     = (CmdBindDescriptorSetsFunc)                                                   GET_PROC_ADDR("vkCmdBindDescriptorSets");
-m_vk.cmdBindIndexBuffer                                                                = (CmdBindIndexBufferFunc)                                                              GET_PROC_ADDR("vkCmdBindIndexBuffer");
-m_vk.cmdBindVertexBuffers                                                      = (CmdBindVertexBuffersFunc)                                                    GET_PROC_ADDR("vkCmdBindVertexBuffers");
-m_vk.cmdDraw                                                                           = (CmdDrawFunc)                                                                                 GET_PROC_ADDR("vkCmdDraw");
-m_vk.cmdDrawIndexed                                                                    = (CmdDrawIndexedFunc)                                                                  GET_PROC_ADDR("vkCmdDrawIndexed");
-m_vk.cmdDrawIndirect                                                           = (CmdDrawIndirectFunc)                                                                 GET_PROC_ADDR("vkCmdDrawIndirect");
-m_vk.cmdDrawIndexedIndirect                                                    = (CmdDrawIndexedIndirectFunc)                                                  GET_PROC_ADDR("vkCmdDrawIndexedIndirect");
-m_vk.cmdDispatch                                                                       = (CmdDispatchFunc)                                                                             GET_PROC_ADDR("vkCmdDispatch");
-m_vk.cmdDispatchIndirect                                                       = (CmdDispatchIndirectFunc)                                                             GET_PROC_ADDR("vkCmdDispatchIndirect");
-m_vk.cmdCopyBuffer                                                                     = (CmdCopyBufferFunc)                                                                   GET_PROC_ADDR("vkCmdCopyBuffer");
-m_vk.cmdCopyImage                                                                      = (CmdCopyImageFunc)                                                                    GET_PROC_ADDR("vkCmdCopyImage");
-m_vk.cmdBlitImage                                                                      = (CmdBlitImageFunc)                                                                    GET_PROC_ADDR("vkCmdBlitImage");
-m_vk.cmdCopyBufferToImage                                                      = (CmdCopyBufferToImageFunc)                                                    GET_PROC_ADDR("vkCmdCopyBufferToImage");
-m_vk.cmdCopyImageToBuffer                                                      = (CmdCopyImageToBufferFunc)                                                    GET_PROC_ADDR("vkCmdCopyImageToBuffer");
-m_vk.cmdUpdateBuffer                                                           = (CmdUpdateBufferFunc)                                                                 GET_PROC_ADDR("vkCmdUpdateBuffer");
-m_vk.cmdFillBuffer                                                                     = (CmdFillBufferFunc)                                                                   GET_PROC_ADDR("vkCmdFillBuffer");
-m_vk.cmdClearColorImage                                                                = (CmdClearColorImageFunc)                                                              GET_PROC_ADDR("vkCmdClearColorImage");
-m_vk.cmdClearDepthStencilImage                                         = (CmdClearDepthStencilImageFunc)                                               GET_PROC_ADDR("vkCmdClearDepthStencilImage");
-m_vk.cmdClearAttachments                                                       = (CmdClearAttachmentsFunc)                                                             GET_PROC_ADDR("vkCmdClearAttachments");
-m_vk.cmdResolveImage                                                           = (CmdResolveImageFunc)                                                                 GET_PROC_ADDR("vkCmdResolveImage");
-m_vk.cmdSetEvent                                                                       = (CmdSetEventFunc)                                                                             GET_PROC_ADDR("vkCmdSetEvent");
-m_vk.cmdResetEvent                                                                     = (CmdResetEventFunc)                                                                   GET_PROC_ADDR("vkCmdResetEvent");
-m_vk.cmdWaitEvents                                                                     = (CmdWaitEventsFunc)                                                                   GET_PROC_ADDR("vkCmdWaitEvents");
-m_vk.cmdPipelineBarrier                                                                = (CmdPipelineBarrierFunc)                                                              GET_PROC_ADDR("vkCmdPipelineBarrier");
-m_vk.cmdBeginQuery                                                                     = (CmdBeginQueryFunc)                                                                   GET_PROC_ADDR("vkCmdBeginQuery");
-m_vk.cmdEndQuery                                                                       = (CmdEndQueryFunc)                                                                             GET_PROC_ADDR("vkCmdEndQuery");
-m_vk.cmdResetQueryPool                                                         = (CmdResetQueryPoolFunc)                                                               GET_PROC_ADDR("vkCmdResetQueryPool");
-m_vk.cmdWriteTimestamp                                                         = (CmdWriteTimestampFunc)                                                               GET_PROC_ADDR("vkCmdWriteTimestamp");
-m_vk.cmdCopyQueryPoolResults                                           = (CmdCopyQueryPoolResultsFunc)                                                 GET_PROC_ADDR("vkCmdCopyQueryPoolResults");
-m_vk.cmdPushConstants                                                          = (CmdPushConstantsFunc)                                                                GET_PROC_ADDR("vkCmdPushConstants");
-m_vk.cmdBeginRenderPass                                                                = (CmdBeginRenderPassFunc)                                                              GET_PROC_ADDR("vkCmdBeginRenderPass");
-m_vk.cmdNextSubpass                                                                    = (CmdNextSubpassFunc)                                                                  GET_PROC_ADDR("vkCmdNextSubpass");
-m_vk.cmdEndRenderPass                                                          = (CmdEndRenderPassFunc)                                                                GET_PROC_ADDR("vkCmdEndRenderPass");
-m_vk.cmdExecuteCommands                                                                = (CmdExecuteCommandsFunc)                                                              GET_PROC_ADDR("vkCmdExecuteCommands");
-m_vk.bindBufferMemory2                                                         = (BindBufferMemory2Func)                                                               GET_PROC_ADDR("vkBindBufferMemory2");
+m_vk.getDeviceProcAddr                                                                 = (GetDeviceProcAddrFunc)                                                               GET_PROC_ADDR("vkGetDeviceProcAddr");
+m_vk.destroyDevice                                                                             = (DestroyDeviceFunc)                                                                   GET_PROC_ADDR("vkDestroyDevice");
+m_vk.getDeviceQueue                                                                            = (GetDeviceQueueFunc)                                                                  GET_PROC_ADDR("vkGetDeviceQueue");
+m_vk.queueSubmit                                                                               = (QueueSubmitFunc)                                                                             GET_PROC_ADDR("vkQueueSubmit");
+m_vk.queueWaitIdle                                                                             = (QueueWaitIdleFunc)                                                                   GET_PROC_ADDR("vkQueueWaitIdle");
+m_vk.deviceWaitIdle                                                                            = (DeviceWaitIdleFunc)                                                                  GET_PROC_ADDR("vkDeviceWaitIdle");
+m_vk.allocateMemory                                                                            = (AllocateMemoryFunc)                                                                  GET_PROC_ADDR("vkAllocateMemory");
+m_vk.freeMemory                                                                                        = (FreeMemoryFunc)                                                                              GET_PROC_ADDR("vkFreeMemory");
+m_vk.mapMemory                                                                                 = (MapMemoryFunc)                                                                               GET_PROC_ADDR("vkMapMemory");
+m_vk.unmapMemory                                                                               = (UnmapMemoryFunc)                                                                             GET_PROC_ADDR("vkUnmapMemory");
+m_vk.flushMappedMemoryRanges                                                   = (FlushMappedMemoryRangesFunc)                                                 GET_PROC_ADDR("vkFlushMappedMemoryRanges");
+m_vk.invalidateMappedMemoryRanges                                              = (InvalidateMappedMemoryRangesFunc)                                    GET_PROC_ADDR("vkInvalidateMappedMemoryRanges");
+m_vk.getDeviceMemoryCommitment                                                 = (GetDeviceMemoryCommitmentFunc)                                               GET_PROC_ADDR("vkGetDeviceMemoryCommitment");
+m_vk.bindBufferMemory                                                                  = (BindBufferMemoryFunc)                                                                GET_PROC_ADDR("vkBindBufferMemory");
+m_vk.bindImageMemory                                                                   = (BindImageMemoryFunc)                                                                 GET_PROC_ADDR("vkBindImageMemory");
+m_vk.getBufferMemoryRequirements                                               = (GetBufferMemoryRequirementsFunc)                                             GET_PROC_ADDR("vkGetBufferMemoryRequirements");
+m_vk.getImageMemoryRequirements                                                        = (GetImageMemoryRequirementsFunc)                                              GET_PROC_ADDR("vkGetImageMemoryRequirements");
+m_vk.getImageSparseMemoryRequirements                                  = (GetImageSparseMemoryRequirementsFunc)                                GET_PROC_ADDR("vkGetImageSparseMemoryRequirements");
+m_vk.queueBindSparse                                                                   = (QueueBindSparseFunc)                                                                 GET_PROC_ADDR("vkQueueBindSparse");
+m_vk.createFence                                                                               = (CreateFenceFunc)                                                                             GET_PROC_ADDR("vkCreateFence");
+m_vk.destroyFence                                                                              = (DestroyFenceFunc)                                                                    GET_PROC_ADDR("vkDestroyFence");
+m_vk.resetFences                                                                               = (ResetFencesFunc)                                                                             GET_PROC_ADDR("vkResetFences");
+m_vk.getFenceStatus                                                                            = (GetFenceStatusFunc)                                                                  GET_PROC_ADDR("vkGetFenceStatus");
+m_vk.waitForFences                                                                             = (WaitForFencesFunc)                                                                   GET_PROC_ADDR("vkWaitForFences");
+m_vk.createSemaphore                                                                   = (CreateSemaphoreFunc)                                                                 GET_PROC_ADDR("vkCreateSemaphore");
+m_vk.destroySemaphore                                                                  = (DestroySemaphoreFunc)                                                                GET_PROC_ADDR("vkDestroySemaphore");
+m_vk.createEvent                                                                               = (CreateEventFunc)                                                                             GET_PROC_ADDR("vkCreateEvent");
+m_vk.destroyEvent                                                                              = (DestroyEventFunc)                                                                    GET_PROC_ADDR("vkDestroyEvent");
+m_vk.getEventStatus                                                                            = (GetEventStatusFunc)                                                                  GET_PROC_ADDR("vkGetEventStatus");
+m_vk.setEvent                                                                                  = (SetEventFunc)                                                                                GET_PROC_ADDR("vkSetEvent");
+m_vk.resetEvent                                                                                        = (ResetEventFunc)                                                                              GET_PROC_ADDR("vkResetEvent");
+m_vk.createQueryPool                                                                   = (CreateQueryPoolFunc)                                                                 GET_PROC_ADDR("vkCreateQueryPool");
+m_vk.destroyQueryPool                                                                  = (DestroyQueryPoolFunc)                                                                GET_PROC_ADDR("vkDestroyQueryPool");
+m_vk.getQueryPoolResults                                                               = (GetQueryPoolResultsFunc)                                                             GET_PROC_ADDR("vkGetQueryPoolResults");
+m_vk.createBuffer                                                                              = (CreateBufferFunc)                                                                    GET_PROC_ADDR("vkCreateBuffer");
+m_vk.destroyBuffer                                                                             = (DestroyBufferFunc)                                                                   GET_PROC_ADDR("vkDestroyBuffer");
+m_vk.createBufferView                                                                  = (CreateBufferViewFunc)                                                                GET_PROC_ADDR("vkCreateBufferView");
+m_vk.destroyBufferView                                                                 = (DestroyBufferViewFunc)                                                               GET_PROC_ADDR("vkDestroyBufferView");
+m_vk.createImage                                                                               = (CreateImageFunc)                                                                             GET_PROC_ADDR("vkCreateImage");
+m_vk.destroyImage                                                                              = (DestroyImageFunc)                                                                    GET_PROC_ADDR("vkDestroyImage");
+m_vk.getImageSubresourceLayout                                                 = (GetImageSubresourceLayoutFunc)                                               GET_PROC_ADDR("vkGetImageSubresourceLayout");
+m_vk.createImageView                                                                   = (CreateImageViewFunc)                                                                 GET_PROC_ADDR("vkCreateImageView");
+m_vk.destroyImageView                                                                  = (DestroyImageViewFunc)                                                                GET_PROC_ADDR("vkDestroyImageView");
+m_vk.createShaderModule                                                                        = (CreateShaderModuleFunc)                                                              GET_PROC_ADDR("vkCreateShaderModule");
+m_vk.destroyShaderModule                                                               = (DestroyShaderModuleFunc)                                                             GET_PROC_ADDR("vkDestroyShaderModule");
+m_vk.createPipelineCache                                                               = (CreatePipelineCacheFunc)                                                             GET_PROC_ADDR("vkCreatePipelineCache");
+m_vk.destroyPipelineCache                                                              = (DestroyPipelineCacheFunc)                                                    GET_PROC_ADDR("vkDestroyPipelineCache");
+m_vk.getPipelineCacheData                                                              = (GetPipelineCacheDataFunc)                                                    GET_PROC_ADDR("vkGetPipelineCacheData");
+m_vk.mergePipelineCaches                                                               = (MergePipelineCachesFunc)                                                             GET_PROC_ADDR("vkMergePipelineCaches");
+m_vk.createGraphicsPipelines                                                   = (CreateGraphicsPipelinesFunc)                                                 GET_PROC_ADDR("vkCreateGraphicsPipelines");
+m_vk.createComputePipelines                                                            = (CreateComputePipelinesFunc)                                                  GET_PROC_ADDR("vkCreateComputePipelines");
+m_vk.destroyPipeline                                                                   = (DestroyPipelineFunc)                                                                 GET_PROC_ADDR("vkDestroyPipeline");
+m_vk.createPipelineLayout                                                              = (CreatePipelineLayoutFunc)                                                    GET_PROC_ADDR("vkCreatePipelineLayout");
+m_vk.destroyPipelineLayout                                                             = (DestroyPipelineLayoutFunc)                                                   GET_PROC_ADDR("vkDestroyPipelineLayout");
+m_vk.createSampler                                                                             = (CreateSamplerFunc)                                                                   GET_PROC_ADDR("vkCreateSampler");
+m_vk.destroySampler                                                                            = (DestroySamplerFunc)                                                                  GET_PROC_ADDR("vkDestroySampler");
+m_vk.createDescriptorSetLayout                                                 = (CreateDescriptorSetLayoutFunc)                                               GET_PROC_ADDR("vkCreateDescriptorSetLayout");
+m_vk.destroyDescriptorSetLayout                                                        = (DestroyDescriptorSetLayoutFunc)                                              GET_PROC_ADDR("vkDestroyDescriptorSetLayout");
+m_vk.createDescriptorPool                                                              = (CreateDescriptorPoolFunc)                                                    GET_PROC_ADDR("vkCreateDescriptorPool");
+m_vk.destroyDescriptorPool                                                             = (DestroyDescriptorPoolFunc)                                                   GET_PROC_ADDR("vkDestroyDescriptorPool");
+m_vk.resetDescriptorPool                                                               = (ResetDescriptorPoolFunc)                                                             GET_PROC_ADDR("vkResetDescriptorPool");
+m_vk.allocateDescriptorSets                                                            = (AllocateDescriptorSetsFunc)                                                  GET_PROC_ADDR("vkAllocateDescriptorSets");
+m_vk.freeDescriptorSets                                                                        = (FreeDescriptorSetsFunc)                                                              GET_PROC_ADDR("vkFreeDescriptorSets");
+m_vk.updateDescriptorSets                                                              = (UpdateDescriptorSetsFunc)                                                    GET_PROC_ADDR("vkUpdateDescriptorSets");
+m_vk.createFramebuffer                                                                 = (CreateFramebufferFunc)                                                               GET_PROC_ADDR("vkCreateFramebuffer");
+m_vk.destroyFramebuffer                                                                        = (DestroyFramebufferFunc)                                                              GET_PROC_ADDR("vkDestroyFramebuffer");
+m_vk.createRenderPass                                                                  = (CreateRenderPassFunc)                                                                GET_PROC_ADDR("vkCreateRenderPass");
+m_vk.destroyRenderPass                                                                 = (DestroyRenderPassFunc)                                                               GET_PROC_ADDR("vkDestroyRenderPass");
+m_vk.getRenderAreaGranularity                                                  = (GetRenderAreaGranularityFunc)                                                GET_PROC_ADDR("vkGetRenderAreaGranularity");
+m_vk.createCommandPool                                                                 = (CreateCommandPoolFunc)                                                               GET_PROC_ADDR("vkCreateCommandPool");
+m_vk.destroyCommandPool                                                                        = (DestroyCommandPoolFunc)                                                              GET_PROC_ADDR("vkDestroyCommandPool");
+m_vk.resetCommandPool                                                                  = (ResetCommandPoolFunc)                                                                GET_PROC_ADDR("vkResetCommandPool");
+m_vk.allocateCommandBuffers                                                            = (AllocateCommandBuffersFunc)                                                  GET_PROC_ADDR("vkAllocateCommandBuffers");
+m_vk.freeCommandBuffers                                                                        = (FreeCommandBuffersFunc)                                                              GET_PROC_ADDR("vkFreeCommandBuffers");
+m_vk.beginCommandBuffer                                                                        = (BeginCommandBufferFunc)                                                              GET_PROC_ADDR("vkBeginCommandBuffer");
+m_vk.endCommandBuffer                                                                  = (EndCommandBufferFunc)                                                                GET_PROC_ADDR("vkEndCommandBuffer");
+m_vk.resetCommandBuffer                                                                        = (ResetCommandBufferFunc)                                                              GET_PROC_ADDR("vkResetCommandBuffer");
+m_vk.cmdBindPipeline                                                                   = (CmdBindPipelineFunc)                                                                 GET_PROC_ADDR("vkCmdBindPipeline");
+m_vk.cmdSetViewport                                                                            = (CmdSetViewportFunc)                                                                  GET_PROC_ADDR("vkCmdSetViewport");
+m_vk.cmdSetScissor                                                                             = (CmdSetScissorFunc)                                                                   GET_PROC_ADDR("vkCmdSetScissor");
+m_vk.cmdSetLineWidth                                                                   = (CmdSetLineWidthFunc)                                                                 GET_PROC_ADDR("vkCmdSetLineWidth");
+m_vk.cmdSetDepthBias                                                                   = (CmdSetDepthBiasFunc)                                                                 GET_PROC_ADDR("vkCmdSetDepthBias");
+m_vk.cmdSetBlendConstants                                                              = (CmdSetBlendConstantsFunc)                                                    GET_PROC_ADDR("vkCmdSetBlendConstants");
+m_vk.cmdSetDepthBounds                                                                 = (CmdSetDepthBoundsFunc)                                                               GET_PROC_ADDR("vkCmdSetDepthBounds");
+m_vk.cmdSetStencilCompareMask                                                  = (CmdSetStencilCompareMaskFunc)                                                GET_PROC_ADDR("vkCmdSetStencilCompareMask");
+m_vk.cmdSetStencilWriteMask                                                            = (CmdSetStencilWriteMaskFunc)                                                  GET_PROC_ADDR("vkCmdSetStencilWriteMask");
+m_vk.cmdSetStencilReference                                                            = (CmdSetStencilReferenceFunc)                                                  GET_PROC_ADDR("vkCmdSetStencilReference");
+m_vk.cmdBindDescriptorSets                                                             = (CmdBindDescriptorSetsFunc)                                                   GET_PROC_ADDR("vkCmdBindDescriptorSets");
+m_vk.cmdBindIndexBuffer                                                                        = (CmdBindIndexBufferFunc)                                                              GET_PROC_ADDR("vkCmdBindIndexBuffer");
+m_vk.cmdBindVertexBuffers                                                              = (CmdBindVertexBuffersFunc)                                                    GET_PROC_ADDR("vkCmdBindVertexBuffers");
+m_vk.cmdDraw                                                                                   = (CmdDrawFunc)                                                                                 GET_PROC_ADDR("vkCmdDraw");
+m_vk.cmdDrawIndexed                                                                            = (CmdDrawIndexedFunc)                                                                  GET_PROC_ADDR("vkCmdDrawIndexed");
+m_vk.cmdDrawIndirect                                                                   = (CmdDrawIndirectFunc)                                                                 GET_PROC_ADDR("vkCmdDrawIndirect");
+m_vk.cmdDrawIndexedIndirect                                                            = (CmdDrawIndexedIndirectFunc)                                                  GET_PROC_ADDR("vkCmdDrawIndexedIndirect");
+m_vk.cmdDispatch                                                                               = (CmdDispatchFunc)                                                                             GET_PROC_ADDR("vkCmdDispatch");
+m_vk.cmdDispatchIndirect                                                               = (CmdDispatchIndirectFunc)                                                             GET_PROC_ADDR("vkCmdDispatchIndirect");
+m_vk.cmdCopyBuffer                                                                             = (CmdCopyBufferFunc)                                                                   GET_PROC_ADDR("vkCmdCopyBuffer");
+m_vk.cmdCopyImage                                                                              = (CmdCopyImageFunc)                                                                    GET_PROC_ADDR("vkCmdCopyImage");
+m_vk.cmdBlitImage                                                                              = (CmdBlitImageFunc)                                                                    GET_PROC_ADDR("vkCmdBlitImage");
+m_vk.cmdCopyBufferToImage                                                              = (CmdCopyBufferToImageFunc)                                                    GET_PROC_ADDR("vkCmdCopyBufferToImage");
+m_vk.cmdCopyImageToBuffer                                                              = (CmdCopyImageToBufferFunc)                                                    GET_PROC_ADDR("vkCmdCopyImageToBuffer");
+m_vk.cmdUpdateBuffer                                                                   = (CmdUpdateBufferFunc)                                                                 GET_PROC_ADDR("vkCmdUpdateBuffer");
+m_vk.cmdFillBuffer                                                                             = (CmdFillBufferFunc)                                                                   GET_PROC_ADDR("vkCmdFillBuffer");
+m_vk.cmdClearColorImage                                                                        = (CmdClearColorImageFunc)                                                              GET_PROC_ADDR("vkCmdClearColorImage");
+m_vk.cmdClearDepthStencilImage                                                 = (CmdClearDepthStencilImageFunc)                                               GET_PROC_ADDR("vkCmdClearDepthStencilImage");
+m_vk.cmdClearAttachments                                                               = (CmdClearAttachmentsFunc)                                                             GET_PROC_ADDR("vkCmdClearAttachments");
+m_vk.cmdResolveImage                                                                   = (CmdResolveImageFunc)                                                                 GET_PROC_ADDR("vkCmdResolveImage");
+m_vk.cmdSetEvent                                                                               = (CmdSetEventFunc)                                                                             GET_PROC_ADDR("vkCmdSetEvent");
+m_vk.cmdResetEvent                                                                             = (CmdResetEventFunc)                                                                   GET_PROC_ADDR("vkCmdResetEvent");
+m_vk.cmdWaitEvents                                                                             = (CmdWaitEventsFunc)                                                                   GET_PROC_ADDR("vkCmdWaitEvents");
+m_vk.cmdPipelineBarrier                                                                        = (CmdPipelineBarrierFunc)                                                              GET_PROC_ADDR("vkCmdPipelineBarrier");
+m_vk.cmdBeginQuery                                                                             = (CmdBeginQueryFunc)                                                                   GET_PROC_ADDR("vkCmdBeginQuery");
+m_vk.cmdEndQuery                                                                               = (CmdEndQueryFunc)                                                                             GET_PROC_ADDR("vkCmdEndQuery");
+m_vk.cmdResetQueryPool                                                                 = (CmdResetQueryPoolFunc)                                                               GET_PROC_ADDR("vkCmdResetQueryPool");
+m_vk.cmdWriteTimestamp                                                                 = (CmdWriteTimestampFunc)                                                               GET_PROC_ADDR("vkCmdWriteTimestamp");
+m_vk.cmdCopyQueryPoolResults                                                   = (CmdCopyQueryPoolResultsFunc)                                                 GET_PROC_ADDR("vkCmdCopyQueryPoolResults");
+m_vk.cmdPushConstants                                                                  = (CmdPushConstantsFunc)                                                                GET_PROC_ADDR("vkCmdPushConstants");
+m_vk.cmdBeginRenderPass                                                                        = (CmdBeginRenderPassFunc)                                                              GET_PROC_ADDR("vkCmdBeginRenderPass");
+m_vk.cmdNextSubpass                                                                            = (CmdNextSubpassFunc)                                                                  GET_PROC_ADDR("vkCmdNextSubpass");
+m_vk.cmdEndRenderPass                                                                  = (CmdEndRenderPassFunc)                                                                GET_PROC_ADDR("vkCmdEndRenderPass");
+m_vk.cmdExecuteCommands                                                                        = (CmdExecuteCommandsFunc)                                                              GET_PROC_ADDR("vkCmdExecuteCommands");
+m_vk.bindBufferMemory2                                                                 = (BindBufferMemory2Func)                                                               GET_PROC_ADDR("vkBindBufferMemory2");
 if (!m_vk.bindBufferMemory2)
-       m_vk.bindBufferMemory2                                                  = (BindBufferMemory2Func)                                                               GET_PROC_ADDR("vkBindBufferMemory2KHR");
-m_vk.bindImageMemory2                                                          = (BindImageMemory2Func)                                                                GET_PROC_ADDR("vkBindImageMemory2");
+       m_vk.bindBufferMemory2                                                          = (BindBufferMemory2Func)                                                               GET_PROC_ADDR("vkBindBufferMemory2KHR");
+m_vk.bindImageMemory2                                                                  = (BindImageMemory2Func)                                                                GET_PROC_ADDR("vkBindImageMemory2");
 if (!m_vk.bindImageMemory2)
-       m_vk.bindImageMemory2                                                   = (BindImageMemory2Func)                                                                GET_PROC_ADDR("vkBindImageMemory2KHR");
-m_vk.getDeviceGroupPeerMemoryFeatures                          = (GetDeviceGroupPeerMemoryFeaturesFunc)                                GET_PROC_ADDR("vkGetDeviceGroupPeerMemoryFeatures");
+       m_vk.bindImageMemory2                                                           = (BindImageMemory2Func)                                                                GET_PROC_ADDR("vkBindImageMemory2KHR");
+m_vk.getDeviceGroupPeerMemoryFeatures                                  = (GetDeviceGroupPeerMemoryFeaturesFunc)                                GET_PROC_ADDR("vkGetDeviceGroupPeerMemoryFeatures");
 if (!m_vk.getDeviceGroupPeerMemoryFeatures)
-       m_vk.getDeviceGroupPeerMemoryFeatures                   = (GetDeviceGroupPeerMemoryFeaturesFunc)                                GET_PROC_ADDR("vkGetDeviceGroupPeerMemoryFeaturesKHR");
-m_vk.cmdSetDeviceMask                                                          = (CmdSetDeviceMaskFunc)                                                                GET_PROC_ADDR("vkCmdSetDeviceMask");
+       m_vk.getDeviceGroupPeerMemoryFeatures                           = (GetDeviceGroupPeerMemoryFeaturesFunc)                                GET_PROC_ADDR("vkGetDeviceGroupPeerMemoryFeaturesKHR");
+m_vk.cmdSetDeviceMask                                                                  = (CmdSetDeviceMaskFunc)                                                                GET_PROC_ADDR("vkCmdSetDeviceMask");
 if (!m_vk.cmdSetDeviceMask)
-       m_vk.cmdSetDeviceMask                                                   = (CmdSetDeviceMaskFunc)                                                                GET_PROC_ADDR("vkCmdSetDeviceMaskKHR");
-m_vk.cmdDispatchBase                                                           = (CmdDispatchBaseFunc)                                                                 GET_PROC_ADDR("vkCmdDispatchBase");
+       m_vk.cmdSetDeviceMask                                                           = (CmdSetDeviceMaskFunc)                                                                GET_PROC_ADDR("vkCmdSetDeviceMaskKHR");
+m_vk.cmdDispatchBase                                                                   = (CmdDispatchBaseFunc)                                                                 GET_PROC_ADDR("vkCmdDispatchBase");
 if (!m_vk.cmdDispatchBase)
-       m_vk.cmdDispatchBase                                                    = (CmdDispatchBaseFunc)                                                                 GET_PROC_ADDR("vkCmdDispatchBaseKHR");
-m_vk.getImageMemoryRequirements2                                       = (GetImageMemoryRequirements2Func)                                             GET_PROC_ADDR("vkGetImageMemoryRequirements2");
+       m_vk.cmdDispatchBase                                                            = (CmdDispatchBaseFunc)                                                                 GET_PROC_ADDR("vkCmdDispatchBaseKHR");
+m_vk.getImageMemoryRequirements2                                               = (GetImageMemoryRequirements2Func)                                             GET_PROC_ADDR("vkGetImageMemoryRequirements2");
 if (!m_vk.getImageMemoryRequirements2)
-       m_vk.getImageMemoryRequirements2                                = (GetImageMemoryRequirements2Func)                                             GET_PROC_ADDR("vkGetImageMemoryRequirements2KHR");
-m_vk.getBufferMemoryRequirements2                                      = (GetBufferMemoryRequirements2Func)                                    GET_PROC_ADDR("vkGetBufferMemoryRequirements2");
+       m_vk.getImageMemoryRequirements2                                        = (GetImageMemoryRequirements2Func)                                             GET_PROC_ADDR("vkGetImageMemoryRequirements2KHR");
+m_vk.getBufferMemoryRequirements2                                              = (GetBufferMemoryRequirements2Func)                                    GET_PROC_ADDR("vkGetBufferMemoryRequirements2");
 if (!m_vk.getBufferMemoryRequirements2)
-       m_vk.getBufferMemoryRequirements2                               = (GetBufferMemoryRequirements2Func)                                    GET_PROC_ADDR("vkGetBufferMemoryRequirements2KHR");
-m_vk.getImageSparseMemoryRequirements2                         = (GetImageSparseMemoryRequirements2Func)                               GET_PROC_ADDR("vkGetImageSparseMemoryRequirements2");
+       m_vk.getBufferMemoryRequirements2                                       = (GetBufferMemoryRequirements2Func)                                    GET_PROC_ADDR("vkGetBufferMemoryRequirements2KHR");
+m_vk.getImageSparseMemoryRequirements2                                 = (GetImageSparseMemoryRequirements2Func)                               GET_PROC_ADDR("vkGetImageSparseMemoryRequirements2");
 if (!m_vk.getImageSparseMemoryRequirements2)
-       m_vk.getImageSparseMemoryRequirements2                  = (GetImageSparseMemoryRequirements2Func)                               GET_PROC_ADDR("vkGetImageSparseMemoryRequirements2KHR");
-m_vk.trimCommandPool                                                           = (TrimCommandPoolFunc)                                                                 GET_PROC_ADDR("vkTrimCommandPool");
+       m_vk.getImageSparseMemoryRequirements2                          = (GetImageSparseMemoryRequirements2Func)                               GET_PROC_ADDR("vkGetImageSparseMemoryRequirements2KHR");
+m_vk.trimCommandPool                                                                   = (TrimCommandPoolFunc)                                                                 GET_PROC_ADDR("vkTrimCommandPool");
 if (!m_vk.trimCommandPool)
-       m_vk.trimCommandPool                                                    = (TrimCommandPoolFunc)                                                                 GET_PROC_ADDR("vkTrimCommandPoolKHR");
-m_vk.getDeviceQueue2                                                           = (GetDeviceQueue2Func)                                                                 GET_PROC_ADDR("vkGetDeviceQueue2");
-m_vk.createSamplerYcbcrConversion                                      = (CreateSamplerYcbcrConversionFunc)                                    GET_PROC_ADDR("vkCreateSamplerYcbcrConversion");
+       m_vk.trimCommandPool                                                            = (TrimCommandPoolFunc)                                                                 GET_PROC_ADDR("vkTrimCommandPoolKHR");
+m_vk.getDeviceQueue2                                                                   = (GetDeviceQueue2Func)                                                                 GET_PROC_ADDR("vkGetDeviceQueue2");
+m_vk.createSamplerYcbcrConversion                                              = (CreateSamplerYcbcrConversionFunc)                                    GET_PROC_ADDR("vkCreateSamplerYcbcrConversion");
 if (!m_vk.createSamplerYcbcrConversion)
-       m_vk.createSamplerYcbcrConversion                               = (CreateSamplerYcbcrConversionFunc)                                    GET_PROC_ADDR("vkCreateSamplerYcbcrConversionKHR");
-m_vk.destroySamplerYcbcrConversion                                     = (DestroySamplerYcbcrConversionFunc)                                   GET_PROC_ADDR("vkDestroySamplerYcbcrConversion");
+       m_vk.createSamplerYcbcrConversion                                       = (CreateSamplerYcbcrConversionFunc)                                    GET_PROC_ADDR("vkCreateSamplerYcbcrConversionKHR");
+m_vk.destroySamplerYcbcrConversion                                             = (DestroySamplerYcbcrConversionFunc)                                   GET_PROC_ADDR("vkDestroySamplerYcbcrConversion");
 if (!m_vk.destroySamplerYcbcrConversion)
-       m_vk.destroySamplerYcbcrConversion                              = (DestroySamplerYcbcrConversionFunc)                                   GET_PROC_ADDR("vkDestroySamplerYcbcrConversionKHR");
-m_vk.createDescriptorUpdateTemplate                                    = (CreateDescriptorUpdateTemplateFunc)                                  GET_PROC_ADDR("vkCreateDescriptorUpdateTemplate");
+       m_vk.destroySamplerYcbcrConversion                                      = (DestroySamplerYcbcrConversionFunc)                                   GET_PROC_ADDR("vkDestroySamplerYcbcrConversionKHR");
+m_vk.createDescriptorUpdateTemplate                                            = (CreateDescriptorUpdateTemplateFunc)                                  GET_PROC_ADDR("vkCreateDescriptorUpdateTemplate");
 if (!m_vk.createDescriptorUpdateTemplate)
-       m_vk.createDescriptorUpdateTemplate                             = (CreateDescriptorUpdateTemplateFunc)                                  GET_PROC_ADDR("vkCreateDescriptorUpdateTemplateKHR");
-m_vk.destroyDescriptorUpdateTemplate                           = (DestroyDescriptorUpdateTemplateFunc)                                 GET_PROC_ADDR("vkDestroyDescriptorUpdateTemplate");
+       m_vk.createDescriptorUpdateTemplate                                     = (CreateDescriptorUpdateTemplateFunc)                                  GET_PROC_ADDR("vkCreateDescriptorUpdateTemplateKHR");
+m_vk.destroyDescriptorUpdateTemplate                                   = (DestroyDescriptorUpdateTemplateFunc)                                 GET_PROC_ADDR("vkDestroyDescriptorUpdateTemplate");
 if (!m_vk.destroyDescriptorUpdateTemplate)
-       m_vk.destroyDescriptorUpdateTemplate                    = (DestroyDescriptorUpdateTemplateFunc)                                 GET_PROC_ADDR("vkDestroyDescriptorUpdateTemplateKHR");
-m_vk.updateDescriptorSetWithTemplate                           = (UpdateDescriptorSetWithTemplateFunc)                                 GET_PROC_ADDR("vkUpdateDescriptorSetWithTemplate");
+       m_vk.destroyDescriptorUpdateTemplate                            = (DestroyDescriptorUpdateTemplateFunc)                                 GET_PROC_ADDR("vkDestroyDescriptorUpdateTemplateKHR");
+m_vk.updateDescriptorSetWithTemplate                                   = (UpdateDescriptorSetWithTemplateFunc)                                 GET_PROC_ADDR("vkUpdateDescriptorSetWithTemplate");
 if (!m_vk.updateDescriptorSetWithTemplate)
-       m_vk.updateDescriptorSetWithTemplate                    = (UpdateDescriptorSetWithTemplateFunc)                                 GET_PROC_ADDR("vkUpdateDescriptorSetWithTemplateKHR");
-m_vk.getDescriptorSetLayoutSupport                                     = (GetDescriptorSetLayoutSupportFunc)                                   GET_PROC_ADDR("vkGetDescriptorSetLayoutSupport");
+       m_vk.updateDescriptorSetWithTemplate                            = (UpdateDescriptorSetWithTemplateFunc)                                 GET_PROC_ADDR("vkUpdateDescriptorSetWithTemplateKHR");
+m_vk.getDescriptorSetLayoutSupport                                             = (GetDescriptorSetLayoutSupportFunc)                                   GET_PROC_ADDR("vkGetDescriptorSetLayoutSupport");
 if (!m_vk.getDescriptorSetLayoutSupport)
-       m_vk.getDescriptorSetLayoutSupport                              = (GetDescriptorSetLayoutSupportFunc)                                   GET_PROC_ADDR("vkGetDescriptorSetLayoutSupportKHR");
-m_vk.createSwapchainKHR                                                                = (CreateSwapchainKHRFunc)                                                              GET_PROC_ADDR("vkCreateSwapchainKHR");
-m_vk.destroySwapchainKHR                                                       = (DestroySwapchainKHRFunc)                                                             GET_PROC_ADDR("vkDestroySwapchainKHR");
-m_vk.getSwapchainImagesKHR                                                     = (GetSwapchainImagesKHRFunc)                                                   GET_PROC_ADDR("vkGetSwapchainImagesKHR");
-m_vk.acquireNextImageKHR                                                       = (AcquireNextImageKHRFunc)                                                             GET_PROC_ADDR("vkAcquireNextImageKHR");
-m_vk.queuePresentKHR                                                           = (QueuePresentKHRFunc)                                                                 GET_PROC_ADDR("vkQueuePresentKHR");
-m_vk.getDeviceGroupPresentCapabilitiesKHR                      = (GetDeviceGroupPresentCapabilitiesKHRFunc)                    GET_PROC_ADDR("vkGetDeviceGroupPresentCapabilitiesKHR");
-m_vk.getDeviceGroupSurfacePresentModesKHR                      = (GetDeviceGroupSurfacePresentModesKHRFunc)                    GET_PROC_ADDR("vkGetDeviceGroupSurfacePresentModesKHR");
-m_vk.acquireNextImage2KHR                                                      = (AcquireNextImage2KHRFunc)                                                    GET_PROC_ADDR("vkAcquireNextImage2KHR");
-m_vk.createSharedSwapchainsKHR                                         = (CreateSharedSwapchainsKHRFunc)                                               GET_PROC_ADDR("vkCreateSharedSwapchainsKHR");
-m_vk.getMemoryFdKHR                                                                    = (GetMemoryFdKHRFunc)                                                                  GET_PROC_ADDR("vkGetMemoryFdKHR");
-m_vk.getMemoryFdPropertiesKHR                                          = (GetMemoryFdPropertiesKHRFunc)                                                GET_PROC_ADDR("vkGetMemoryFdPropertiesKHR");
-m_vk.importSemaphoreFdKHR                                                      = (ImportSemaphoreFdKHRFunc)                                                    GET_PROC_ADDR("vkImportSemaphoreFdKHR");
-m_vk.getSemaphoreFdKHR                                                         = (GetSemaphoreFdKHRFunc)                                                               GET_PROC_ADDR("vkGetSemaphoreFdKHR");
-m_vk.cmdPushDescriptorSetKHR                                           = (CmdPushDescriptorSetKHRFunc)                                                 GET_PROC_ADDR("vkCmdPushDescriptorSetKHR");
-m_vk.cmdPushDescriptorSetWithTemplateKHR                       = (CmdPushDescriptorSetWithTemplateKHRFunc)                             GET_PROC_ADDR("vkCmdPushDescriptorSetWithTemplateKHR");
-m_vk.createRenderPass2KHR                                                      = (CreateRenderPass2KHRFunc)                                                    GET_PROC_ADDR("vkCreateRenderPass2KHR");
-m_vk.cmdBeginRenderPass2KHR                                                    = (CmdBeginRenderPass2KHRFunc)                                                  GET_PROC_ADDR("vkCmdBeginRenderPass2KHR");
-m_vk.cmdNextSubpass2KHR                                                                = (CmdNextSubpass2KHRFunc)                                                              GET_PROC_ADDR("vkCmdNextSubpass2KHR");
-m_vk.cmdEndRenderPass2KHR                                                      = (CmdEndRenderPass2KHRFunc)                                                    GET_PROC_ADDR("vkCmdEndRenderPass2KHR");
-m_vk.getSwapchainStatusKHR                                                     = (GetSwapchainStatusKHRFunc)                                                   GET_PROC_ADDR("vkGetSwapchainStatusKHR");
-m_vk.importFenceFdKHR                                                          = (ImportFenceFdKHRFunc)                                                                GET_PROC_ADDR("vkImportFenceFdKHR");
-m_vk.getFenceFdKHR                                                                     = (GetFenceFdKHRFunc)                                                                   GET_PROC_ADDR("vkGetFenceFdKHR");
-m_vk.acquireProfilingLockKHR                                           = (AcquireProfilingLockKHRFunc)                                                 GET_PROC_ADDR("vkAcquireProfilingLockKHR");
-m_vk.releaseProfilingLockKHR                                           = (ReleaseProfilingLockKHRFunc)                                                 GET_PROC_ADDR("vkReleaseProfilingLockKHR");
-m_vk.cmdDrawIndirectCountKHR                                           = (CmdDrawIndirectCountKHRFunc)                                                 GET_PROC_ADDR("vkCmdDrawIndirectCountKHR");
-m_vk.cmdDrawIndexedIndirectCountKHR                                    = (CmdDrawIndexedIndirectCountKHRFunc)                                  GET_PROC_ADDR("vkCmdDrawIndexedIndirectCountKHR");
-m_vk.debugMarkerSetObjectTagEXT                                                = (DebugMarkerSetObjectTagEXTFunc)                                              GET_PROC_ADDR("vkDebugMarkerSetObjectTagEXT");
-m_vk.debugMarkerSetObjectNameEXT                                       = (DebugMarkerSetObjectNameEXTFunc)                                             GET_PROC_ADDR("vkDebugMarkerSetObjectNameEXT");
-m_vk.cmdDebugMarkerBeginEXT                                                    = (CmdDebugMarkerBeginEXTFunc)                                                  GET_PROC_ADDR("vkCmdDebugMarkerBeginEXT");
-m_vk.cmdDebugMarkerEndEXT                                                      = (CmdDebugMarkerEndEXTFunc)                                                    GET_PROC_ADDR("vkCmdDebugMarkerEndEXT");
-m_vk.cmdDebugMarkerInsertEXT                                           = (CmdDebugMarkerInsertEXTFunc)                                                 GET_PROC_ADDR("vkCmdDebugMarkerInsertEXT");
-m_vk.cmdBindTransformFeedbackBuffersEXT                                = (CmdBindTransformFeedbackBuffersEXTFunc)                              GET_PROC_ADDR("vkCmdBindTransformFeedbackBuffersEXT");
-m_vk.cmdBeginTransformFeedbackEXT                                      = (CmdBeginTransformFeedbackEXTFunc)                                    GET_PROC_ADDR("vkCmdBeginTransformFeedbackEXT");
-m_vk.cmdEndTransformFeedbackEXT                                                = (CmdEndTransformFeedbackEXTFunc)                                              GET_PROC_ADDR("vkCmdEndTransformFeedbackEXT");
-m_vk.cmdBeginQueryIndexedEXT                                           = (CmdBeginQueryIndexedEXTFunc)                                                 GET_PROC_ADDR("vkCmdBeginQueryIndexedEXT");
-m_vk.cmdEndQueryIndexedEXT                                                     = (CmdEndQueryIndexedEXTFunc)                                                   GET_PROC_ADDR("vkCmdEndQueryIndexedEXT");
-m_vk.cmdDrawIndirectByteCountEXT                                       = (CmdDrawIndirectByteCountEXTFunc)                                             GET_PROC_ADDR("vkCmdDrawIndirectByteCountEXT");
-m_vk.getImageViewHandleNVX                                                     = (GetImageViewHandleNVXFunc)                                                   GET_PROC_ADDR("vkGetImageViewHandleNVX");
-m_vk.cmdDrawIndirectCountAMD                                           = (CmdDrawIndirectCountAMDFunc)                                                 GET_PROC_ADDR("vkCmdDrawIndirectCountAMD");
-m_vk.cmdDrawIndexedIndirectCountAMD                                    = (CmdDrawIndexedIndirectCountAMDFunc)                                  GET_PROC_ADDR("vkCmdDrawIndexedIndirectCountAMD");
-m_vk.getShaderInfoAMD                                                          = (GetShaderInfoAMDFunc)                                                                GET_PROC_ADDR("vkGetShaderInfoAMD");
-m_vk.cmdBeginConditionalRenderingEXT                           = (CmdBeginConditionalRenderingEXTFunc)                                 GET_PROC_ADDR("vkCmdBeginConditionalRenderingEXT");
-m_vk.cmdEndConditionalRenderingEXT                                     = (CmdEndConditionalRenderingEXTFunc)                                   GET_PROC_ADDR("vkCmdEndConditionalRenderingEXT");
-m_vk.cmdProcessCommandsNVX                                                     = (CmdProcessCommandsNVXFunc)                                                   GET_PROC_ADDR("vkCmdProcessCommandsNVX");
-m_vk.cmdReserveSpaceForCommandsNVX                                     = (CmdReserveSpaceForCommandsNVXFunc)                                   GET_PROC_ADDR("vkCmdReserveSpaceForCommandsNVX");
-m_vk.createIndirectCommandsLayoutNVX                           = (CreateIndirectCommandsLayoutNVXFunc)                                 GET_PROC_ADDR("vkCreateIndirectCommandsLayoutNVX");
-m_vk.destroyIndirectCommandsLayoutNVX                          = (DestroyIndirectCommandsLayoutNVXFunc)                                GET_PROC_ADDR("vkDestroyIndirectCommandsLayoutNVX");
-m_vk.createObjectTableNVX                                                      = (CreateObjectTableNVXFunc)                                                    GET_PROC_ADDR("vkCreateObjectTableNVX");
-m_vk.destroyObjectTableNVX                                                     = (DestroyObjectTableNVXFunc)                                                   GET_PROC_ADDR("vkDestroyObjectTableNVX");
-m_vk.registerObjectsNVX                                                                = (RegisterObjectsNVXFunc)                                                              GET_PROC_ADDR("vkRegisterObjectsNVX");
-m_vk.unregisterObjectsNVX                                                      = (UnregisterObjectsNVXFunc)                                                    GET_PROC_ADDR("vkUnregisterObjectsNVX");
-m_vk.cmdSetViewportWScalingNV                                          = (CmdSetViewportWScalingNVFunc)                                                GET_PROC_ADDR("vkCmdSetViewportWScalingNV");
-m_vk.displayPowerControlEXT                                                    = (DisplayPowerControlEXTFunc)                                                  GET_PROC_ADDR("vkDisplayPowerControlEXT");
-m_vk.registerDeviceEventEXT                                                    = (RegisterDeviceEventEXTFunc)                                                  GET_PROC_ADDR("vkRegisterDeviceEventEXT");
-m_vk.registerDisplayEventEXT                                           = (RegisterDisplayEventEXTFunc)                                                 GET_PROC_ADDR("vkRegisterDisplayEventEXT");
-m_vk.getSwapchainCounterEXT                                                    = (GetSwapchainCounterEXTFunc)                                                  GET_PROC_ADDR("vkGetSwapchainCounterEXT");
-m_vk.getRefreshCycleDurationGOOGLE                                     = (GetRefreshCycleDurationGOOGLEFunc)                                   GET_PROC_ADDR("vkGetRefreshCycleDurationGOOGLE");
-m_vk.getPastPresentationTimingGOOGLE                           = (GetPastPresentationTimingGOOGLEFunc)                                 GET_PROC_ADDR("vkGetPastPresentationTimingGOOGLE");
-m_vk.cmdSetDiscardRectangleEXT                                         = (CmdSetDiscardRectangleEXTFunc)                                               GET_PROC_ADDR("vkCmdSetDiscardRectangleEXT");
-m_vk.setHdrMetadataEXT                                                         = (SetHdrMetadataEXTFunc)                                                               GET_PROC_ADDR("vkSetHdrMetadataEXT");
-m_vk.setDebugUtilsObjectNameEXT                                                = (SetDebugUtilsObjectNameEXTFunc)                                              GET_PROC_ADDR("vkSetDebugUtilsObjectNameEXT");
-m_vk.setDebugUtilsObjectTagEXT                                         = (SetDebugUtilsObjectTagEXTFunc)                                               GET_PROC_ADDR("vkSetDebugUtilsObjectTagEXT");
-m_vk.queueBeginDebugUtilsLabelEXT                                      = (QueueBeginDebugUtilsLabelEXTFunc)                                    GET_PROC_ADDR("vkQueueBeginDebugUtilsLabelEXT");
-m_vk.queueEndDebugUtilsLabelEXT                                                = (QueueEndDebugUtilsLabelEXTFunc)                                              GET_PROC_ADDR("vkQueueEndDebugUtilsLabelEXT");
-m_vk.queueInsertDebugUtilsLabelEXT                                     = (QueueInsertDebugUtilsLabelEXTFunc)                                   GET_PROC_ADDR("vkQueueInsertDebugUtilsLabelEXT");
-m_vk.cmdBeginDebugUtilsLabelEXT                                                = (CmdBeginDebugUtilsLabelEXTFunc)                                              GET_PROC_ADDR("vkCmdBeginDebugUtilsLabelEXT");
-m_vk.cmdEndDebugUtilsLabelEXT                                          = (CmdEndDebugUtilsLabelEXTFunc)                                                GET_PROC_ADDR("vkCmdEndDebugUtilsLabelEXT");
-m_vk.cmdInsertDebugUtilsLabelEXT                                       = (CmdInsertDebugUtilsLabelEXTFunc)                                             GET_PROC_ADDR("vkCmdInsertDebugUtilsLabelEXT");
-m_vk.cmdSetSampleLocationsEXT                                          = (CmdSetSampleLocationsEXTFunc)                                                GET_PROC_ADDR("vkCmdSetSampleLocationsEXT");
-m_vk.getImageDrmFormatModifierPropertiesEXT                    = (GetImageDrmFormatModifierPropertiesEXTFunc)                  GET_PROC_ADDR("vkGetImageDrmFormatModifierPropertiesEXT");
-m_vk.createValidationCacheEXT                                          = (CreateValidationCacheEXTFunc)                                                GET_PROC_ADDR("vkCreateValidationCacheEXT");
-m_vk.destroyValidationCacheEXT                                         = (DestroyValidationCacheEXTFunc)                                               GET_PROC_ADDR("vkDestroyValidationCacheEXT");
-m_vk.mergeValidationCachesEXT                                          = (MergeValidationCachesEXTFunc)                                                GET_PROC_ADDR("vkMergeValidationCachesEXT");
-m_vk.getValidationCacheDataEXT                                         = (GetValidationCacheDataEXTFunc)                                               GET_PROC_ADDR("vkGetValidationCacheDataEXT");
-m_vk.cmdBindShadingRateImageNV                                         = (CmdBindShadingRateImageNVFunc)                                               GET_PROC_ADDR("vkCmdBindShadingRateImageNV");
-m_vk.cmdSetViewportShadingRatePaletteNV                                = (CmdSetViewportShadingRatePaletteNVFunc)                              GET_PROC_ADDR("vkCmdSetViewportShadingRatePaletteNV");
-m_vk.cmdSetCoarseSampleOrderNV                                         = (CmdSetCoarseSampleOrderNVFunc)                                               GET_PROC_ADDR("vkCmdSetCoarseSampleOrderNV");
-m_vk.createAccelerationStructureNV                                     = (CreateAccelerationStructureNVFunc)                                   GET_PROC_ADDR("vkCreateAccelerationStructureNV");
-m_vk.destroyAccelerationStructureNV                                    = (DestroyAccelerationStructureNVFunc)                                  GET_PROC_ADDR("vkDestroyAccelerationStructureNV");
-m_vk.getAccelerationStructureMemoryRequirementsNV      = (GetAccelerationStructureMemoryRequirementsNVFunc)    GET_PROC_ADDR("vkGetAccelerationStructureMemoryRequirementsNV");
-m_vk.bindAccelerationStructureMemoryNV                         = (BindAccelerationStructureMemoryNVFunc)                               GET_PROC_ADDR("vkBindAccelerationStructureMemoryNV");
-m_vk.cmdBuildAccelerationStructureNV                           = (CmdBuildAccelerationStructureNVFunc)                                 GET_PROC_ADDR("vkCmdBuildAccelerationStructureNV");
-m_vk.cmdCopyAccelerationStructureNV                                    = (CmdCopyAccelerationStructureNVFunc)                                  GET_PROC_ADDR("vkCmdCopyAccelerationStructureNV");
-m_vk.cmdTraceRaysNV                                                                    = (CmdTraceRaysNVFunc)                                                                  GET_PROC_ADDR("vkCmdTraceRaysNV");
-m_vk.createRayTracingPipelinesNV                                       = (CreateRayTracingPipelinesNVFunc)                                             GET_PROC_ADDR("vkCreateRayTracingPipelinesNV");
-m_vk.getRayTracingShaderGroupHandlesNV                         = (GetRayTracingShaderGroupHandlesNVFunc)                               GET_PROC_ADDR("vkGetRayTracingShaderGroupHandlesNV");
-m_vk.getAccelerationStructureHandleNV                          = (GetAccelerationStructureHandleNVFunc)                                GET_PROC_ADDR("vkGetAccelerationStructureHandleNV");
-m_vk.cmdWriteAccelerationStructuresPropertiesNV                = (CmdWriteAccelerationStructuresPropertiesNVFunc)              GET_PROC_ADDR("vkCmdWriteAccelerationStructuresPropertiesNV");
-m_vk.compileDeferredNV                                                         = (CompileDeferredNVFunc)                                                               GET_PROC_ADDR("vkCompileDeferredNV");
-m_vk.getMemoryHostPointerPropertiesEXT                         = (GetMemoryHostPointerPropertiesEXTFunc)                               GET_PROC_ADDR("vkGetMemoryHostPointerPropertiesEXT");
-m_vk.cmdWriteBufferMarkerAMD                                           = (CmdWriteBufferMarkerAMDFunc)                                                 GET_PROC_ADDR("vkCmdWriteBufferMarkerAMD");
-m_vk.getCalibratedTimestampsEXT                                                = (GetCalibratedTimestampsEXTFunc)                                              GET_PROC_ADDR("vkGetCalibratedTimestampsEXT");
-m_vk.cmdDrawMeshTasksNV                                                                = (CmdDrawMeshTasksNVFunc)                                                              GET_PROC_ADDR("vkCmdDrawMeshTasksNV");
-m_vk.cmdDrawMeshTasksIndirectNV                                                = (CmdDrawMeshTasksIndirectNVFunc)                                              GET_PROC_ADDR("vkCmdDrawMeshTasksIndirectNV");
-m_vk.cmdDrawMeshTasksIndirectCountNV                           = (CmdDrawMeshTasksIndirectCountNVFunc)                                 GET_PROC_ADDR("vkCmdDrawMeshTasksIndirectCountNV");
-m_vk.cmdSetExclusiveScissorNV                                          = (CmdSetExclusiveScissorNVFunc)                                                GET_PROC_ADDR("vkCmdSetExclusiveScissorNV");
-m_vk.cmdSetCheckpointNV                                                                = (CmdSetCheckpointNVFunc)                                                              GET_PROC_ADDR("vkCmdSetCheckpointNV");
-m_vk.getQueueCheckpointDataNV                                          = (GetQueueCheckpointDataNVFunc)                                                GET_PROC_ADDR("vkGetQueueCheckpointDataNV");
-m_vk.initializePerformanceApiINTEL                                     = (InitializePerformanceApiINTELFunc)                                   GET_PROC_ADDR("vkInitializePerformanceApiINTEL");
-m_vk.uninitializePerformanceApiINTEL                           = (UninitializePerformanceApiINTELFunc)                                 GET_PROC_ADDR("vkUninitializePerformanceApiINTEL");
-m_vk.cmdSetPerformanceMarkerINTEL                                      = (CmdSetPerformanceMarkerINTELFunc)                                    GET_PROC_ADDR("vkCmdSetPerformanceMarkerINTEL");
-m_vk.cmdSetPerformanceStreamMarkerINTEL                                = (CmdSetPerformanceStreamMarkerINTELFunc)                              GET_PROC_ADDR("vkCmdSetPerformanceStreamMarkerINTEL");
-m_vk.cmdSetPerformanceOverrideINTEL                                    = (CmdSetPerformanceOverrideINTELFunc)                                  GET_PROC_ADDR("vkCmdSetPerformanceOverrideINTEL");
-m_vk.acquirePerformanceConfigurationINTEL                      = (AcquirePerformanceConfigurationINTELFunc)                    GET_PROC_ADDR("vkAcquirePerformanceConfigurationINTEL");
-m_vk.releasePerformanceConfigurationINTEL                      = (ReleasePerformanceConfigurationINTELFunc)                    GET_PROC_ADDR("vkReleasePerformanceConfigurationINTEL");
-m_vk.queueSetPerformanceConfigurationINTEL                     = (QueueSetPerformanceConfigurationINTELFunc)                   GET_PROC_ADDR("vkQueueSetPerformanceConfigurationINTEL");
-m_vk.getPerformanceParameterINTEL                                      = (GetPerformanceParameterINTELFunc)                                    GET_PROC_ADDR("vkGetPerformanceParameterINTEL");
-m_vk.setLocalDimmingAMD                                                                = (SetLocalDimmingAMDFunc)                                                              GET_PROC_ADDR("vkSetLocalDimmingAMD");
-m_vk.getBufferDeviceAddressEXT                                         = (GetBufferDeviceAddressEXTFunc)                                               GET_PROC_ADDR("vkGetBufferDeviceAddressEXT");
-m_vk.cmdSetLineStippleEXT                                                      = (CmdSetLineStippleEXTFunc)                                                    GET_PROC_ADDR("vkCmdSetLineStippleEXT");
-m_vk.resetQueryPoolEXT                                                         = (ResetQueryPoolEXTFunc)                                                               GET_PROC_ADDR("vkResetQueryPoolEXT");
-m_vk.getAndroidHardwareBufferPropertiesANDROID         = (GetAndroidHardwareBufferPropertiesANDROIDFunc)               GET_PROC_ADDR("vkGetAndroidHardwareBufferPropertiesANDROID");
-m_vk.getMemoryAndroidHardwareBufferANDROID                     = (GetMemoryAndroidHardwareBufferANDROIDFunc)                   GET_PROC_ADDR("vkGetMemoryAndroidHardwareBufferANDROID");
-m_vk.getMemoryWin32HandleKHR                                           = (GetMemoryWin32HandleKHRFunc)                                                 GET_PROC_ADDR("vkGetMemoryWin32HandleKHR");
-m_vk.getMemoryWin32HandlePropertiesKHR                         = (GetMemoryWin32HandlePropertiesKHRFunc)                               GET_PROC_ADDR("vkGetMemoryWin32HandlePropertiesKHR");
-m_vk.importSemaphoreWin32HandleKHR                                     = (ImportSemaphoreWin32HandleKHRFunc)                                   GET_PROC_ADDR("vkImportSemaphoreWin32HandleKHR");
-m_vk.getSemaphoreWin32HandleKHR                                                = (GetSemaphoreWin32HandleKHRFunc)                                              GET_PROC_ADDR("vkGetSemaphoreWin32HandleKHR");
-m_vk.importFenceWin32HandleKHR                                         = (ImportFenceWin32HandleKHRFunc)                                               GET_PROC_ADDR("vkImportFenceWin32HandleKHR");
-m_vk.getFenceWin32HandleKHR                                                    = (GetFenceWin32HandleKHRFunc)                                                  GET_PROC_ADDR("vkGetFenceWin32HandleKHR");
-m_vk.getMemoryWin32HandleNV                                                    = (GetMemoryWin32HandleNVFunc)                                                  GET_PROC_ADDR("vkGetMemoryWin32HandleNV");
-m_vk.acquireFullScreenExclusiveModeEXT                         = (AcquireFullScreenExclusiveModeEXTFunc)                               GET_PROC_ADDR("vkAcquireFullScreenExclusiveModeEXT");
-m_vk.releaseFullScreenExclusiveModeEXT                         = (ReleaseFullScreenExclusiveModeEXTFunc)                               GET_PROC_ADDR("vkReleaseFullScreenExclusiveModeEXT");
-m_vk.getDeviceGroupSurfacePresentModes2EXT                     = (GetDeviceGroupSurfacePresentModes2EXTFunc)                   GET_PROC_ADDR("vkGetDeviceGroupSurfacePresentModes2EXT");
+       m_vk.getDescriptorSetLayoutSupport                                      = (GetDescriptorSetLayoutSupportFunc)                                   GET_PROC_ADDR("vkGetDescriptorSetLayoutSupportKHR");
+m_vk.createSwapchainKHR                                                                        = (CreateSwapchainKHRFunc)                                                              GET_PROC_ADDR("vkCreateSwapchainKHR");
+m_vk.destroySwapchainKHR                                                               = (DestroySwapchainKHRFunc)                                                             GET_PROC_ADDR("vkDestroySwapchainKHR");
+m_vk.getSwapchainImagesKHR                                                             = (GetSwapchainImagesKHRFunc)                                                   GET_PROC_ADDR("vkGetSwapchainImagesKHR");
+m_vk.acquireNextImageKHR                                                               = (AcquireNextImageKHRFunc)                                                             GET_PROC_ADDR("vkAcquireNextImageKHR");
+m_vk.queuePresentKHR                                                                   = (QueuePresentKHRFunc)                                                                 GET_PROC_ADDR("vkQueuePresentKHR");
+m_vk.getDeviceGroupPresentCapabilitiesKHR                              = (GetDeviceGroupPresentCapabilitiesKHRFunc)                    GET_PROC_ADDR("vkGetDeviceGroupPresentCapabilitiesKHR");
+m_vk.getDeviceGroupSurfacePresentModesKHR                              = (GetDeviceGroupSurfacePresentModesKHRFunc)                    GET_PROC_ADDR("vkGetDeviceGroupSurfacePresentModesKHR");
+m_vk.acquireNextImage2KHR                                                              = (AcquireNextImage2KHRFunc)                                                    GET_PROC_ADDR("vkAcquireNextImage2KHR");
+m_vk.createSharedSwapchainsKHR                                                 = (CreateSharedSwapchainsKHRFunc)                                               GET_PROC_ADDR("vkCreateSharedSwapchainsKHR");
+m_vk.getMemoryFdKHR                                                                            = (GetMemoryFdKHRFunc)                                                                  GET_PROC_ADDR("vkGetMemoryFdKHR");
+m_vk.getMemoryFdPropertiesKHR                                                  = (GetMemoryFdPropertiesKHRFunc)                                                GET_PROC_ADDR("vkGetMemoryFdPropertiesKHR");
+m_vk.importSemaphoreFdKHR                                                              = (ImportSemaphoreFdKHRFunc)                                                    GET_PROC_ADDR("vkImportSemaphoreFdKHR");
+m_vk.getSemaphoreFdKHR                                                                 = (GetSemaphoreFdKHRFunc)                                                               GET_PROC_ADDR("vkGetSemaphoreFdKHR");
+m_vk.cmdPushDescriptorSetKHR                                                   = (CmdPushDescriptorSetKHRFunc)                                                 GET_PROC_ADDR("vkCmdPushDescriptorSetKHR");
+m_vk.cmdPushDescriptorSetWithTemplateKHR                               = (CmdPushDescriptorSetWithTemplateKHRFunc)                             GET_PROC_ADDR("vkCmdPushDescriptorSetWithTemplateKHR");
+m_vk.createRenderPass2KHR                                                              = (CreateRenderPass2KHRFunc)                                                    GET_PROC_ADDR("vkCreateRenderPass2KHR");
+m_vk.cmdBeginRenderPass2KHR                                                            = (CmdBeginRenderPass2KHRFunc)                                                  GET_PROC_ADDR("vkCmdBeginRenderPass2KHR");
+m_vk.cmdNextSubpass2KHR                                                                        = (CmdNextSubpass2KHRFunc)                                                              GET_PROC_ADDR("vkCmdNextSubpass2KHR");
+m_vk.cmdEndRenderPass2KHR                                                              = (CmdEndRenderPass2KHRFunc)                                                    GET_PROC_ADDR("vkCmdEndRenderPass2KHR");
+m_vk.getSwapchainStatusKHR                                                             = (GetSwapchainStatusKHRFunc)                                                   GET_PROC_ADDR("vkGetSwapchainStatusKHR");
+m_vk.importFenceFdKHR                                                                  = (ImportFenceFdKHRFunc)                                                                GET_PROC_ADDR("vkImportFenceFdKHR");
+m_vk.getFenceFdKHR                                                                             = (GetFenceFdKHRFunc)                                                                   GET_PROC_ADDR("vkGetFenceFdKHR");
+m_vk.acquireProfilingLockKHR                                                   = (AcquireProfilingLockKHRFunc)                                                 GET_PROC_ADDR("vkAcquireProfilingLockKHR");
+m_vk.releaseProfilingLockKHR                                                   = (ReleaseProfilingLockKHRFunc)                                                 GET_PROC_ADDR("vkReleaseProfilingLockKHR");
+m_vk.cmdDrawIndirectCountKHR                                                   = (CmdDrawIndirectCountKHRFunc)                                                 GET_PROC_ADDR("vkCmdDrawIndirectCountKHR");
+m_vk.cmdDrawIndexedIndirectCountKHR                                            = (CmdDrawIndexedIndirectCountKHRFunc)                                  GET_PROC_ADDR("vkCmdDrawIndexedIndirectCountKHR");
+m_vk.getPipelineExecutablePropertiesKHR                                        = (GetPipelineExecutablePropertiesKHRFunc)                              GET_PROC_ADDR("vkGetPipelineExecutablePropertiesKHR");
+m_vk.getPipelineExecutableStatisticsKHR                                        = (GetPipelineExecutableStatisticsKHRFunc)                              GET_PROC_ADDR("vkGetPipelineExecutableStatisticsKHR");
+m_vk.getPipelineExecutableInternalRepresentationsKHR   = (GetPipelineExecutableInternalRepresentationsKHRFunc) GET_PROC_ADDR("vkGetPipelineExecutableInternalRepresentationsKHR");
+m_vk.debugMarkerSetObjectTagEXT                                                        = (DebugMarkerSetObjectTagEXTFunc)                                              GET_PROC_ADDR("vkDebugMarkerSetObjectTagEXT");
+m_vk.debugMarkerSetObjectNameEXT                                               = (DebugMarkerSetObjectNameEXTFunc)                                             GET_PROC_ADDR("vkDebugMarkerSetObjectNameEXT");
+m_vk.cmdDebugMarkerBeginEXT                                                            = (CmdDebugMarkerBeginEXTFunc)                                                  GET_PROC_ADDR("vkCmdDebugMarkerBeginEXT");
+m_vk.cmdDebugMarkerEndEXT                                                              = (CmdDebugMarkerEndEXTFunc)                                                    GET_PROC_ADDR("vkCmdDebugMarkerEndEXT");
+m_vk.cmdDebugMarkerInsertEXT                                                   = (CmdDebugMarkerInsertEXTFunc)                                                 GET_PROC_ADDR("vkCmdDebugMarkerInsertEXT");
+m_vk.cmdBindTransformFeedbackBuffersEXT                                        = (CmdBindTransformFeedbackBuffersEXTFunc)                              GET_PROC_ADDR("vkCmdBindTransformFeedbackBuffersEXT");
+m_vk.cmdBeginTransformFeedbackEXT                                              = (CmdBeginTransformFeedbackEXTFunc)                                    GET_PROC_ADDR("vkCmdBeginTransformFeedbackEXT");
+m_vk.cmdEndTransformFeedbackEXT                                                        = (CmdEndTransformFeedbackEXTFunc)                                              GET_PROC_ADDR("vkCmdEndTransformFeedbackEXT");
+m_vk.cmdBeginQueryIndexedEXT                                                   = (CmdBeginQueryIndexedEXTFunc)                                                 GET_PROC_ADDR("vkCmdBeginQueryIndexedEXT");
+m_vk.cmdEndQueryIndexedEXT                                                             = (CmdEndQueryIndexedEXTFunc)                                                   GET_PROC_ADDR("vkCmdEndQueryIndexedEXT");
+m_vk.cmdDrawIndirectByteCountEXT                                               = (CmdDrawIndirectByteCountEXTFunc)                                             GET_PROC_ADDR("vkCmdDrawIndirectByteCountEXT");
+m_vk.getImageViewHandleNVX                                                             = (GetImageViewHandleNVXFunc)                                                   GET_PROC_ADDR("vkGetImageViewHandleNVX");
+m_vk.cmdDrawIndirectCountAMD                                                   = (CmdDrawIndirectCountAMDFunc)                                                 GET_PROC_ADDR("vkCmdDrawIndirectCountAMD");
+m_vk.cmdDrawIndexedIndirectCountAMD                                            = (CmdDrawIndexedIndirectCountAMDFunc)                                  GET_PROC_ADDR("vkCmdDrawIndexedIndirectCountAMD");
+m_vk.getShaderInfoAMD                                                                  = (GetShaderInfoAMDFunc)                                                                GET_PROC_ADDR("vkGetShaderInfoAMD");
+m_vk.cmdBeginConditionalRenderingEXT                                   = (CmdBeginConditionalRenderingEXTFunc)                                 GET_PROC_ADDR("vkCmdBeginConditionalRenderingEXT");
+m_vk.cmdEndConditionalRenderingEXT                                             = (CmdEndConditionalRenderingEXTFunc)                                   GET_PROC_ADDR("vkCmdEndConditionalRenderingEXT");
+m_vk.cmdProcessCommandsNVX                                                             = (CmdProcessCommandsNVXFunc)                                                   GET_PROC_ADDR("vkCmdProcessCommandsNVX");
+m_vk.cmdReserveSpaceForCommandsNVX                                             = (CmdReserveSpaceForCommandsNVXFunc)                                   GET_PROC_ADDR("vkCmdReserveSpaceForCommandsNVX");
+m_vk.createIndirectCommandsLayoutNVX                                   = (CreateIndirectCommandsLayoutNVXFunc)                                 GET_PROC_ADDR("vkCreateIndirectCommandsLayoutNVX");
+m_vk.destroyIndirectCommandsLayoutNVX                                  = (DestroyIndirectCommandsLayoutNVXFunc)                                GET_PROC_ADDR("vkDestroyIndirectCommandsLayoutNVX");
+m_vk.createObjectTableNVX                                                              = (CreateObjectTableNVXFunc)                                                    GET_PROC_ADDR("vkCreateObjectTableNVX");
+m_vk.destroyObjectTableNVX                                                             = (DestroyObjectTableNVXFunc)                                                   GET_PROC_ADDR("vkDestroyObjectTableNVX");
+m_vk.registerObjectsNVX                                                                        = (RegisterObjectsNVXFunc)                                                              GET_PROC_ADDR("vkRegisterObjectsNVX");
+m_vk.unregisterObjectsNVX                                                              = (UnregisterObjectsNVXFunc)                                                    GET_PROC_ADDR("vkUnregisterObjectsNVX");
+m_vk.cmdSetViewportWScalingNV                                                  = (CmdSetViewportWScalingNVFunc)                                                GET_PROC_ADDR("vkCmdSetViewportWScalingNV");
+m_vk.displayPowerControlEXT                                                            = (DisplayPowerControlEXTFunc)                                                  GET_PROC_ADDR("vkDisplayPowerControlEXT");
+m_vk.registerDeviceEventEXT                                                            = (RegisterDeviceEventEXTFunc)                                                  GET_PROC_ADDR("vkRegisterDeviceEventEXT");
+m_vk.registerDisplayEventEXT                                                   = (RegisterDisplayEventEXTFunc)                                                 GET_PROC_ADDR("vkRegisterDisplayEventEXT");
+m_vk.getSwapchainCounterEXT                                                            = (GetSwapchainCounterEXTFunc)                                                  GET_PROC_ADDR("vkGetSwapchainCounterEXT");
+m_vk.getRefreshCycleDurationGOOGLE                                             = (GetRefreshCycleDurationGOOGLEFunc)                                   GET_PROC_ADDR("vkGetRefreshCycleDurationGOOGLE");
+m_vk.getPastPresentationTimingGOOGLE                                   = (GetPastPresentationTimingGOOGLEFunc)                                 GET_PROC_ADDR("vkGetPastPresentationTimingGOOGLE");
+m_vk.cmdSetDiscardRectangleEXT                                                 = (CmdSetDiscardRectangleEXTFunc)                                               GET_PROC_ADDR("vkCmdSetDiscardRectangleEXT");
+m_vk.setHdrMetadataEXT                                                                 = (SetHdrMetadataEXTFunc)                                                               GET_PROC_ADDR("vkSetHdrMetadataEXT");
+m_vk.setDebugUtilsObjectNameEXT                                                        = (SetDebugUtilsObjectNameEXTFunc)                                              GET_PROC_ADDR("vkSetDebugUtilsObjectNameEXT");
+m_vk.setDebugUtilsObjectTagEXT                                                 = (SetDebugUtilsObjectTagEXTFunc)                                               GET_PROC_ADDR("vkSetDebugUtilsObjectTagEXT");
+m_vk.queueBeginDebugUtilsLabelEXT                                              = (QueueBeginDebugUtilsLabelEXTFunc)                                    GET_PROC_ADDR("vkQueueBeginDebugUtilsLabelEXT");
+m_vk.queueEndDebugUtilsLabelEXT                                                        = (QueueEndDebugUtilsLabelEXTFunc)                                              GET_PROC_ADDR("vkQueueEndDebugUtilsLabelEXT");
+m_vk.queueInsertDebugUtilsLabelEXT                                             = (QueueInsertDebugUtilsLabelEXTFunc)                                   GET_PROC_ADDR("vkQueueInsertDebugUtilsLabelEXT");
+m_vk.cmdBeginDebugUtilsLabelEXT                                                        = (CmdBeginDebugUtilsLabelEXTFunc)                                              GET_PROC_ADDR("vkCmdBeginDebugUtilsLabelEXT");
+m_vk.cmdEndDebugUtilsLabelEXT                                                  = (CmdEndDebugUtilsLabelEXTFunc)                                                GET_PROC_ADDR("vkCmdEndDebugUtilsLabelEXT");
+m_vk.cmdInsertDebugUtilsLabelEXT                                               = (CmdInsertDebugUtilsLabelEXTFunc)                                             GET_PROC_ADDR("vkCmdInsertDebugUtilsLabelEXT");
+m_vk.cmdSetSampleLocationsEXT                                                  = (CmdSetSampleLocationsEXTFunc)                                                GET_PROC_ADDR("vkCmdSetSampleLocationsEXT");
+m_vk.getImageDrmFormatModifierPropertiesEXT                            = (GetImageDrmFormatModifierPropertiesEXTFunc)                  GET_PROC_ADDR("vkGetImageDrmFormatModifierPropertiesEXT");
+m_vk.createValidationCacheEXT                                                  = (CreateValidationCacheEXTFunc)                                                GET_PROC_ADDR("vkCreateValidationCacheEXT");
+m_vk.destroyValidationCacheEXT                                                 = (DestroyValidationCacheEXTFunc)                                               GET_PROC_ADDR("vkDestroyValidationCacheEXT");
+m_vk.mergeValidationCachesEXT                                                  = (MergeValidationCachesEXTFunc)                                                GET_PROC_ADDR("vkMergeValidationCachesEXT");
+m_vk.getValidationCacheDataEXT                                                 = (GetValidationCacheDataEXTFunc)                                               GET_PROC_ADDR("vkGetValidationCacheDataEXT");
+m_vk.cmdBindShadingRateImageNV                                                 = (CmdBindShadingRateImageNVFunc)                                               GET_PROC_ADDR("vkCmdBindShadingRateImageNV");
+m_vk.cmdSetViewportShadingRatePaletteNV                                        = (CmdSetViewportShadingRatePaletteNVFunc)                              GET_PROC_ADDR("vkCmdSetViewportShadingRatePaletteNV");
+m_vk.cmdSetCoarseSampleOrderNV                                                 = (CmdSetCoarseSampleOrderNVFunc)                                               GET_PROC_ADDR("vkCmdSetCoarseSampleOrderNV");
+m_vk.createAccelerationStructureNV                                             = (CreateAccelerationStructureNVFunc)                                   GET_PROC_ADDR("vkCreateAccelerationStructureNV");
+m_vk.destroyAccelerationStructureNV                                            = (DestroyAccelerationStructureNVFunc)                                  GET_PROC_ADDR("vkDestroyAccelerationStructureNV");
+m_vk.getAccelerationStructureMemoryRequirementsNV              = (GetAccelerationStructureMemoryRequirementsNVFunc)    GET_PROC_ADDR("vkGetAccelerationStructureMemoryRequirementsNV");
+m_vk.bindAccelerationStructureMemoryNV                                 = (BindAccelerationStructureMemoryNVFunc)                               GET_PROC_ADDR("vkBindAccelerationStructureMemoryNV");
+m_vk.cmdBuildAccelerationStructureNV                                   = (CmdBuildAccelerationStructureNVFunc)                                 GET_PROC_ADDR("vkCmdBuildAccelerationStructureNV");
+m_vk.cmdCopyAccelerationStructureNV                                            = (CmdCopyAccelerationStructureNVFunc)                                  GET_PROC_ADDR("vkCmdCopyAccelerationStructureNV");
+m_vk.cmdTraceRaysNV                                                                            = (CmdTraceRaysNVFunc)                                                                  GET_PROC_ADDR("vkCmdTraceRaysNV");
+m_vk.createRayTracingPipelinesNV                                               = (CreateRayTracingPipelinesNVFunc)                                             GET_PROC_ADDR("vkCreateRayTracingPipelinesNV");
+m_vk.getRayTracingShaderGroupHandlesNV                                 = (GetRayTracingShaderGroupHandlesNVFunc)                               GET_PROC_ADDR("vkGetRayTracingShaderGroupHandlesNV");
+m_vk.getAccelerationStructureHandleNV                                  = (GetAccelerationStructureHandleNVFunc)                                GET_PROC_ADDR("vkGetAccelerationStructureHandleNV");
+m_vk.cmdWriteAccelerationStructuresPropertiesNV                        = (CmdWriteAccelerationStructuresPropertiesNVFunc)              GET_PROC_ADDR("vkCmdWriteAccelerationStructuresPropertiesNV");
+m_vk.compileDeferredNV                                                                 = (CompileDeferredNVFunc)                                                               GET_PROC_ADDR("vkCompileDeferredNV");
+m_vk.getMemoryHostPointerPropertiesEXT                                 = (GetMemoryHostPointerPropertiesEXTFunc)                               GET_PROC_ADDR("vkGetMemoryHostPointerPropertiesEXT");
+m_vk.cmdWriteBufferMarkerAMD                                                   = (CmdWriteBufferMarkerAMDFunc)                                                 GET_PROC_ADDR("vkCmdWriteBufferMarkerAMD");
+m_vk.getCalibratedTimestampsEXT                                                        = (GetCalibratedTimestampsEXTFunc)                                              GET_PROC_ADDR("vkGetCalibratedTimestampsEXT");
+m_vk.cmdDrawMeshTasksNV                                                                        = (CmdDrawMeshTasksNVFunc)                                                              GET_PROC_ADDR("vkCmdDrawMeshTasksNV");
+m_vk.cmdDrawMeshTasksIndirectNV                                                        = (CmdDrawMeshTasksIndirectNVFunc)                                              GET_PROC_ADDR("vkCmdDrawMeshTasksIndirectNV");
+m_vk.cmdDrawMeshTasksIndirectCountNV                                   = (CmdDrawMeshTasksIndirectCountNVFunc)                                 GET_PROC_ADDR("vkCmdDrawMeshTasksIndirectCountNV");
+m_vk.cmdSetExclusiveScissorNV                                                  = (CmdSetExclusiveScissorNVFunc)                                                GET_PROC_ADDR("vkCmdSetExclusiveScissorNV");
+m_vk.cmdSetCheckpointNV                                                                        = (CmdSetCheckpointNVFunc)                                                              GET_PROC_ADDR("vkCmdSetCheckpointNV");
+m_vk.getQueueCheckpointDataNV                                                  = (GetQueueCheckpointDataNVFunc)                                                GET_PROC_ADDR("vkGetQueueCheckpointDataNV");
+m_vk.initializePerformanceApiINTEL                                             = (InitializePerformanceApiINTELFunc)                                   GET_PROC_ADDR("vkInitializePerformanceApiINTEL");
+m_vk.uninitializePerformanceApiINTEL                                   = (UninitializePerformanceApiINTELFunc)                                 GET_PROC_ADDR("vkUninitializePerformanceApiINTEL");
+m_vk.cmdSetPerformanceMarkerINTEL                                              = (CmdSetPerformanceMarkerINTELFunc)                                    GET_PROC_ADDR("vkCmdSetPerformanceMarkerINTEL");
+m_vk.cmdSetPerformanceStreamMarkerINTEL                                        = (CmdSetPerformanceStreamMarkerINTELFunc)                              GET_PROC_ADDR("vkCmdSetPerformanceStreamMarkerINTEL");
+m_vk.cmdSetPerformanceOverrideINTEL                                            = (CmdSetPerformanceOverrideINTELFunc)                                  GET_PROC_ADDR("vkCmdSetPerformanceOverrideINTEL");
+m_vk.acquirePerformanceConfigurationINTEL                              = (AcquirePerformanceConfigurationINTELFunc)                    GET_PROC_ADDR("vkAcquirePerformanceConfigurationINTEL");
+m_vk.releasePerformanceConfigurationINTEL                              = (ReleasePerformanceConfigurationINTELFunc)                    GET_PROC_ADDR("vkReleasePerformanceConfigurationINTEL");
+m_vk.queueSetPerformanceConfigurationINTEL                             = (QueueSetPerformanceConfigurationINTELFunc)                   GET_PROC_ADDR("vkQueueSetPerformanceConfigurationINTEL");
+m_vk.getPerformanceParameterINTEL                                              = (GetPerformanceParameterINTELFunc)                                    GET_PROC_ADDR("vkGetPerformanceParameterINTEL");
+m_vk.setLocalDimmingAMD                                                                        = (SetLocalDimmingAMDFunc)                                                              GET_PROC_ADDR("vkSetLocalDimmingAMD");
+m_vk.getBufferDeviceAddressEXT                                                 = (GetBufferDeviceAddressEXTFunc)                                               GET_PROC_ADDR("vkGetBufferDeviceAddressEXT");
+m_vk.cmdSetLineStippleEXT                                                              = (CmdSetLineStippleEXTFunc)                                                    GET_PROC_ADDR("vkCmdSetLineStippleEXT");
+m_vk.resetQueryPoolEXT                                                                 = (ResetQueryPoolEXTFunc)                                                               GET_PROC_ADDR("vkResetQueryPoolEXT");
+m_vk.getAndroidHardwareBufferPropertiesANDROID                 = (GetAndroidHardwareBufferPropertiesANDROIDFunc)               GET_PROC_ADDR("vkGetAndroidHardwareBufferPropertiesANDROID");
+m_vk.getMemoryAndroidHardwareBufferANDROID                             = (GetMemoryAndroidHardwareBufferANDROIDFunc)                   GET_PROC_ADDR("vkGetMemoryAndroidHardwareBufferANDROID");
+m_vk.getMemoryWin32HandleKHR                                                   = (GetMemoryWin32HandleKHRFunc)                                                 GET_PROC_ADDR("vkGetMemoryWin32HandleKHR");
+m_vk.getMemoryWin32HandlePropertiesKHR                                 = (GetMemoryWin32HandlePropertiesKHRFunc)                               GET_PROC_ADDR("vkGetMemoryWin32HandlePropertiesKHR");
+m_vk.importSemaphoreWin32HandleKHR                                             = (ImportSemaphoreWin32HandleKHRFunc)                                   GET_PROC_ADDR("vkImportSemaphoreWin32HandleKHR");
+m_vk.getSemaphoreWin32HandleKHR                                                        = (GetSemaphoreWin32HandleKHRFunc)                                              GET_PROC_ADDR("vkGetSemaphoreWin32HandleKHR");
+m_vk.importFenceWin32HandleKHR                                                 = (ImportFenceWin32HandleKHRFunc)                                               GET_PROC_ADDR("vkImportFenceWin32HandleKHR");
+m_vk.getFenceWin32HandleKHR                                                            = (GetFenceWin32HandleKHRFunc)                                                  GET_PROC_ADDR("vkGetFenceWin32HandleKHR");
+m_vk.getMemoryWin32HandleNV                                                            = (GetMemoryWin32HandleNVFunc)                                                  GET_PROC_ADDR("vkGetMemoryWin32HandleNV");
+m_vk.acquireFullScreenExclusiveModeEXT                                 = (AcquireFullScreenExclusiveModeEXTFunc)                               GET_PROC_ADDR("vkAcquireFullScreenExclusiveModeEXT");
+m_vk.releaseFullScreenExclusiveModeEXT                                 = (ReleaseFullScreenExclusiveModeEXTFunc)                               GET_PROC_ADDR("vkReleaseFullScreenExclusiveModeEXT");
+m_vk.getDeviceGroupSurfacePresentModes2EXT                             = (GetDeviceGroupSurfacePresentModes2EXTFunc)                   GET_PROC_ADDR("vkGetDeviceGroupSurfacePresentModes2EXT");
index 4278b76..15eab74 100644 (file)
@@ -48,6 +48,15 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                nextPtr  = &physicalDeviceMultiviewFeatures.pNext;
        }
 
+       vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR physicalDevicePipelineExecutablePropertiesFeaturesKHR;
+       if (vk::isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_pipeline_executable_properties"))
+       {
+               deMemset(&physicalDevicePipelineExecutablePropertiesFeaturesKHR, 0, sizeof(physicalDevicePipelineExecutablePropertiesFeaturesKHR));
+               physicalDevicePipelineExecutablePropertiesFeaturesKHR.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR;
+               *nextPtr = &physicalDevicePipelineExecutablePropertiesFeaturesKHR;
+               nextPtr  = &physicalDevicePipelineExecutablePropertiesFeaturesKHR.pNext;
+       }
+
        vk::VkPhysicalDeviceScalarBlockLayoutFeaturesEXT physicalDeviceScalarBlockLayoutFeaturesEXT;
        if (vk::isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_EXT_scalar_block_layout"))
        {
@@ -284,6 +293,15 @@ bool checkMandatoryFeatures(const vkt::Context& context)
                }
        }
 
+       if ( vk::isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_pipeline_executable_properties") )
+       {
+               if ( physicalDevicePipelineExecutablePropertiesFeaturesKHR.pipelineExecutableInfo == VK_FALSE )
+               {
+                       log << tcu::TestLog::Message << "Mandatory feature pipelineExecutableInfo not supported" << tcu::TestLog::EndMessage;
+                       result = false;
+               }
+       }
+
        return result;
 }
 
index ac0382d..8afbb07 100644 (file)
@@ -1561,6 +1561,33 @@ VKAPI_ATTR void VKAPI_CALL cmdDrawIndexedIndirectCountKHR (VkCommandBuffer comma
        DE_UNREF(stride);
 }
 
+VKAPI_ATTR VkResult VKAPI_CALL getPipelineExecutablePropertiesKHR (VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, deUint32* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties)
+{
+       DE_UNREF(device);
+       DE_UNREF(pPipelineInfo);
+       DE_UNREF(pExecutableCount);
+       DE_UNREF(pProperties);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPipelineExecutableStatisticsKHR (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics)
+{
+       DE_UNREF(device);
+       DE_UNREF(pExecutableInfo);
+       DE_UNREF(pStatisticCount);
+       DE_UNREF(pStatistics);
+       return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPipelineExecutableInternalRepresentationsKHR (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations)
+{
+       DE_UNREF(device);
+       DE_UNREF(pExecutableInfo);
+       DE_UNREF(pInternalRepresentationCount);
+       DE_UNREF(pInternalRepresentations);
+       return VK_SUCCESS;
+}
+
 VKAPI_ATTR void VKAPI_CALL debugReportMessageEXT (VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, deUint64 object, deUintptr location, deInt32 messageCode, const char* pLayerPrefix, const char* pMessage)
 {
        DE_UNREF(instance);
@@ -2506,280 +2533,283 @@ static const tcu::StaticFunctionLibrary::Entry s_instanceFunctions[] =
 
 static const tcu::StaticFunctionLibrary::Entry s_deviceFunctions[] =
 {
-       VK_NULL_FUNC_ENTRY(vkGetDeviceProcAddr,                                                         getDeviceProcAddr),
-       VK_NULL_FUNC_ENTRY(vkDestroyDevice,                                                                     destroyDevice),
-       VK_NULL_FUNC_ENTRY(vkGetDeviceQueue,                                                            getDeviceQueue),
-       VK_NULL_FUNC_ENTRY(vkQueueSubmit,                                                                       queueSubmit),
-       VK_NULL_FUNC_ENTRY(vkQueueWaitIdle,                                                                     queueWaitIdle),
-       VK_NULL_FUNC_ENTRY(vkDeviceWaitIdle,                                                            deviceWaitIdle),
-       VK_NULL_FUNC_ENTRY(vkAllocateMemory,                                                            allocateMemory),
-       VK_NULL_FUNC_ENTRY(vkFreeMemory,                                                                        freeMemory),
-       VK_NULL_FUNC_ENTRY(vkMapMemory,                                                                         mapMemory),
-       VK_NULL_FUNC_ENTRY(vkUnmapMemory,                                                                       unmapMemory),
-       VK_NULL_FUNC_ENTRY(vkFlushMappedMemoryRanges,                                           flushMappedMemoryRanges),
-       VK_NULL_FUNC_ENTRY(vkInvalidateMappedMemoryRanges,                                      invalidateMappedMemoryRanges),
-       VK_NULL_FUNC_ENTRY(vkGetDeviceMemoryCommitment,                                         getDeviceMemoryCommitment),
-       VK_NULL_FUNC_ENTRY(vkBindBufferMemory,                                                          bindBufferMemory),
-       VK_NULL_FUNC_ENTRY(vkBindImageMemory,                                                           bindImageMemory),
-       VK_NULL_FUNC_ENTRY(vkGetBufferMemoryRequirements,                                       getBufferMemoryRequirements),
-       VK_NULL_FUNC_ENTRY(vkGetImageMemoryRequirements,                                        getImageMemoryRequirements),
-       VK_NULL_FUNC_ENTRY(vkGetImageSparseMemoryRequirements,                          getImageSparseMemoryRequirements),
-       VK_NULL_FUNC_ENTRY(vkQueueBindSparse,                                                           queueBindSparse),
-       VK_NULL_FUNC_ENTRY(vkCreateFence,                                                                       createFence),
-       VK_NULL_FUNC_ENTRY(vkDestroyFence,                                                                      destroyFence),
-       VK_NULL_FUNC_ENTRY(vkResetFences,                                                                       resetFences),
-       VK_NULL_FUNC_ENTRY(vkGetFenceStatus,                                                            getFenceStatus),
-       VK_NULL_FUNC_ENTRY(vkWaitForFences,                                                                     waitForFences),
-       VK_NULL_FUNC_ENTRY(vkCreateSemaphore,                                                           createSemaphore),
-       VK_NULL_FUNC_ENTRY(vkDestroySemaphore,                                                          destroySemaphore),
-       VK_NULL_FUNC_ENTRY(vkCreateEvent,                                                                       createEvent),
-       VK_NULL_FUNC_ENTRY(vkDestroyEvent,                                                                      destroyEvent),
-       VK_NULL_FUNC_ENTRY(vkGetEventStatus,                                                            getEventStatus),
-       VK_NULL_FUNC_ENTRY(vkSetEvent,                                                                          setEvent),
-       VK_NULL_FUNC_ENTRY(vkResetEvent,                                                                        resetEvent),
-       VK_NULL_FUNC_ENTRY(vkCreateQueryPool,                                                           createQueryPool),
-       VK_NULL_FUNC_ENTRY(vkDestroyQueryPool,                                                          destroyQueryPool),
-       VK_NULL_FUNC_ENTRY(vkGetQueryPoolResults,                                                       getQueryPoolResults),
-       VK_NULL_FUNC_ENTRY(vkCreateBuffer,                                                                      createBuffer),
-       VK_NULL_FUNC_ENTRY(vkDestroyBuffer,                                                                     destroyBuffer),
-       VK_NULL_FUNC_ENTRY(vkCreateBufferView,                                                          createBufferView),
-       VK_NULL_FUNC_ENTRY(vkDestroyBufferView,                                                         destroyBufferView),
-       VK_NULL_FUNC_ENTRY(vkCreateImage,                                                                       createImage),
-       VK_NULL_FUNC_ENTRY(vkDestroyImage,                                                                      destroyImage),
-       VK_NULL_FUNC_ENTRY(vkGetImageSubresourceLayout,                                         getImageSubresourceLayout),
-       VK_NULL_FUNC_ENTRY(vkCreateImageView,                                                           createImageView),
-       VK_NULL_FUNC_ENTRY(vkDestroyImageView,                                                          destroyImageView),
-       VK_NULL_FUNC_ENTRY(vkCreateShaderModule,                                                        createShaderModule),
-       VK_NULL_FUNC_ENTRY(vkDestroyShaderModule,                                                       destroyShaderModule),
-       VK_NULL_FUNC_ENTRY(vkCreatePipelineCache,                                                       createPipelineCache),
-       VK_NULL_FUNC_ENTRY(vkDestroyPipelineCache,                                                      destroyPipelineCache),
-       VK_NULL_FUNC_ENTRY(vkGetPipelineCacheData,                                                      getPipelineCacheData),
-       VK_NULL_FUNC_ENTRY(vkMergePipelineCaches,                                                       mergePipelineCaches),
-       VK_NULL_FUNC_ENTRY(vkCreateGraphicsPipelines,                                           createGraphicsPipelines),
-       VK_NULL_FUNC_ENTRY(vkCreateComputePipelines,                                            createComputePipelines),
-       VK_NULL_FUNC_ENTRY(vkDestroyPipeline,                                                           destroyPipeline),
-       VK_NULL_FUNC_ENTRY(vkCreatePipelineLayout,                                                      createPipelineLayout),
-       VK_NULL_FUNC_ENTRY(vkDestroyPipelineLayout,                                                     destroyPipelineLayout),
-       VK_NULL_FUNC_ENTRY(vkCreateSampler,                                                                     createSampler),
-       VK_NULL_FUNC_ENTRY(vkDestroySampler,                                                            destroySampler),
-       VK_NULL_FUNC_ENTRY(vkCreateDescriptorSetLayout,                                         createDescriptorSetLayout),
-       VK_NULL_FUNC_ENTRY(vkDestroyDescriptorSetLayout,                                        destroyDescriptorSetLayout),
-       VK_NULL_FUNC_ENTRY(vkCreateDescriptorPool,                                                      createDescriptorPool),
-       VK_NULL_FUNC_ENTRY(vkDestroyDescriptorPool,                                                     destroyDescriptorPool),
-       VK_NULL_FUNC_ENTRY(vkResetDescriptorPool,                                                       resetDescriptorPool),
-       VK_NULL_FUNC_ENTRY(vkAllocateDescriptorSets,                                            allocateDescriptorSets),
-       VK_NULL_FUNC_ENTRY(vkFreeDescriptorSets,                                                        freeDescriptorSets),
-       VK_NULL_FUNC_ENTRY(vkUpdateDescriptorSets,                                                      updateDescriptorSets),
-       VK_NULL_FUNC_ENTRY(vkCreateFramebuffer,                                                         createFramebuffer),
-       VK_NULL_FUNC_ENTRY(vkDestroyFramebuffer,                                                        destroyFramebuffer),
-       VK_NULL_FUNC_ENTRY(vkCreateRenderPass,                                                          createRenderPass),
-       VK_NULL_FUNC_ENTRY(vkDestroyRenderPass,                                                         destroyRenderPass),
-       VK_NULL_FUNC_ENTRY(vkGetRenderAreaGranularity,                                          getRenderAreaGranularity),
-       VK_NULL_FUNC_ENTRY(vkCreateCommandPool,                                                         createCommandPool),
-       VK_NULL_FUNC_ENTRY(vkDestroyCommandPool,                                                        destroyCommandPool),
-       VK_NULL_FUNC_ENTRY(vkResetCommandPool,                                                          resetCommandPool),
-       VK_NULL_FUNC_ENTRY(vkAllocateCommandBuffers,                                            allocateCommandBuffers),
-       VK_NULL_FUNC_ENTRY(vkFreeCommandBuffers,                                                        freeCommandBuffers),
-       VK_NULL_FUNC_ENTRY(vkBeginCommandBuffer,                                                        beginCommandBuffer),
-       VK_NULL_FUNC_ENTRY(vkEndCommandBuffer,                                                          endCommandBuffer),
-       VK_NULL_FUNC_ENTRY(vkResetCommandBuffer,                                                        resetCommandBuffer),
-       VK_NULL_FUNC_ENTRY(vkCmdBindPipeline,                                                           cmdBindPipeline),
-       VK_NULL_FUNC_ENTRY(vkCmdSetViewport,                                                            cmdSetViewport),
-       VK_NULL_FUNC_ENTRY(vkCmdSetScissor,                                                                     cmdSetScissor),
-       VK_NULL_FUNC_ENTRY(vkCmdSetLineWidth,                                                           cmdSetLineWidth),
-       VK_NULL_FUNC_ENTRY(vkCmdSetDepthBias,                                                           cmdSetDepthBias),
-       VK_NULL_FUNC_ENTRY(vkCmdSetBlendConstants,                                                      cmdSetBlendConstants),
-       VK_NULL_FUNC_ENTRY(vkCmdSetDepthBounds,                                                         cmdSetDepthBounds),
-       VK_NULL_FUNC_ENTRY(vkCmdSetStencilCompareMask,                                          cmdSetStencilCompareMask),
-       VK_NULL_FUNC_ENTRY(vkCmdSetStencilWriteMask,                                            cmdSetStencilWriteMask),
-       VK_NULL_FUNC_ENTRY(vkCmdSetStencilReference,                                            cmdSetStencilReference),
-       VK_NULL_FUNC_ENTRY(vkCmdBindDescriptorSets,                                                     cmdBindDescriptorSets),
-       VK_NULL_FUNC_ENTRY(vkCmdBindIndexBuffer,                                                        cmdBindIndexBuffer),
-       VK_NULL_FUNC_ENTRY(vkCmdBindVertexBuffers,                                                      cmdBindVertexBuffers),
-       VK_NULL_FUNC_ENTRY(vkCmdDraw,                                                                           cmdDraw),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexed,                                                            cmdDrawIndexed),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirect,                                                           cmdDrawIndirect),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexedIndirect,                                            cmdDrawIndexedIndirect),
-       VK_NULL_FUNC_ENTRY(vkCmdDispatch,                                                                       cmdDispatch),
-       VK_NULL_FUNC_ENTRY(vkCmdDispatchIndirect,                                                       cmdDispatchIndirect),
-       VK_NULL_FUNC_ENTRY(vkCmdCopyBuffer,                                                                     cmdCopyBuffer),
-       VK_NULL_FUNC_ENTRY(vkCmdCopyImage,                                                                      cmdCopyImage),
-       VK_NULL_FUNC_ENTRY(vkCmdBlitImage,                                                                      cmdBlitImage),
-       VK_NULL_FUNC_ENTRY(vkCmdCopyBufferToImage,                                                      cmdCopyBufferToImage),
-       VK_NULL_FUNC_ENTRY(vkCmdCopyImageToBuffer,                                                      cmdCopyImageToBuffer),
-       VK_NULL_FUNC_ENTRY(vkCmdUpdateBuffer,                                                           cmdUpdateBuffer),
-       VK_NULL_FUNC_ENTRY(vkCmdFillBuffer,                                                                     cmdFillBuffer),
-       VK_NULL_FUNC_ENTRY(vkCmdClearColorImage,                                                        cmdClearColorImage),
-       VK_NULL_FUNC_ENTRY(vkCmdClearDepthStencilImage,                                         cmdClearDepthStencilImage),
-       VK_NULL_FUNC_ENTRY(vkCmdClearAttachments,                                                       cmdClearAttachments),
-       VK_NULL_FUNC_ENTRY(vkCmdResolveImage,                                                           cmdResolveImage),
-       VK_NULL_FUNC_ENTRY(vkCmdSetEvent,                                                                       cmdSetEvent),
-       VK_NULL_FUNC_ENTRY(vkCmdResetEvent,                                                                     cmdResetEvent),
-       VK_NULL_FUNC_ENTRY(vkCmdWaitEvents,                                                                     cmdWaitEvents),
-       VK_NULL_FUNC_ENTRY(vkCmdPipelineBarrier,                                                        cmdPipelineBarrier),
-       VK_NULL_FUNC_ENTRY(vkCmdBeginQuery,                                                                     cmdBeginQuery),
-       VK_NULL_FUNC_ENTRY(vkCmdEndQuery,                                                                       cmdEndQuery),
-       VK_NULL_FUNC_ENTRY(vkCmdResetQueryPool,                                                         cmdResetQueryPool),
-       VK_NULL_FUNC_ENTRY(vkCmdWriteTimestamp,                                                         cmdWriteTimestamp),
-       VK_NULL_FUNC_ENTRY(vkCmdCopyQueryPoolResults,                                           cmdCopyQueryPoolResults),
-       VK_NULL_FUNC_ENTRY(vkCmdPushConstants,                                                          cmdPushConstants),
-       VK_NULL_FUNC_ENTRY(vkCmdBeginRenderPass,                                                        cmdBeginRenderPass),
-       VK_NULL_FUNC_ENTRY(vkCmdNextSubpass,                                                            cmdNextSubpass),
-       VK_NULL_FUNC_ENTRY(vkCmdEndRenderPass,                                                          cmdEndRenderPass),
-       VK_NULL_FUNC_ENTRY(vkCmdExecuteCommands,                                                        cmdExecuteCommands),
-       VK_NULL_FUNC_ENTRY(vkBindBufferMemory2,                                                         bindBufferMemory2),
-       VK_NULL_FUNC_ENTRY(vkBindImageMemory2,                                                          bindImageMemory2),
-       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPeerMemoryFeatures,                          getDeviceGroupPeerMemoryFeatures),
-       VK_NULL_FUNC_ENTRY(vkCmdSetDeviceMask,                                                          cmdSetDeviceMask),
-       VK_NULL_FUNC_ENTRY(vkCmdDispatchBase,                                                           cmdDispatchBase),
-       VK_NULL_FUNC_ENTRY(vkGetImageMemoryRequirements2,                                       getImageMemoryRequirements2),
-       VK_NULL_FUNC_ENTRY(vkGetBufferMemoryRequirements2,                                      getBufferMemoryRequirements2),
-       VK_NULL_FUNC_ENTRY(vkGetImageSparseMemoryRequirements2,                         getImageSparseMemoryRequirements2),
-       VK_NULL_FUNC_ENTRY(vkTrimCommandPool,                                                           trimCommandPool),
-       VK_NULL_FUNC_ENTRY(vkGetDeviceQueue2,                                                           getDeviceQueue2),
-       VK_NULL_FUNC_ENTRY(vkCreateSamplerYcbcrConversion,                                      createSamplerYcbcrConversion),
-       VK_NULL_FUNC_ENTRY(vkDestroySamplerYcbcrConversion,                                     destroySamplerYcbcrConversion),
-       VK_NULL_FUNC_ENTRY(vkCreateDescriptorUpdateTemplate,                            createDescriptorUpdateTemplate),
-       VK_NULL_FUNC_ENTRY(vkDestroyDescriptorUpdateTemplate,                           destroyDescriptorUpdateTemplate),
-       VK_NULL_FUNC_ENTRY(vkUpdateDescriptorSetWithTemplate,                           updateDescriptorSetWithTemplate),
-       VK_NULL_FUNC_ENTRY(vkGetDescriptorSetLayoutSupport,                                     getDescriptorSetLayoutSupport),
-       VK_NULL_FUNC_ENTRY(vkCreateSwapchainKHR,                                                        createSwapchainKHR),
-       VK_NULL_FUNC_ENTRY(vkDestroySwapchainKHR,                                                       destroySwapchainKHR),
-       VK_NULL_FUNC_ENTRY(vkGetSwapchainImagesKHR,                                                     getSwapchainImagesKHR),
-       VK_NULL_FUNC_ENTRY(vkAcquireNextImageKHR,                                                       acquireNextImageKHR),
-       VK_NULL_FUNC_ENTRY(vkQueuePresentKHR,                                                           queuePresentKHR),
-       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPresentCapabilitiesKHR,                      getDeviceGroupPresentCapabilitiesKHR),
-       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupSurfacePresentModesKHR,                      getDeviceGroupSurfacePresentModesKHR),
-       VK_NULL_FUNC_ENTRY(vkAcquireNextImage2KHR,                                                      acquireNextImage2KHR),
-       VK_NULL_FUNC_ENTRY(vkCreateSharedSwapchainsKHR,                                         createSharedSwapchainsKHR),
-       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPeerMemoryFeaturesKHR,                       getDeviceGroupPeerMemoryFeatures),
-       VK_NULL_FUNC_ENTRY(vkCmdSetDeviceMaskKHR,                                                       cmdSetDeviceMask),
-       VK_NULL_FUNC_ENTRY(vkCmdDispatchBaseKHR,                                                        cmdDispatchBase),
-       VK_NULL_FUNC_ENTRY(vkTrimCommandPoolKHR,                                                        trimCommandPool),
-       VK_NULL_FUNC_ENTRY(vkGetMemoryFdKHR,                                                            getMemoryFdKHR),
-       VK_NULL_FUNC_ENTRY(vkGetMemoryFdPropertiesKHR,                                          getMemoryFdPropertiesKHR),
-       VK_NULL_FUNC_ENTRY(vkImportSemaphoreFdKHR,                                                      importSemaphoreFdKHR),
-       VK_NULL_FUNC_ENTRY(vkGetSemaphoreFdKHR,                                                         getSemaphoreFdKHR),
-       VK_NULL_FUNC_ENTRY(vkCmdPushDescriptorSetKHR,                                           cmdPushDescriptorSetKHR),
-       VK_NULL_FUNC_ENTRY(vkCmdPushDescriptorSetWithTemplateKHR,                       cmdPushDescriptorSetWithTemplateKHR),
-       VK_NULL_FUNC_ENTRY(vkCreateDescriptorUpdateTemplateKHR,                         createDescriptorUpdateTemplate),
-       VK_NULL_FUNC_ENTRY(vkDestroyDescriptorUpdateTemplateKHR,                        destroyDescriptorUpdateTemplate),
-       VK_NULL_FUNC_ENTRY(vkUpdateDescriptorSetWithTemplateKHR,                        updateDescriptorSetWithTemplate),
-       VK_NULL_FUNC_ENTRY(vkCreateRenderPass2KHR,                                                      createRenderPass2KHR),
-       VK_NULL_FUNC_ENTRY(vkCmdBeginRenderPass2KHR,                                            cmdBeginRenderPass2KHR),
-       VK_NULL_FUNC_ENTRY(vkCmdNextSubpass2KHR,                                                        cmdNextSubpass2KHR),
-       VK_NULL_FUNC_ENTRY(vkCmdEndRenderPass2KHR,                                                      cmdEndRenderPass2KHR),
-       VK_NULL_FUNC_ENTRY(vkGetSwapchainStatusKHR,                                                     getSwapchainStatusKHR),
-       VK_NULL_FUNC_ENTRY(vkImportFenceFdKHR,                                                          importFenceFdKHR),
-       VK_NULL_FUNC_ENTRY(vkGetFenceFdKHR,                                                                     getFenceFdKHR),
-       VK_NULL_FUNC_ENTRY(vkAcquireProfilingLockKHR,                                           acquireProfilingLockKHR),
-       VK_NULL_FUNC_ENTRY(vkReleaseProfilingLockKHR,                                           releaseProfilingLockKHR),
-       VK_NULL_FUNC_ENTRY(vkGetImageMemoryRequirements2KHR,                            getImageMemoryRequirements2),
-       VK_NULL_FUNC_ENTRY(vkGetBufferMemoryRequirements2KHR,                           getBufferMemoryRequirements2),
-       VK_NULL_FUNC_ENTRY(vkGetImageSparseMemoryRequirements2KHR,                      getImageSparseMemoryRequirements2),
-       VK_NULL_FUNC_ENTRY(vkCreateSamplerYcbcrConversionKHR,                           createSamplerYcbcrConversion),
-       VK_NULL_FUNC_ENTRY(vkDestroySamplerYcbcrConversionKHR,                          destroySamplerYcbcrConversion),
-       VK_NULL_FUNC_ENTRY(vkBindBufferMemory2KHR,                                                      bindBufferMemory2),
-       VK_NULL_FUNC_ENTRY(vkBindImageMemory2KHR,                                                       bindImageMemory2),
-       VK_NULL_FUNC_ENTRY(vkGetDescriptorSetLayoutSupportKHR,                          getDescriptorSetLayoutSupport),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirectCountKHR,                                           cmdDrawIndirectCountKHR),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexedIndirectCountKHR,                            cmdDrawIndexedIndirectCountKHR),
-       VK_NULL_FUNC_ENTRY(vkDebugMarkerSetObjectTagEXT,                                        debugMarkerSetObjectTagEXT),
-       VK_NULL_FUNC_ENTRY(vkDebugMarkerSetObjectNameEXT,                                       debugMarkerSetObjectNameEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdDebugMarkerBeginEXT,                                            cmdDebugMarkerBeginEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdDebugMarkerEndEXT,                                                      cmdDebugMarkerEndEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdDebugMarkerInsertEXT,                                           cmdDebugMarkerInsertEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdBindTransformFeedbackBuffersEXT,                        cmdBindTransformFeedbackBuffersEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdBeginTransformFeedbackEXT,                                      cmdBeginTransformFeedbackEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdEndTransformFeedbackEXT,                                        cmdEndTransformFeedbackEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdBeginQueryIndexedEXT,                                           cmdBeginQueryIndexedEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdEndQueryIndexedEXT,                                                     cmdEndQueryIndexedEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirectByteCountEXT,                                       cmdDrawIndirectByteCountEXT),
-       VK_NULL_FUNC_ENTRY(vkGetImageViewHandleNVX,                                                     getImageViewHandleNVX),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirectCountAMD,                                           cmdDrawIndirectCountAMD),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexedIndirectCountAMD,                            cmdDrawIndexedIndirectCountAMD),
-       VK_NULL_FUNC_ENTRY(vkGetShaderInfoAMD,                                                          getShaderInfoAMD),
-       VK_NULL_FUNC_ENTRY(vkCmdBeginConditionalRenderingEXT,                           cmdBeginConditionalRenderingEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdEndConditionalRenderingEXT,                                     cmdEndConditionalRenderingEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdProcessCommandsNVX,                                                     cmdProcessCommandsNVX),
-       VK_NULL_FUNC_ENTRY(vkCmdReserveSpaceForCommandsNVX,                                     cmdReserveSpaceForCommandsNVX),
-       VK_NULL_FUNC_ENTRY(vkCreateIndirectCommandsLayoutNVX,                           createIndirectCommandsLayoutNVX),
-       VK_NULL_FUNC_ENTRY(vkDestroyIndirectCommandsLayoutNVX,                          destroyIndirectCommandsLayoutNVX),
-       VK_NULL_FUNC_ENTRY(vkCreateObjectTableNVX,                                                      createObjectTableNVX),
-       VK_NULL_FUNC_ENTRY(vkDestroyObjectTableNVX,                                                     destroyObjectTableNVX),
-       VK_NULL_FUNC_ENTRY(vkRegisterObjectsNVX,                                                        registerObjectsNVX),
-       VK_NULL_FUNC_ENTRY(vkUnregisterObjectsNVX,                                                      unregisterObjectsNVX),
-       VK_NULL_FUNC_ENTRY(vkCmdSetViewportWScalingNV,                                          cmdSetViewportWScalingNV),
-       VK_NULL_FUNC_ENTRY(vkDisplayPowerControlEXT,                                            displayPowerControlEXT),
-       VK_NULL_FUNC_ENTRY(vkRegisterDeviceEventEXT,                                            registerDeviceEventEXT),
-       VK_NULL_FUNC_ENTRY(vkRegisterDisplayEventEXT,                                           registerDisplayEventEXT),
-       VK_NULL_FUNC_ENTRY(vkGetSwapchainCounterEXT,                                            getSwapchainCounterEXT),
-       VK_NULL_FUNC_ENTRY(vkGetRefreshCycleDurationGOOGLE,                                     getRefreshCycleDurationGOOGLE),
-       VK_NULL_FUNC_ENTRY(vkGetPastPresentationTimingGOOGLE,                           getPastPresentationTimingGOOGLE),
-       VK_NULL_FUNC_ENTRY(vkCmdSetDiscardRectangleEXT,                                         cmdSetDiscardRectangleEXT),
-       VK_NULL_FUNC_ENTRY(vkSetHdrMetadataEXT,                                                         setHdrMetadataEXT),
-       VK_NULL_FUNC_ENTRY(vkSetDebugUtilsObjectNameEXT,                                        setDebugUtilsObjectNameEXT),
-       VK_NULL_FUNC_ENTRY(vkSetDebugUtilsObjectTagEXT,                                         setDebugUtilsObjectTagEXT),
-       VK_NULL_FUNC_ENTRY(vkQueueBeginDebugUtilsLabelEXT,                                      queueBeginDebugUtilsLabelEXT),
-       VK_NULL_FUNC_ENTRY(vkQueueEndDebugUtilsLabelEXT,                                        queueEndDebugUtilsLabelEXT),
-       VK_NULL_FUNC_ENTRY(vkQueueInsertDebugUtilsLabelEXT,                                     queueInsertDebugUtilsLabelEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdBeginDebugUtilsLabelEXT,                                        cmdBeginDebugUtilsLabelEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdEndDebugUtilsLabelEXT,                                          cmdEndDebugUtilsLabelEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdInsertDebugUtilsLabelEXT,                                       cmdInsertDebugUtilsLabelEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdSetSampleLocationsEXT,                                          cmdSetSampleLocationsEXT),
-       VK_NULL_FUNC_ENTRY(vkGetImageDrmFormatModifierPropertiesEXT,            getImageDrmFormatModifierPropertiesEXT),
-       VK_NULL_FUNC_ENTRY(vkCreateValidationCacheEXT,                                          createValidationCacheEXT),
-       VK_NULL_FUNC_ENTRY(vkDestroyValidationCacheEXT,                                         destroyValidationCacheEXT),
-       VK_NULL_FUNC_ENTRY(vkMergeValidationCachesEXT,                                          mergeValidationCachesEXT),
-       VK_NULL_FUNC_ENTRY(vkGetValidationCacheDataEXT,                                         getValidationCacheDataEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdBindShadingRateImageNV,                                         cmdBindShadingRateImageNV),
-       VK_NULL_FUNC_ENTRY(vkCmdSetViewportShadingRatePaletteNV,                        cmdSetViewportShadingRatePaletteNV),
-       VK_NULL_FUNC_ENTRY(vkCmdSetCoarseSampleOrderNV,                                         cmdSetCoarseSampleOrderNV),
-       VK_NULL_FUNC_ENTRY(vkCreateAccelerationStructureNV,                                     createAccelerationStructureNV),
-       VK_NULL_FUNC_ENTRY(vkDestroyAccelerationStructureNV,                            destroyAccelerationStructureNV),
-       VK_NULL_FUNC_ENTRY(vkGetAccelerationStructureMemoryRequirementsNV,      getAccelerationStructureMemoryRequirementsNV),
-       VK_NULL_FUNC_ENTRY(vkBindAccelerationStructureMemoryNV,                         bindAccelerationStructureMemoryNV),
-       VK_NULL_FUNC_ENTRY(vkCmdBuildAccelerationStructureNV,                           cmdBuildAccelerationStructureNV),
-       VK_NULL_FUNC_ENTRY(vkCmdCopyAccelerationStructureNV,                            cmdCopyAccelerationStructureNV),
-       VK_NULL_FUNC_ENTRY(vkCmdTraceRaysNV,                                                            cmdTraceRaysNV),
-       VK_NULL_FUNC_ENTRY(vkCreateRayTracingPipelinesNV,                                       createRayTracingPipelinesNV),
-       VK_NULL_FUNC_ENTRY(vkGetRayTracingShaderGroupHandlesNV,                         getRayTracingShaderGroupHandlesNV),
-       VK_NULL_FUNC_ENTRY(vkGetAccelerationStructureHandleNV,                          getAccelerationStructureHandleNV),
-       VK_NULL_FUNC_ENTRY(vkCmdWriteAccelerationStructuresPropertiesNV,        cmdWriteAccelerationStructuresPropertiesNV),
-       VK_NULL_FUNC_ENTRY(vkCompileDeferredNV,                                                         compileDeferredNV),
-       VK_NULL_FUNC_ENTRY(vkGetMemoryHostPointerPropertiesEXT,                         getMemoryHostPointerPropertiesEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdWriteBufferMarkerAMD,                                           cmdWriteBufferMarkerAMD),
-       VK_NULL_FUNC_ENTRY(vkGetCalibratedTimestampsEXT,                                        getCalibratedTimestampsEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawMeshTasksNV,                                                        cmdDrawMeshTasksNV),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawMeshTasksIndirectNV,                                        cmdDrawMeshTasksIndirectNV),
-       VK_NULL_FUNC_ENTRY(vkCmdDrawMeshTasksIndirectCountNV,                           cmdDrawMeshTasksIndirectCountNV),
-       VK_NULL_FUNC_ENTRY(vkCmdSetExclusiveScissorNV,                                          cmdSetExclusiveScissorNV),
-       VK_NULL_FUNC_ENTRY(vkCmdSetCheckpointNV,                                                        cmdSetCheckpointNV),
-       VK_NULL_FUNC_ENTRY(vkGetQueueCheckpointDataNV,                                          getQueueCheckpointDataNV),
-       VK_NULL_FUNC_ENTRY(vkInitializePerformanceApiINTEL,                                     initializePerformanceApiINTEL),
-       VK_NULL_FUNC_ENTRY(vkUninitializePerformanceApiINTEL,                           uninitializePerformanceApiINTEL),
-       VK_NULL_FUNC_ENTRY(vkCmdSetPerformanceMarkerINTEL,                                      cmdSetPerformanceMarkerINTEL),
-       VK_NULL_FUNC_ENTRY(vkCmdSetPerformanceStreamMarkerINTEL,                        cmdSetPerformanceStreamMarkerINTEL),
-       VK_NULL_FUNC_ENTRY(vkCmdSetPerformanceOverrideINTEL,                            cmdSetPerformanceOverrideINTEL),
-       VK_NULL_FUNC_ENTRY(vkAcquirePerformanceConfigurationINTEL,                      acquirePerformanceConfigurationINTEL),
-       VK_NULL_FUNC_ENTRY(vkReleasePerformanceConfigurationINTEL,                      releasePerformanceConfigurationINTEL),
-       VK_NULL_FUNC_ENTRY(vkQueueSetPerformanceConfigurationINTEL,                     queueSetPerformanceConfigurationINTEL),
-       VK_NULL_FUNC_ENTRY(vkGetPerformanceParameterINTEL,                                      getPerformanceParameterINTEL),
-       VK_NULL_FUNC_ENTRY(vkSetLocalDimmingAMD,                                                        setLocalDimmingAMD),
-       VK_NULL_FUNC_ENTRY(vkGetBufferDeviceAddressEXT,                                         getBufferDeviceAddressEXT),
-       VK_NULL_FUNC_ENTRY(vkCmdSetLineStippleEXT,                                                      cmdSetLineStippleEXT),
-       VK_NULL_FUNC_ENTRY(vkResetQueryPoolEXT,                                                         resetQueryPoolEXT),
-       VK_NULL_FUNC_ENTRY(vkGetAndroidHardwareBufferPropertiesANDROID,         getAndroidHardwareBufferPropertiesANDROID),
-       VK_NULL_FUNC_ENTRY(vkGetMemoryAndroidHardwareBufferANDROID,                     getMemoryAndroidHardwareBufferANDROID),
-       VK_NULL_FUNC_ENTRY(vkGetMemoryWin32HandleKHR,                                           getMemoryWin32HandleKHR),
-       VK_NULL_FUNC_ENTRY(vkGetMemoryWin32HandlePropertiesKHR,                         getMemoryWin32HandlePropertiesKHR),
-       VK_NULL_FUNC_ENTRY(vkImportSemaphoreWin32HandleKHR,                                     importSemaphoreWin32HandleKHR),
-       VK_NULL_FUNC_ENTRY(vkGetSemaphoreWin32HandleKHR,                                        getSemaphoreWin32HandleKHR),
-       VK_NULL_FUNC_ENTRY(vkImportFenceWin32HandleKHR,                                         importFenceWin32HandleKHR),
-       VK_NULL_FUNC_ENTRY(vkGetFenceWin32HandleKHR,                                            getFenceWin32HandleKHR),
-       VK_NULL_FUNC_ENTRY(vkGetMemoryWin32HandleNV,                                            getMemoryWin32HandleNV),
-       VK_NULL_FUNC_ENTRY(vkAcquireFullScreenExclusiveModeEXT,                         acquireFullScreenExclusiveModeEXT),
-       VK_NULL_FUNC_ENTRY(vkReleaseFullScreenExclusiveModeEXT,                         releaseFullScreenExclusiveModeEXT),
-       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupSurfacePresentModes2EXT,                     getDeviceGroupSurfacePresentModes2EXT),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceProcAddr,                                                                 getDeviceProcAddr),
+       VK_NULL_FUNC_ENTRY(vkDestroyDevice,                                                                             destroyDevice),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceQueue,                                                                    getDeviceQueue),
+       VK_NULL_FUNC_ENTRY(vkQueueSubmit,                                                                               queueSubmit),
+       VK_NULL_FUNC_ENTRY(vkQueueWaitIdle,                                                                             queueWaitIdle),
+       VK_NULL_FUNC_ENTRY(vkDeviceWaitIdle,                                                                    deviceWaitIdle),
+       VK_NULL_FUNC_ENTRY(vkAllocateMemory,                                                                    allocateMemory),
+       VK_NULL_FUNC_ENTRY(vkFreeMemory,                                                                                freeMemory),
+       VK_NULL_FUNC_ENTRY(vkMapMemory,                                                                                 mapMemory),
+       VK_NULL_FUNC_ENTRY(vkUnmapMemory,                                                                               unmapMemory),
+       VK_NULL_FUNC_ENTRY(vkFlushMappedMemoryRanges,                                                   flushMappedMemoryRanges),
+       VK_NULL_FUNC_ENTRY(vkInvalidateMappedMemoryRanges,                                              invalidateMappedMemoryRanges),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceMemoryCommitment,                                                 getDeviceMemoryCommitment),
+       VK_NULL_FUNC_ENTRY(vkBindBufferMemory,                                                                  bindBufferMemory),
+       VK_NULL_FUNC_ENTRY(vkBindImageMemory,                                                                   bindImageMemory),
+       VK_NULL_FUNC_ENTRY(vkGetBufferMemoryRequirements,                                               getBufferMemoryRequirements),
+       VK_NULL_FUNC_ENTRY(vkGetImageMemoryRequirements,                                                getImageMemoryRequirements),
+       VK_NULL_FUNC_ENTRY(vkGetImageSparseMemoryRequirements,                                  getImageSparseMemoryRequirements),
+       VK_NULL_FUNC_ENTRY(vkQueueBindSparse,                                                                   queueBindSparse),
+       VK_NULL_FUNC_ENTRY(vkCreateFence,                                                                               createFence),
+       VK_NULL_FUNC_ENTRY(vkDestroyFence,                                                                              destroyFence),
+       VK_NULL_FUNC_ENTRY(vkResetFences,                                                                               resetFences),
+       VK_NULL_FUNC_ENTRY(vkGetFenceStatus,                                                                    getFenceStatus),
+       VK_NULL_FUNC_ENTRY(vkWaitForFences,                                                                             waitForFences),
+       VK_NULL_FUNC_ENTRY(vkCreateSemaphore,                                                                   createSemaphore),
+       VK_NULL_FUNC_ENTRY(vkDestroySemaphore,                                                                  destroySemaphore),
+       VK_NULL_FUNC_ENTRY(vkCreateEvent,                                                                               createEvent),
+       VK_NULL_FUNC_ENTRY(vkDestroyEvent,                                                                              destroyEvent),
+       VK_NULL_FUNC_ENTRY(vkGetEventStatus,                                                                    getEventStatus),
+       VK_NULL_FUNC_ENTRY(vkSetEvent,                                                                                  setEvent),
+       VK_NULL_FUNC_ENTRY(vkResetEvent,                                                                                resetEvent),
+       VK_NULL_FUNC_ENTRY(vkCreateQueryPool,                                                                   createQueryPool),
+       VK_NULL_FUNC_ENTRY(vkDestroyQueryPool,                                                                  destroyQueryPool),
+       VK_NULL_FUNC_ENTRY(vkGetQueryPoolResults,                                                               getQueryPoolResults),
+       VK_NULL_FUNC_ENTRY(vkCreateBuffer,                                                                              createBuffer),
+       VK_NULL_FUNC_ENTRY(vkDestroyBuffer,                                                                             destroyBuffer),
+       VK_NULL_FUNC_ENTRY(vkCreateBufferView,                                                                  createBufferView),
+       VK_NULL_FUNC_ENTRY(vkDestroyBufferView,                                                                 destroyBufferView),
+       VK_NULL_FUNC_ENTRY(vkCreateImage,                                                                               createImage),
+       VK_NULL_FUNC_ENTRY(vkDestroyImage,                                                                              destroyImage),
+       VK_NULL_FUNC_ENTRY(vkGetImageSubresourceLayout,                                                 getImageSubresourceLayout),
+       VK_NULL_FUNC_ENTRY(vkCreateImageView,                                                                   createImageView),
+       VK_NULL_FUNC_ENTRY(vkDestroyImageView,                                                                  destroyImageView),
+       VK_NULL_FUNC_ENTRY(vkCreateShaderModule,                                                                createShaderModule),
+       VK_NULL_FUNC_ENTRY(vkDestroyShaderModule,                                                               destroyShaderModule),
+       VK_NULL_FUNC_ENTRY(vkCreatePipelineCache,                                                               createPipelineCache),
+       VK_NULL_FUNC_ENTRY(vkDestroyPipelineCache,                                                              destroyPipelineCache),
+       VK_NULL_FUNC_ENTRY(vkGetPipelineCacheData,                                                              getPipelineCacheData),
+       VK_NULL_FUNC_ENTRY(vkMergePipelineCaches,                                                               mergePipelineCaches),
+       VK_NULL_FUNC_ENTRY(vkCreateGraphicsPipelines,                                                   createGraphicsPipelines),
+       VK_NULL_FUNC_ENTRY(vkCreateComputePipelines,                                                    createComputePipelines),
+       VK_NULL_FUNC_ENTRY(vkDestroyPipeline,                                                                   destroyPipeline),
+       VK_NULL_FUNC_ENTRY(vkCreatePipelineLayout,                                                              createPipelineLayout),
+       VK_NULL_FUNC_ENTRY(vkDestroyPipelineLayout,                                                             destroyPipelineLayout),
+       VK_NULL_FUNC_ENTRY(vkCreateSampler,                                                                             createSampler),
+       VK_NULL_FUNC_ENTRY(vkDestroySampler,                                                                    destroySampler),
+       VK_NULL_FUNC_ENTRY(vkCreateDescriptorSetLayout,                                                 createDescriptorSetLayout),
+       VK_NULL_FUNC_ENTRY(vkDestroyDescriptorSetLayout,                                                destroyDescriptorSetLayout),
+       VK_NULL_FUNC_ENTRY(vkCreateDescriptorPool,                                                              createDescriptorPool),
+       VK_NULL_FUNC_ENTRY(vkDestroyDescriptorPool,                                                             destroyDescriptorPool),
+       VK_NULL_FUNC_ENTRY(vkResetDescriptorPool,                                                               resetDescriptorPool),
+       VK_NULL_FUNC_ENTRY(vkAllocateDescriptorSets,                                                    allocateDescriptorSets),
+       VK_NULL_FUNC_ENTRY(vkFreeDescriptorSets,                                                                freeDescriptorSets),
+       VK_NULL_FUNC_ENTRY(vkUpdateDescriptorSets,                                                              updateDescriptorSets),
+       VK_NULL_FUNC_ENTRY(vkCreateFramebuffer,                                                                 createFramebuffer),
+       VK_NULL_FUNC_ENTRY(vkDestroyFramebuffer,                                                                destroyFramebuffer),
+       VK_NULL_FUNC_ENTRY(vkCreateRenderPass,                                                                  createRenderPass),
+       VK_NULL_FUNC_ENTRY(vkDestroyRenderPass,                                                                 destroyRenderPass),
+       VK_NULL_FUNC_ENTRY(vkGetRenderAreaGranularity,                                                  getRenderAreaGranularity),
+       VK_NULL_FUNC_ENTRY(vkCreateCommandPool,                                                                 createCommandPool),
+       VK_NULL_FUNC_ENTRY(vkDestroyCommandPool,                                                                destroyCommandPool),
+       VK_NULL_FUNC_ENTRY(vkResetCommandPool,                                                                  resetCommandPool),
+       VK_NULL_FUNC_ENTRY(vkAllocateCommandBuffers,                                                    allocateCommandBuffers),
+       VK_NULL_FUNC_ENTRY(vkFreeCommandBuffers,                                                                freeCommandBuffers),
+       VK_NULL_FUNC_ENTRY(vkBeginCommandBuffer,                                                                beginCommandBuffer),
+       VK_NULL_FUNC_ENTRY(vkEndCommandBuffer,                                                                  endCommandBuffer),
+       VK_NULL_FUNC_ENTRY(vkResetCommandBuffer,                                                                resetCommandBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdBindPipeline,                                                                   cmdBindPipeline),
+       VK_NULL_FUNC_ENTRY(vkCmdSetViewport,                                                                    cmdSetViewport),
+       VK_NULL_FUNC_ENTRY(vkCmdSetScissor,                                                                             cmdSetScissor),
+       VK_NULL_FUNC_ENTRY(vkCmdSetLineWidth,                                                                   cmdSetLineWidth),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDepthBias,                                                                   cmdSetDepthBias),
+       VK_NULL_FUNC_ENTRY(vkCmdSetBlendConstants,                                                              cmdSetBlendConstants),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDepthBounds,                                                                 cmdSetDepthBounds),
+       VK_NULL_FUNC_ENTRY(vkCmdSetStencilCompareMask,                                                  cmdSetStencilCompareMask),
+       VK_NULL_FUNC_ENTRY(vkCmdSetStencilWriteMask,                                                    cmdSetStencilWriteMask),
+       VK_NULL_FUNC_ENTRY(vkCmdSetStencilReference,                                                    cmdSetStencilReference),
+       VK_NULL_FUNC_ENTRY(vkCmdBindDescriptorSets,                                                             cmdBindDescriptorSets),
+       VK_NULL_FUNC_ENTRY(vkCmdBindIndexBuffer,                                                                cmdBindIndexBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdBindVertexBuffers,                                                              cmdBindVertexBuffers),
+       VK_NULL_FUNC_ENTRY(vkCmdDraw,                                                                                   cmdDraw),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexed,                                                                    cmdDrawIndexed),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirect,                                                                   cmdDrawIndirect),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexedIndirect,                                                    cmdDrawIndexedIndirect),
+       VK_NULL_FUNC_ENTRY(vkCmdDispatch,                                                                               cmdDispatch),
+       VK_NULL_FUNC_ENTRY(vkCmdDispatchIndirect,                                                               cmdDispatchIndirect),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyBuffer,                                                                             cmdCopyBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyImage,                                                                              cmdCopyImage),
+       VK_NULL_FUNC_ENTRY(vkCmdBlitImage,                                                                              cmdBlitImage),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyBufferToImage,                                                              cmdCopyBufferToImage),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyImageToBuffer,                                                              cmdCopyImageToBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdUpdateBuffer,                                                                   cmdUpdateBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdFillBuffer,                                                                             cmdFillBuffer),
+       VK_NULL_FUNC_ENTRY(vkCmdClearColorImage,                                                                cmdClearColorImage),
+       VK_NULL_FUNC_ENTRY(vkCmdClearDepthStencilImage,                                                 cmdClearDepthStencilImage),
+       VK_NULL_FUNC_ENTRY(vkCmdClearAttachments,                                                               cmdClearAttachments),
+       VK_NULL_FUNC_ENTRY(vkCmdResolveImage,                                                                   cmdResolveImage),
+       VK_NULL_FUNC_ENTRY(vkCmdSetEvent,                                                                               cmdSetEvent),
+       VK_NULL_FUNC_ENTRY(vkCmdResetEvent,                                                                             cmdResetEvent),
+       VK_NULL_FUNC_ENTRY(vkCmdWaitEvents,                                                                             cmdWaitEvents),
+       VK_NULL_FUNC_ENTRY(vkCmdPipelineBarrier,                                                                cmdPipelineBarrier),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginQuery,                                                                             cmdBeginQuery),
+       VK_NULL_FUNC_ENTRY(vkCmdEndQuery,                                                                               cmdEndQuery),
+       VK_NULL_FUNC_ENTRY(vkCmdResetQueryPool,                                                                 cmdResetQueryPool),
+       VK_NULL_FUNC_ENTRY(vkCmdWriteTimestamp,                                                                 cmdWriteTimestamp),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyQueryPoolResults,                                                   cmdCopyQueryPoolResults),
+       VK_NULL_FUNC_ENTRY(vkCmdPushConstants,                                                                  cmdPushConstants),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginRenderPass,                                                                cmdBeginRenderPass),
+       VK_NULL_FUNC_ENTRY(vkCmdNextSubpass,                                                                    cmdNextSubpass),
+       VK_NULL_FUNC_ENTRY(vkCmdEndRenderPass,                                                                  cmdEndRenderPass),
+       VK_NULL_FUNC_ENTRY(vkCmdExecuteCommands,                                                                cmdExecuteCommands),
+       VK_NULL_FUNC_ENTRY(vkBindBufferMemory2,                                                                 bindBufferMemory2),
+       VK_NULL_FUNC_ENTRY(vkBindImageMemory2,                                                                  bindImageMemory2),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPeerMemoryFeatures,                                  getDeviceGroupPeerMemoryFeatures),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDeviceMask,                                                                  cmdSetDeviceMask),
+       VK_NULL_FUNC_ENTRY(vkCmdDispatchBase,                                                                   cmdDispatchBase),
+       VK_NULL_FUNC_ENTRY(vkGetImageMemoryRequirements2,                                               getImageMemoryRequirements2),
+       VK_NULL_FUNC_ENTRY(vkGetBufferMemoryRequirements2,                                              getBufferMemoryRequirements2),
+       VK_NULL_FUNC_ENTRY(vkGetImageSparseMemoryRequirements2,                                 getImageSparseMemoryRequirements2),
+       VK_NULL_FUNC_ENTRY(vkTrimCommandPool,                                                                   trimCommandPool),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceQueue2,                                                                   getDeviceQueue2),
+       VK_NULL_FUNC_ENTRY(vkCreateSamplerYcbcrConversion,                                              createSamplerYcbcrConversion),
+       VK_NULL_FUNC_ENTRY(vkDestroySamplerYcbcrConversion,                                             destroySamplerYcbcrConversion),
+       VK_NULL_FUNC_ENTRY(vkCreateDescriptorUpdateTemplate,                                    createDescriptorUpdateTemplate),
+       VK_NULL_FUNC_ENTRY(vkDestroyDescriptorUpdateTemplate,                                   destroyDescriptorUpdateTemplate),
+       VK_NULL_FUNC_ENTRY(vkUpdateDescriptorSetWithTemplate,                                   updateDescriptorSetWithTemplate),
+       VK_NULL_FUNC_ENTRY(vkGetDescriptorSetLayoutSupport,                                             getDescriptorSetLayoutSupport),
+       VK_NULL_FUNC_ENTRY(vkCreateSwapchainKHR,                                                                createSwapchainKHR),
+       VK_NULL_FUNC_ENTRY(vkDestroySwapchainKHR,                                                               destroySwapchainKHR),
+       VK_NULL_FUNC_ENTRY(vkGetSwapchainImagesKHR,                                                             getSwapchainImagesKHR),
+       VK_NULL_FUNC_ENTRY(vkAcquireNextImageKHR,                                                               acquireNextImageKHR),
+       VK_NULL_FUNC_ENTRY(vkQueuePresentKHR,                                                                   queuePresentKHR),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPresentCapabilitiesKHR,                              getDeviceGroupPresentCapabilitiesKHR),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupSurfacePresentModesKHR,                              getDeviceGroupSurfacePresentModesKHR),
+       VK_NULL_FUNC_ENTRY(vkAcquireNextImage2KHR,                                                              acquireNextImage2KHR),
+       VK_NULL_FUNC_ENTRY(vkCreateSharedSwapchainsKHR,                                                 createSharedSwapchainsKHR),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPeerMemoryFeaturesKHR,                               getDeviceGroupPeerMemoryFeatures),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDeviceMaskKHR,                                                               cmdSetDeviceMask),
+       VK_NULL_FUNC_ENTRY(vkCmdDispatchBaseKHR,                                                                cmdDispatchBase),
+       VK_NULL_FUNC_ENTRY(vkTrimCommandPoolKHR,                                                                trimCommandPool),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryFdKHR,                                                                    getMemoryFdKHR),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryFdPropertiesKHR,                                                  getMemoryFdPropertiesKHR),
+       VK_NULL_FUNC_ENTRY(vkImportSemaphoreFdKHR,                                                              importSemaphoreFdKHR),
+       VK_NULL_FUNC_ENTRY(vkGetSemaphoreFdKHR,                                                                 getSemaphoreFdKHR),
+       VK_NULL_FUNC_ENTRY(vkCmdPushDescriptorSetKHR,                                                   cmdPushDescriptorSetKHR),
+       VK_NULL_FUNC_ENTRY(vkCmdPushDescriptorSetWithTemplateKHR,                               cmdPushDescriptorSetWithTemplateKHR),
+       VK_NULL_FUNC_ENTRY(vkCreateDescriptorUpdateTemplateKHR,                                 createDescriptorUpdateTemplate),
+       VK_NULL_FUNC_ENTRY(vkDestroyDescriptorUpdateTemplateKHR,                                destroyDescriptorUpdateTemplate),
+       VK_NULL_FUNC_ENTRY(vkUpdateDescriptorSetWithTemplateKHR,                                updateDescriptorSetWithTemplate),
+       VK_NULL_FUNC_ENTRY(vkCreateRenderPass2KHR,                                                              createRenderPass2KHR),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginRenderPass2KHR,                                                    cmdBeginRenderPass2KHR),
+       VK_NULL_FUNC_ENTRY(vkCmdNextSubpass2KHR,                                                                cmdNextSubpass2KHR),
+       VK_NULL_FUNC_ENTRY(vkCmdEndRenderPass2KHR,                                                              cmdEndRenderPass2KHR),
+       VK_NULL_FUNC_ENTRY(vkGetSwapchainStatusKHR,                                                             getSwapchainStatusKHR),
+       VK_NULL_FUNC_ENTRY(vkImportFenceFdKHR,                                                                  importFenceFdKHR),
+       VK_NULL_FUNC_ENTRY(vkGetFenceFdKHR,                                                                             getFenceFdKHR),
+       VK_NULL_FUNC_ENTRY(vkAcquireProfilingLockKHR,                                                   acquireProfilingLockKHR),
+       VK_NULL_FUNC_ENTRY(vkReleaseProfilingLockKHR,                                                   releaseProfilingLockKHR),
+       VK_NULL_FUNC_ENTRY(vkGetImageMemoryRequirements2KHR,                                    getImageMemoryRequirements2),
+       VK_NULL_FUNC_ENTRY(vkGetBufferMemoryRequirements2KHR,                                   getBufferMemoryRequirements2),
+       VK_NULL_FUNC_ENTRY(vkGetImageSparseMemoryRequirements2KHR,                              getImageSparseMemoryRequirements2),
+       VK_NULL_FUNC_ENTRY(vkCreateSamplerYcbcrConversionKHR,                                   createSamplerYcbcrConversion),
+       VK_NULL_FUNC_ENTRY(vkDestroySamplerYcbcrConversionKHR,                                  destroySamplerYcbcrConversion),
+       VK_NULL_FUNC_ENTRY(vkBindBufferMemory2KHR,                                                              bindBufferMemory2),
+       VK_NULL_FUNC_ENTRY(vkBindImageMemory2KHR,                                                               bindImageMemory2),
+       VK_NULL_FUNC_ENTRY(vkGetDescriptorSetLayoutSupportKHR,                                  getDescriptorSetLayoutSupport),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirectCountKHR,                                                   cmdDrawIndirectCountKHR),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexedIndirectCountKHR,                                    cmdDrawIndexedIndirectCountKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPipelineExecutablePropertiesKHR,                                getPipelineExecutablePropertiesKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPipelineExecutableStatisticsKHR,                                getPipelineExecutableStatisticsKHR),
+       VK_NULL_FUNC_ENTRY(vkGetPipelineExecutableInternalRepresentationsKHR,   getPipelineExecutableInternalRepresentationsKHR),
+       VK_NULL_FUNC_ENTRY(vkDebugMarkerSetObjectTagEXT,                                                debugMarkerSetObjectTagEXT),
+       VK_NULL_FUNC_ENTRY(vkDebugMarkerSetObjectNameEXT,                                               debugMarkerSetObjectNameEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdDebugMarkerBeginEXT,                                                    cmdDebugMarkerBeginEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdDebugMarkerEndEXT,                                                              cmdDebugMarkerEndEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdDebugMarkerInsertEXT,                                                   cmdDebugMarkerInsertEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdBindTransformFeedbackBuffersEXT,                                cmdBindTransformFeedbackBuffersEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginTransformFeedbackEXT,                                              cmdBeginTransformFeedbackEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdEndTransformFeedbackEXT,                                                cmdEndTransformFeedbackEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginQueryIndexedEXT,                                                   cmdBeginQueryIndexedEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdEndQueryIndexedEXT,                                                             cmdEndQueryIndexedEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirectByteCountEXT,                                               cmdDrawIndirectByteCountEXT),
+       VK_NULL_FUNC_ENTRY(vkGetImageViewHandleNVX,                                                             getImageViewHandleNVX),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndirectCountAMD,                                                   cmdDrawIndirectCountAMD),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawIndexedIndirectCountAMD,                                    cmdDrawIndexedIndirectCountAMD),
+       VK_NULL_FUNC_ENTRY(vkGetShaderInfoAMD,                                                                  getShaderInfoAMD),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginConditionalRenderingEXT,                                   cmdBeginConditionalRenderingEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdEndConditionalRenderingEXT,                                             cmdEndConditionalRenderingEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdProcessCommandsNVX,                                                             cmdProcessCommandsNVX),
+       VK_NULL_FUNC_ENTRY(vkCmdReserveSpaceForCommandsNVX,                                             cmdReserveSpaceForCommandsNVX),
+       VK_NULL_FUNC_ENTRY(vkCreateIndirectCommandsLayoutNVX,                                   createIndirectCommandsLayoutNVX),
+       VK_NULL_FUNC_ENTRY(vkDestroyIndirectCommandsLayoutNVX,                                  destroyIndirectCommandsLayoutNVX),
+       VK_NULL_FUNC_ENTRY(vkCreateObjectTableNVX,                                                              createObjectTableNVX),
+       VK_NULL_FUNC_ENTRY(vkDestroyObjectTableNVX,                                                             destroyObjectTableNVX),
+       VK_NULL_FUNC_ENTRY(vkRegisterObjectsNVX,                                                                registerObjectsNVX),
+       VK_NULL_FUNC_ENTRY(vkUnregisterObjectsNVX,                                                              unregisterObjectsNVX),
+       VK_NULL_FUNC_ENTRY(vkCmdSetViewportWScalingNV,                                                  cmdSetViewportWScalingNV),
+       VK_NULL_FUNC_ENTRY(vkDisplayPowerControlEXT,                                                    displayPowerControlEXT),
+       VK_NULL_FUNC_ENTRY(vkRegisterDeviceEventEXT,                                                    registerDeviceEventEXT),
+       VK_NULL_FUNC_ENTRY(vkRegisterDisplayEventEXT,                                                   registerDisplayEventEXT),
+       VK_NULL_FUNC_ENTRY(vkGetSwapchainCounterEXT,                                                    getSwapchainCounterEXT),
+       VK_NULL_FUNC_ENTRY(vkGetRefreshCycleDurationGOOGLE,                                             getRefreshCycleDurationGOOGLE),
+       VK_NULL_FUNC_ENTRY(vkGetPastPresentationTimingGOOGLE,                                   getPastPresentationTimingGOOGLE),
+       VK_NULL_FUNC_ENTRY(vkCmdSetDiscardRectangleEXT,                                                 cmdSetDiscardRectangleEXT),
+       VK_NULL_FUNC_ENTRY(vkSetHdrMetadataEXT,                                                                 setHdrMetadataEXT),
+       VK_NULL_FUNC_ENTRY(vkSetDebugUtilsObjectNameEXT,                                                setDebugUtilsObjectNameEXT),
+       VK_NULL_FUNC_ENTRY(vkSetDebugUtilsObjectTagEXT,                                                 setDebugUtilsObjectTagEXT),
+       VK_NULL_FUNC_ENTRY(vkQueueBeginDebugUtilsLabelEXT,                                              queueBeginDebugUtilsLabelEXT),
+       VK_NULL_FUNC_ENTRY(vkQueueEndDebugUtilsLabelEXT,                                                queueEndDebugUtilsLabelEXT),
+       VK_NULL_FUNC_ENTRY(vkQueueInsertDebugUtilsLabelEXT,                                             queueInsertDebugUtilsLabelEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdBeginDebugUtilsLabelEXT,                                                cmdBeginDebugUtilsLabelEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdEndDebugUtilsLabelEXT,                                                  cmdEndDebugUtilsLabelEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdInsertDebugUtilsLabelEXT,                                               cmdInsertDebugUtilsLabelEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetSampleLocationsEXT,                                                  cmdSetSampleLocationsEXT),
+       VK_NULL_FUNC_ENTRY(vkGetImageDrmFormatModifierPropertiesEXT,                    getImageDrmFormatModifierPropertiesEXT),
+       VK_NULL_FUNC_ENTRY(vkCreateValidationCacheEXT,                                                  createValidationCacheEXT),
+       VK_NULL_FUNC_ENTRY(vkDestroyValidationCacheEXT,                                                 destroyValidationCacheEXT),
+       VK_NULL_FUNC_ENTRY(vkMergeValidationCachesEXT,                                                  mergeValidationCachesEXT),
+       VK_NULL_FUNC_ENTRY(vkGetValidationCacheDataEXT,                                                 getValidationCacheDataEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdBindShadingRateImageNV,                                                 cmdBindShadingRateImageNV),
+       VK_NULL_FUNC_ENTRY(vkCmdSetViewportShadingRatePaletteNV,                                cmdSetViewportShadingRatePaletteNV),
+       VK_NULL_FUNC_ENTRY(vkCmdSetCoarseSampleOrderNV,                                                 cmdSetCoarseSampleOrderNV),
+       VK_NULL_FUNC_ENTRY(vkCreateAccelerationStructureNV,                                             createAccelerationStructureNV),
+       VK_NULL_FUNC_ENTRY(vkDestroyAccelerationStructureNV,                                    destroyAccelerationStructureNV),
+       VK_NULL_FUNC_ENTRY(vkGetAccelerationStructureMemoryRequirementsNV,              getAccelerationStructureMemoryRequirementsNV),
+       VK_NULL_FUNC_ENTRY(vkBindAccelerationStructureMemoryNV,                                 bindAccelerationStructureMemoryNV),
+       VK_NULL_FUNC_ENTRY(vkCmdBuildAccelerationStructureNV,                                   cmdBuildAccelerationStructureNV),
+       VK_NULL_FUNC_ENTRY(vkCmdCopyAccelerationStructureNV,                                    cmdCopyAccelerationStructureNV),
+       VK_NULL_FUNC_ENTRY(vkCmdTraceRaysNV,                                                                    cmdTraceRaysNV),
+       VK_NULL_FUNC_ENTRY(vkCreateRayTracingPipelinesNV,                                               createRayTracingPipelinesNV),
+       VK_NULL_FUNC_ENTRY(vkGetRayTracingShaderGroupHandlesNV,                                 getRayTracingShaderGroupHandlesNV),
+       VK_NULL_FUNC_ENTRY(vkGetAccelerationStructureHandleNV,                                  getAccelerationStructureHandleNV),
+       VK_NULL_FUNC_ENTRY(vkCmdWriteAccelerationStructuresPropertiesNV,                cmdWriteAccelerationStructuresPropertiesNV),
+       VK_NULL_FUNC_ENTRY(vkCompileDeferredNV,                                                                 compileDeferredNV),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryHostPointerPropertiesEXT,                                 getMemoryHostPointerPropertiesEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdWriteBufferMarkerAMD,                                                   cmdWriteBufferMarkerAMD),
+       VK_NULL_FUNC_ENTRY(vkGetCalibratedTimestampsEXT,                                                getCalibratedTimestampsEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawMeshTasksNV,                                                                cmdDrawMeshTasksNV),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawMeshTasksIndirectNV,                                                cmdDrawMeshTasksIndirectNV),
+       VK_NULL_FUNC_ENTRY(vkCmdDrawMeshTasksIndirectCountNV,                                   cmdDrawMeshTasksIndirectCountNV),
+       VK_NULL_FUNC_ENTRY(vkCmdSetExclusiveScissorNV,                                                  cmdSetExclusiveScissorNV),
+       VK_NULL_FUNC_ENTRY(vkCmdSetCheckpointNV,                                                                cmdSetCheckpointNV),
+       VK_NULL_FUNC_ENTRY(vkGetQueueCheckpointDataNV,                                                  getQueueCheckpointDataNV),
+       VK_NULL_FUNC_ENTRY(vkInitializePerformanceApiINTEL,                                             initializePerformanceApiINTEL),
+       VK_NULL_FUNC_ENTRY(vkUninitializePerformanceApiINTEL,                                   uninitializePerformanceApiINTEL),
+       VK_NULL_FUNC_ENTRY(vkCmdSetPerformanceMarkerINTEL,                                              cmdSetPerformanceMarkerINTEL),
+       VK_NULL_FUNC_ENTRY(vkCmdSetPerformanceStreamMarkerINTEL,                                cmdSetPerformanceStreamMarkerINTEL),
+       VK_NULL_FUNC_ENTRY(vkCmdSetPerformanceOverrideINTEL,                                    cmdSetPerformanceOverrideINTEL),
+       VK_NULL_FUNC_ENTRY(vkAcquirePerformanceConfigurationINTEL,                              acquirePerformanceConfigurationINTEL),
+       VK_NULL_FUNC_ENTRY(vkReleasePerformanceConfigurationINTEL,                              releasePerformanceConfigurationINTEL),
+       VK_NULL_FUNC_ENTRY(vkQueueSetPerformanceConfigurationINTEL,                             queueSetPerformanceConfigurationINTEL),
+       VK_NULL_FUNC_ENTRY(vkGetPerformanceParameterINTEL,                                              getPerformanceParameterINTEL),
+       VK_NULL_FUNC_ENTRY(vkSetLocalDimmingAMD,                                                                setLocalDimmingAMD),
+       VK_NULL_FUNC_ENTRY(vkGetBufferDeviceAddressEXT,                                                 getBufferDeviceAddressEXT),
+       VK_NULL_FUNC_ENTRY(vkCmdSetLineStippleEXT,                                                              cmdSetLineStippleEXT),
+       VK_NULL_FUNC_ENTRY(vkResetQueryPoolEXT,                                                                 resetQueryPoolEXT),
+       VK_NULL_FUNC_ENTRY(vkGetAndroidHardwareBufferPropertiesANDROID,                 getAndroidHardwareBufferPropertiesANDROID),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryAndroidHardwareBufferANDROID,                             getMemoryAndroidHardwareBufferANDROID),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryWin32HandleKHR,                                                   getMemoryWin32HandleKHR),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryWin32HandlePropertiesKHR,                                 getMemoryWin32HandlePropertiesKHR),
+       VK_NULL_FUNC_ENTRY(vkImportSemaphoreWin32HandleKHR,                                             importSemaphoreWin32HandleKHR),
+       VK_NULL_FUNC_ENTRY(vkGetSemaphoreWin32HandleKHR,                                                getSemaphoreWin32HandleKHR),
+       VK_NULL_FUNC_ENTRY(vkImportFenceWin32HandleKHR,                                                 importFenceWin32HandleKHR),
+       VK_NULL_FUNC_ENTRY(vkGetFenceWin32HandleKHR,                                                    getFenceWin32HandleKHR),
+       VK_NULL_FUNC_ENTRY(vkGetMemoryWin32HandleNV,                                                    getMemoryWin32HandleNV),
+       VK_NULL_FUNC_ENTRY(vkAcquireFullScreenExclusiveModeEXT,                                 acquireFullScreenExclusiveModeEXT),
+       VK_NULL_FUNC_ENTRY(vkReleaseFullScreenExclusiveModeEXT,                                 releaseFullScreenExclusiveModeEXT),
+       VK_NULL_FUNC_ENTRY(vkGetDeviceGroupSurfacePresentModes2EXT,                             getDeviceGroupSurfacePresentModes2EXT),
 };
 
index dad6dd8..3e3f426 100644 (file)
@@ -51,6 +51,7 @@ const char*   getPerformanceCounterScopeKHRName                                               (VkPerformanceCounterScopeKHR
 const char*    getPerformanceCounterStorageKHRName                                             (VkPerformanceCounterStorageKHR value);
 const char*    getDriverIdKHRName                                                                              (VkDriverIdKHR value);
 const char*    getShaderFloatControlsIndependenceKHRName                               (VkShaderFloatControlsIndependenceKHR value);
+const char*    getPipelineExecutableStatisticFormatKHRName                             (VkPipelineExecutableStatisticFormatKHR value);
 const char*    getDebugReportObjectTypeEXTName                                                 (VkDebugReportObjectTypeEXT value);
 const char*    getRasterizationOrderAMDName                                                    (VkRasterizationOrderAMD value);
 const char*    getShaderInfoTypeAMDName                                                                (VkShaderInfoTypeAMD value);
@@ -140,6 +141,7 @@ inline tcu::Format::Enum<VkPerformanceCounterScopeKHR>                                              getPerformanceCounte
 inline tcu::Format::Enum<VkPerformanceCounterStorageKHR>                                       getPerformanceCounterStorageKHRStr                                      (VkPerformanceCounterStorageKHR value)                                  { return tcu::Format::Enum<VkPerformanceCounterStorageKHR>(getPerformanceCounterStorageKHRName, 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<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);                                                                                                                       }
@@ -229,6 +231,7 @@ inline std::ostream&        operator<<      (std::ostream& s, VkPerformanceCounterScopeKHR v
 inline std::ostream&   operator<<      (std::ostream& s, VkPerformanceCounterStorageKHR value)                                         { return s << getPerformanceCounterStorageKHRStr(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, 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);                                                           }
@@ -633,6 +636,13 @@ std::ostream&      operator<<      (std::ostream& s, const VkPhysicalDeviceDepthStencilRes
 std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceVulkanMemoryModelFeaturesKHR& value);
 std::ostream&  operator<<      (std::ostream& s, const VkSurfaceProtectedCapabilitiesKHR& value);
 std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineExecutablePropertiesKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineExecutableInfoKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineExecutableStatisticValueKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineExecutableStatisticKHR& value);
+std::ostream&  operator<<      (std::ostream& s, const VkPipelineExecutableInternalRepresentationKHR& value);
 std::ostream&  operator<<      (std::ostream& s, const VkDebugReportCallbackCreateInfoEXT& value);
 std::ostream&  operator<<      (std::ostream& s, const VkPipelineRasterizationStateRasterizationOrderAMD& value);
 std::ostream&  operator<<      (std::ostream& s, const VkDebugMarkerObjectNameInfoEXT& value);
index 43e0174..e7662e9 100644 (file)
@@ -489,6 +489,12 @@ const char* getStructureTypeName (VkStructureType value)
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:                               return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT:                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:                                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT";
+               case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR";
+               case VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR:                                                                                               return "VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR:                                                              return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR";
+               case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR:                                                                    return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR";
+               case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR:                                                               return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR";
+               case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR:                                 return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:                             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT";
                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:                   return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT";
@@ -1512,6 +1518,19 @@ const char* getShaderFloatControlsIndependenceKHRName (VkShaderFloatControlsInde
        }
 }
 
+const char* getPipelineExecutableStatisticFormatKHRName (VkPipelineExecutableStatisticFormatKHR value)
+{
+       switch (value)
+       {
+               case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR:        return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR";
+               case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR:         return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR";
+               case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR:        return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR";
+               case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR:       return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR";
+               case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR:      return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR";
+               default:                                                                                                        return DE_NULL;
+       }
+}
+
 const char* getDebugReportObjectTypeEXTName (VkDebugReportObjectTypeEXT value)
 {
        switch (value)
@@ -2367,15 +2386,17 @@ tcu::Format::Bitfield<32> getPipelineCreateFlagsStr (VkPipelineCreateFlags value
 {
        static const tcu::Format::BitDesc s_desc[] =
        {
-               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,                               "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,                                  "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DERIVATIVE_BIT,                                                 "VK_PIPELINE_CREATE_DERIVATIVE_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,               "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"),
-               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE,                                                  "VK_PIPELINE_CREATE_DISPATCH_BASE"),
-               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV,                                   "VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV"),
-               tcu::Format::BitDesc(VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR,   "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR"),
-               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE_KHR,                                              "VK_PIPELINE_CREATE_DISPATCH_BASE_KHR"),
-               tcu::Format::BitDesc(VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM,                                             "VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,                                       "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,                                          "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DERIVATIVE_BIT,                                                         "VK_PIPELINE_CREATE_DERIVATIVE_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,                       "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE,                                                          "VK_PIPELINE_CREATE_DISPATCH_BASE"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV,                                           "VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR,                                     "VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR,       "VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR,           "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE_KHR,                                                      "VK_PIPELINE_CREATE_DISPATCH_BASE_KHR"),
+               tcu::Format::BitDesc(VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM,                                                     "VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM"),
        };
        return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
 }
@@ -6421,6 +6442,88 @@ std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceUniformBufferSt
        return s;
 }
 
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& value)
+{
+       s << "VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpipelineExecutableInfo = " << value.pipelineExecutableInfo << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineInfoKHR& value)
+{
+       s << "VkPipelineInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpipeline = " << value.pipeline << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineExecutablePropertiesKHR& value)
+{
+       s << "VkPipelineExecutablePropertiesKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tstages = " << getShaderStageFlagsStr(value.stages) << '\n';
+       s << "\tname = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.name)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.name))) << '\n';
+       s << "\tdescription = " << (const char*)value.description << '\n';
+       s << "\tsubgroupSize = " << value.subgroupSize << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineExecutableInfoKHR& value)
+{
+       s << "VkPipelineExecutableInfoKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tpipeline = " << value.pipeline << '\n';
+       s << "\texecutableIndex = " << value.executableIndex << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineExecutableStatisticValueKHR& value)
+{
+       s << "VkPipelineExecutableStatisticValueKHR = {\n";
+       s << "\tb32 = " << value.b32 << '\n';
+       s << "\ti64 = " << value.i64 << '\n';
+       s << "\tu64 = " << value.u64 << '\n';
+       s << "\tf64 = " << value.f64 << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineExecutableStatisticKHR& value)
+{
+       s << "VkPipelineExecutableStatisticKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tname = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.name)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.name))) << '\n';
+       s << "\tdescription = " << (const char*)value.description << '\n';
+       s << "\tformat = " << value.format << '\n';
+       s << "\tvalue = " << value.value << '\n';
+       s << '}';
+       return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPipelineExecutableInternalRepresentationKHR& value)
+{
+       s << "VkPipelineExecutableInternalRepresentationKHR = {\n";
+       s << "\tsType = " << value.sType << '\n';
+       s << "\tpNext = " << value.pNext << '\n';
+       s << "\tname = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.name)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.name))) << '\n';
+       s << "\tdescription = " << (const char*)value.description << '\n';
+       s << "\tisText = " << value.isText << '\n';
+       s << "\tdataSize = " << value.dataSize << '\n';
+       s << "\tpData = " << value.pData << '\n';
+       s << '}';
+       return s;
+}
+
 std::ostream& operator<< (std::ostream& s, const VkDebugReportCallbackCreateInfoEXT& value)
 {
        s << "VkDebugReportCallbackCreateInfoEXT = {\n";
index 28d7659..d10a23a 100644 (file)
@@ -2379,6 +2379,67 @@ struct VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR
        VkBool32                uniformBufferStandardLayout;
 };
 
+struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                pipelineExecutableInfo;
+};
+
+struct VkPipelineInfoKHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkPipeline              pipeline;
+};
+
+struct VkPipelineExecutablePropertiesKHR
+{
+       VkStructureType         sType;
+       void*                           pNext;
+       VkShaderStageFlags      stages;
+       char                            name[VK_MAX_DESCRIPTION_SIZE];
+       char                            description[VK_MAX_DESCRIPTION_SIZE];
+       deUint32                        subgroupSize;
+};
+
+struct VkPipelineExecutableInfoKHR
+{
+       VkStructureType sType;
+       const void*             pNext;
+       VkPipeline              pipeline;
+       deUint32                executableIndex;
+};
+
+union VkPipelineExecutableStatisticValueKHR
+{
+       VkBool32        b32;
+       deInt64         i64;
+       deUint64        u64;
+       double          f64;
+};
+
+struct VkPipelineExecutableStatisticKHR
+{
+       VkStructureType                                                 sType;
+       void*                                                                   pNext;
+       char                                                                    name[VK_MAX_DESCRIPTION_SIZE];
+       char                                                                    description[VK_MAX_DESCRIPTION_SIZE];
+       VkPipelineExecutableStatisticFormatKHR  format;
+       VkPipelineExecutableStatisticValueKHR   value;
+};
+
+struct VkPipelineExecutableInternalRepresentationKHR
+{
+       VkStructureType sType;
+       void*                   pNext;
+       char                    name[VK_MAX_DESCRIPTION_SIZE];
+       char                    description[VK_MAX_DESCRIPTION_SIZE];
+       VkBool32                isText;
+       deUintptr               dataSize;
+       void*                   pData;
+};
+
 struct VkDebugReportCallbackCreateInfoEXT
 {
        VkStructureType                                 sType;
index 67fc21f..c30ccfc 100644 (file)
@@ -164,6 +164,9 @@ virtual VkResult                    acquireProfilingLockKHR                                                 (VkDevice device, const VkAcqui
 virtual void                           releaseProfilingLockKHR                                                 (VkDevice device) const = 0;
 virtual void                           cmdDrawIndirectCountKHR                                                 (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const = 0;
 virtual void                           cmdDrawIndexedIndirectCountKHR                                  (VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, deUint32 maxDrawCount, deUint32 stride) const = 0;
+virtual VkResult                       getPipelineExecutablePropertiesKHR                              (VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, deUint32* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties) const = 0;
+virtual VkResult                       getPipelineExecutableStatisticsKHR                              (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics) const = 0;
+virtual VkResult                       getPipelineExecutableInternalRepresentationsKHR (VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, deUint32* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations) const = 0;
 virtual VkResult                       debugMarkerSetObjectTagEXT                                              (VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo) const = 0;
 virtual VkResult                       debugMarkerSetObjectNameEXT                                             (VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo) const = 0;
 virtual void                           cmdDebugMarkerBeginEXT                                                  (VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) const = 0;
index 7001f82..737b1de 100644 (file)
@@ -526,6 +526,12 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = 1000259002,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = 1000261000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000,
+    VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001,
+    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002,
+    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003,
+    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004,
+    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001,
@@ -1676,6 +1682,8 @@ typedef enum VkPipelineCreateFlagBits {
     VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008,
     VK_PIPELINE_CREATE_DISPATCH_BASE = 0x00000010,
     VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = 0x00000020,
+    VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = 0x00000040,
+    VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080,
     VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
     VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE,
     VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
@@ -6516,6 +6524,100 @@ typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR {
 
 
 
+#define VK_KHR_pipeline_executable_properties 1
+#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1
+#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties"
+
+typedef enum VkPipelineExecutableStatisticFormatKHR {
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BEGIN_RANGE_KHR = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_END_RANGE_KHR = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_RANGE_SIZE_KHR = (VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR - VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR + 1),
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkPipelineExecutableStatisticFormatKHR;
+typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineExecutableInfo;
+} VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR;
+
+typedef struct VkPipelineInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkPipeline         pipeline;
+} VkPipelineInfoKHR;
+
+typedef struct VkPipelineExecutablePropertiesKHR {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkShaderStageFlags    stages;
+    char                  name[VK_MAX_DESCRIPTION_SIZE];
+    char                  description[VK_MAX_DESCRIPTION_SIZE];
+    deUint32              subgroupSize;
+} VkPipelineExecutablePropertiesKHR;
+
+typedef struct VkPipelineExecutableInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkPipeline         pipeline;
+    deUint32           executableIndex;
+} VkPipelineExecutableInfoKHR;
+
+typedef union VkPipelineExecutableStatisticValueKHR {
+    VkBool32    b32;
+    deInt64     i64;
+    deUint64    u64;
+    double      f64;
+} VkPipelineExecutableStatisticValueKHR;
+
+typedef struct VkPipelineExecutableStatisticKHR {
+    VkStructureType                           sType;
+    void*                                     pNext;
+    char                                      name[VK_MAX_DESCRIPTION_SIZE];
+    char                                      description[VK_MAX_DESCRIPTION_SIZE];
+    VkPipelineExecutableStatisticFormatKHR    format;
+    VkPipelineExecutableStatisticValueKHR     value;
+} VkPipelineExecutableStatisticKHR;
+
+typedef struct VkPipelineExecutableInternalRepresentationKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    char               name[VK_MAX_DESCRIPTION_SIZE];
+    char               description[VK_MAX_DESCRIPTION_SIZE];
+    VkBool32           isText;
+    deUintptr             dataSize;
+    void*              pData;
+} VkPipelineExecutableInternalRepresentationKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice                        device, const VkPipelineInfoKHR*        pPipelineInfo, deUint32* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice                        device, const VkPipelineExecutableInfoKHR*  pExecutableInfo, deUint32* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice                        device, const VkPipelineExecutableInfoKHR*  pExecutableInfo, deUint32* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR(
+    VkDevice                                    device,
+    const VkPipelineInfoKHR*                    pPipelineInfo,
+    deUint32*                                   pExecutableCount,
+    VkPipelineExecutablePropertiesKHR*          pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR(
+    VkDevice                                    device,
+    const VkPipelineExecutableInfoKHR*          pExecutableInfo,
+    deUint32*                                   pStatisticCount,
+    VkPipelineExecutableStatisticKHR*           pStatistics);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR(
+    VkDevice                                    device,
+    const VkPipelineExecutableInfoKHR*          pExecutableInfo,
+    deUint32*                                   pInternalRepresentationCount,
+    VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
+#endif
+
+
+
 #define VK_EXT_debug_report 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
 #define VK_EXT_DEBUG_REPORT_SPEC_VERSION  9
index ab50f3e..fb4df66 100644 (file)
@@ -87,6 +87,8 @@ set(DEQP_VK_PIPELINE_SRCS
        vktPipelineCreationFeedbackTests.hpp
        vktPipelineDepthRangeUnrestrictedTests.cpp
        vktPipelineDepthRangeUnrestrictedTests.hpp
+       vktPipelineExecutablePropertiesTests.cpp
+       vktPipelineExecutablePropertiesTests.hpp
        )
 
 set(DEQP_VK_PIPELINE_LIBS
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineExecutablePropertiesTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineExecutablePropertiesTests.cpp
new file mode 100644 (file)
index 0000000..9543ea5
--- /dev/null
@@ -0,0 +1,1570 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2019 Intel Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief VK_KHR_pipeline_executable_properties
+ *
+ * These tests creates compute and graphics pipelines with a variety of
+ * stages both with and without a pipeline cache and exercise the new
+ * queries provided by VK_KHR_pipeline_executable_properties.
+ *
+ * For each query type, it asserts that the query works and doesn't crash
+ * and returns consistent results:
+ *
+ *  - The tests assert that the same set of pipeline executables is
+ *    reported regardless of whether or not a pipeline cache is used.
+ *
+ *  - For each pipeline executable, the tests assert that the same set of
+ *    statistics is returned regardless of whether or not a pipeline cache
+ *    is used.
+ *
+ *  - For each pipeline executable, the tests assert that the same set of
+ *    statistics is returned regardless of whether or not
+ *    CAPTURE_INTERNAL_REPRESENTATIONS_BIT is set.
+ *
+ *  - For each pipeline executable, the tests assert that the same set of
+ *    internal representations is returned regardless of whether or not a
+ *    pipeline cache is used.
+ *
+ *  - For each string returned (statistic names, etc.) the tests assert
+ *    that the string is NULL terminated.
+ *
+ *  - For each statistic, the tests compare the results of the two
+ *    compilations and report any differences.  (Statistics differing
+ *    between two compilations is not considered a failure.)
+ *
+ *  - For each binary internal representation, the tests attempt to assert
+ *    that the amount of data returned by the implementation matches the
+ *    amount the implementation claims.  (It's impossible to exactly do
+ *    this but the tests give it a good try.)
+ *
+ * All of the returned data is recorded in the output file.
+ *
+ *//*--------------------------------------------------------------------*/
+
+#include "vktPipelineExecutablePropertiesTests.hpp"
+#include "vktPipelineVertexUtil.hpp"
+#include "vktTestCase.hpp"
+#include "vktTestCaseUtil.hpp"
+#include "vkMemUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkRefUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "tcuTestLog.hpp"
+
+#include <sstream>
+#include <vector>
+
+namespace vkt
+{
+namespace pipeline
+{
+
+using namespace vk;
+
+namespace
+{
+enum
+{
+       VK_MAX_SHADER_STAGES = 6,
+};
+
+enum
+{
+       PIPELINE_CACHE_NDX_INITIAL = 0,
+       PIPELINE_CACHE_NDX_CACHED = 1,
+       PIPELINE_CACHE_NDX_COUNT,
+};
+
+// helper functions
+
+std::string getShaderFlagStr (const VkShaderStageFlagBits      shader,
+                                                         bool                                                  isDescription)
+{
+       std::ostringstream desc;
+       switch(shader)
+       {
+               case VK_SHADER_STAGE_VERTEX_BIT:
+               {
+                       desc << ((isDescription) ? "vertex" : "vertex_stage");
+                       break;
+               }
+               case VK_SHADER_STAGE_FRAGMENT_BIT:
+               {
+                       desc << ((isDescription) ? "fragment" : "fragment_stage");
+                       break;
+               }
+               case VK_SHADER_STAGE_GEOMETRY_BIT:
+               {
+                       desc << ((isDescription) ? "geometry" : "geometry_stage");
+                       break;
+               }
+               case VK_SHADER_STAGE_COMPUTE_BIT:
+               {
+                       desc << ((isDescription) ? "compute" : "compute_stage");
+                       break;
+               }
+               case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT:
+               {
+                       desc << ((isDescription) ? "tessellation control" : "tessellation_control_stage");
+                       break;
+               }
+               case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT:
+               {
+                       desc << ((isDescription) ? "tessellation evaluation" : "tessellation_evaluation_stage");
+                       break;
+               }
+         default:
+               desc << "unknown shader stage!";
+               DE_FATAL("Unknown shader Stage!");
+               break;
+       };
+
+       return desc.str();
+}
+
+std::string getShaderFlagsStr (const VkShaderStageFlags        flags)
+{
+       std::ostringstream stream;
+       bool empty = true;
+       for (deUint32 b = 0; b < 8 * sizeof(flags); b++)
+       {
+               if (flags & (1u << b))
+               {
+                       if (empty)
+                       {
+                               empty = false;
+                       }
+                       else
+                       {
+                               stream << ", ";
+                       }
+
+                       stream << getShaderFlagStr((VkShaderStageFlagBits)(1u << b), true);
+               }
+       }
+
+       if (empty)
+       {
+               stream << "none";
+       }
+
+       return stream.str();
+}
+
+// helper classes
+class ExecutablePropertiesTestParam
+{
+public:
+                                                               ExecutablePropertiesTestParam   (const VkShaderStageFlagBits*   shaders,
+                                                                                                                                deUint32                                               count,
+                                                                                                                                deBool                                                 testStatistics,
+                                                                                                                                deBool                                                 testInternalRepresentations);
+       virtual                                         ~ExecutablePropertiesTestParam  (void);
+       virtual const std::string       generateTestName                                (void)                  const;
+       virtual const std::string       generateTestDescription                 (void)                  const;
+       VkShaderStageFlagBits           getShaderFlag                                   (deUint32 ndx)  const   { return m_shaders[ndx]; }
+       deUint32                                        getShaderCount                                  (void)                  const   { return (deUint32)m_shaderCount; }
+       deBool                                          getTestStatistics                               (void)                  const   { return m_testStatistics; }
+       deBool                                          getTestInternalRepresentations  (void)                  const   { return m_testInternalRepresentations; }
+
+protected:
+       VkShaderStageFlagBits           m_shaders[VK_MAX_SHADER_STAGES];
+       size_t                                          m_shaderCount;
+       bool                                            m_testStatistics;
+       bool                                            m_testInternalRepresentations;
+};
+
+ExecutablePropertiesTestParam::ExecutablePropertiesTestParam (const VkShaderStageFlagBits* shaders, deUint32 count, deBool testStatistics, deBool testInternalRepresentations)
+{
+       DE_ASSERT(count <= VK_MAX_SHADER_STAGES);
+       for (deUint32 ndx = 0; ndx < count; ndx++)
+               m_shaders[ndx] = shaders[ndx];
+       m_shaderCount                                   = count;
+       m_testStatistics                                = testStatistics;
+       m_testInternalRepresentations   = testInternalRepresentations;
+}
+
+ExecutablePropertiesTestParam::~ExecutablePropertiesTestParam (void)
+{
+}
+
+const std::string ExecutablePropertiesTestParam::generateTestName (void) const
+{
+       std::string result(getShaderFlagStr(m_shaders[0], false));
+
+       for(deUint32 ndx = 1; ndx < m_shaderCount; ndx++)
+       {
+               result += '_' + getShaderFlagStr(m_shaders[ndx], false);
+       }
+
+       if (m_testStatistics)
+       {
+               result += "_statistics";
+       }
+
+       if (m_testInternalRepresentations)
+       {
+               result += "_internal_representations";
+       }
+
+       return result;
+}
+
+const std::string ExecutablePropertiesTestParam::generateTestDescription (void) const
+{
+       std::string result;
+       if (m_testStatistics)
+       {
+               result += "Get pipeline executable statistics";
+               if (m_testInternalRepresentations)
+               {
+                       result += " and internal representations";
+               }
+       }
+       else if (m_testInternalRepresentations)
+       {
+               result += "Get pipeline executable internal representations";
+       }
+       else
+       {
+               result += "Get pipeline executable properties";
+       }
+
+       result += " with " + getShaderFlagStr(m_shaders[0], true);
+
+       return result;
+}
+
+class SimpleGraphicsPipelineBuilder
+{
+public:
+                                                       SimpleGraphicsPipelineBuilder   (Context&                                               context);
+                                                       ~SimpleGraphicsPipelineBuilder  (void) { }
+       void                                    bindShaderStage                                 (VkShaderStageFlagBits                  stage,
+                                                                                                                        const char*                                    sourceName,
+                                                                                                                        const char*                                    entryName);
+       void                                    enableTessellationStage                 (deUint32                                               patchControlPoints);
+       VkPipeline                              buildPipeline                                   (tcu::UVec2                                             renderSize,
+                                                                                                                        VkRenderPass                                   renderPass,
+                                                                                                                        VkPipelineCache                                cache,
+                                                                                                                        VkPipelineLayout                               pipelineLayout,
+                                                                                                                        VkPipelineCreateFlags                  flags);
+       void                                    resetBuilder                                    (void);
+
+protected:
+       Context&                                                        m_context;
+
+       Move<VkShaderModule>                            m_shaderModules[VK_MAX_SHADER_STAGES];
+       deUint32                                                        m_shaderStageCount;
+       VkPipelineShaderStageCreateInfo m_shaderStageInfo[VK_MAX_SHADER_STAGES];
+
+       deUint32                                                        m_patchControlPoints;
+};
+
+SimpleGraphicsPipelineBuilder::SimpleGraphicsPipelineBuilder (Context& context)
+       : m_context(context)
+{
+       m_patchControlPoints = 0;
+       m_shaderStageCount   = 0;
+}
+
+void SimpleGraphicsPipelineBuilder::resetBuilder (void)
+{
+       m_shaderStageCount = 0;
+}
+
+void SimpleGraphicsPipelineBuilder::bindShaderStage (VkShaderStageFlagBits     stage,
+                                                                                                        const char*                    sourceName,
+                                                                                                        const char*                    entryName)
+{
+       const DeviceInterface&  vk                      = m_context.getDeviceInterface();
+       const VkDevice                  vkDevice        = m_context.getDevice();
+
+       // Create shader module
+       deUint32*                               code            = (deUint32*)m_context.getBinaryCollection().get(sourceName).getBinary();
+       deUint32                                codeSize        = (deUint32)m_context.getBinaryCollection().get(sourceName).getSize();
+
+       const VkShaderModuleCreateInfo moduleCreateInfo =
+       {
+               VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,                            // VkStructureType                              sType;
+               DE_NULL,                                                                                                        // const void*                                  pNext;
+               0u,                                                                                                                     // VkShaderModuleCreateFlags    flags;
+               codeSize,                                                                                                       // deUintptr                                    codeSize;
+               code,                                                                                                           // const deUint32*                              pCode;
+       };
+
+       m_shaderModules[m_shaderStageCount] = createShaderModule(vk, vkDevice, &moduleCreateInfo);
+
+       // Prepare shader stage info
+       m_shaderStageInfo[m_shaderStageCount].sType                             = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+       m_shaderStageInfo[m_shaderStageCount].pNext                             = DE_NULL;
+       m_shaderStageInfo[m_shaderStageCount].flags                             = 0u;
+       m_shaderStageInfo[m_shaderStageCount].stage                             = stage;
+       m_shaderStageInfo[m_shaderStageCount].module                            = *m_shaderModules[m_shaderStageCount];
+       m_shaderStageInfo[m_shaderStageCount].pName                             = entryName;
+       m_shaderStageInfo[m_shaderStageCount].pSpecializationInfo       = DE_NULL;
+
+       m_shaderStageCount++;
+}
+
+VkPipeline SimpleGraphicsPipelineBuilder::buildPipeline (tcu::UVec2 renderSize, VkRenderPass renderPass, VkPipelineCache cache,
+                                                                                                                VkPipelineLayout pipelineLayout, VkPipelineCreateFlags flags)
+{
+       const DeviceInterface&          vk                                      = m_context.getDeviceInterface();
+       const VkDevice                          vkDevice                        = m_context.getDevice();
+
+       // Create pipeline
+       const VkVertexInputBindingDescription vertexInputBindingDescription =
+       {
+               0u,                                                                     // deUint32                             binding;
+               sizeof(Vertex4RGBA),                            // deUint32                             strideInBytes;
+               VK_VERTEX_INPUT_RATE_VERTEX,            // VkVertexInputRate    inputRate;
+       };
+
+       const VkVertexInputAttributeDescription vertexInputAttributeDescriptions[2] =
+       {
+               {
+                       0u,                                                                     // deUint32 location;
+                       0u,                                                                     // deUint32 binding;
+                       VK_FORMAT_R32G32B32A32_SFLOAT,          // VkFormat format;
+                       0u                                                                      // deUint32 offsetInBytes;
+               },
+               {
+                       1u,                                                                     // deUint32 location;
+                       0u,                                                                     // deUint32 binding;
+                       VK_FORMAT_R32G32B32A32_SFLOAT,          // VkFormat format;
+                       DE_OFFSET_OF(Vertex4RGBA, color),       // deUint32 offsetInBytes;
+               }
+       };
+
+       const VkPipelineVertexInputStateCreateInfo vertexInputStateParams =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,              // VkStructureType                                                      sType;
+               DE_NULL,                                                                                                                // const void*                                                          pNext;
+               0u,                                                                                                                             // VkPipelineVertexInputStateCreateFlags        flags;
+               1u,                                                                                                                             // deUint32                                                                     vertexBindingDescriptionCount;
+               &vertexInputBindingDescription,                                                                 // const VkVertexInputBindingDescription*       pVertexBindingDescriptions;
+               2u,                                                                                                                             // deUint32                                                                     vertexAttributeDescriptionCount;
+               vertexInputAttributeDescriptions,                                                               // const VkVertexInputAttributeDescription* pVertexAttributeDescriptions;
+       };
+
+       const VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateParams =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,    // VkStructureType                                                      sType;
+               DE_NULL,                                                                                                                // const void*                                                          pNext;
+               0u,                                                                                                                             // VkPipelineInputAssemblyStateCreateFlags      flags;
+               (m_patchControlPoints == 0 ? VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
+                                                                  : VK_PRIMITIVE_TOPOLOGY_PATCH_LIST), // VkPrimitiveTopology                                          topology;
+               VK_FALSE,                                                                                                               // VkBool32                                                                     primitiveRestartEnable;
+       };
+
+       const VkViewport        viewport        = makeViewport(renderSize);
+       const VkRect2D          scissor = makeRect2D(renderSize);
+
+       const VkPipelineViewportStateCreateInfo viewportStateParams =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,                  // VkStructureType                                              sType;
+               DE_NULL,                                                                                                                // const void*                                                  pNext;
+               0u,                                                                                                                             // VkPipelineViewportStateCreateFlags   flags;
+               1u,                                                                                                                             // deUint32                                                             viewportCount;
+               &viewport,                                                                                                              // const VkViewport*                                    pViewports;
+               1u,                                                                                                                             // deUint32                                                             scissorCount;
+               &scissor                                                                                                                // const VkRect2D*                                              pScissors;
+       };
+
+       const VkPipelineRasterizationStateCreateInfo rasterStateParams =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,             // VkStructureType                                                      sType;
+               DE_NULL,                                                                                                                // const void*                                                          pNext;
+               0u,                                                                                                                             // VkPipelineRasterizationStateCreateFlags      flags;
+               VK_FALSE,                                                                                                               // VkBool32                                                                     depthClampEnable;
+               VK_FALSE,                                                                                                               // VkBool32                                                                     rasterizerDiscardEnable;
+               VK_POLYGON_MODE_FILL,                                                                                   // VkPolygonMode                                                        polygonMode;
+               VK_CULL_MODE_NONE,                                                                                              // VkCullModeFlags                                                      cullMode;
+               VK_FRONT_FACE_COUNTER_CLOCKWISE,                                                                // VkFrontFace                                                          frontFace;
+               VK_FALSE,                                                                                                               // VkBool32                                                                     depthBiasEnable;
+               0.0f,                                                                                                                   // float                                                                        depthBiasConstantFactor;
+               0.0f,                                                                                                                   // float                                                                        depthBiasClamp;
+               0.0f,                                                                                                                   // float                                                                        depthBiasSlopeFactor;
+               1.0f,                                                                                                                   // float                                                                        lineWidth;
+       };
+
+       const VkPipelineColorBlendAttachmentState colorBlendAttachmentState =
+       {
+               VK_FALSE,                                                                                                               // VkBool32             blendEnable;
+               VK_BLEND_FACTOR_ONE,                                                                                    // VkBlendFactor        srcColorBlendFactor;
+               VK_BLEND_FACTOR_ZERO,                                                                                   // VkBlendFactor        dstColorBlendFactor;
+               VK_BLEND_OP_ADD,                                                                                                // VkBlendOp            colorBlendOp;
+               VK_BLEND_FACTOR_ONE,                                                                                    // VkBlendFactor        srcAlphaBlendFactor;
+               VK_BLEND_FACTOR_ZERO,                                                                                   // VkBlendFactor        dstAlphaBlendFactor;
+               VK_BLEND_OP_ADD,                                                                                                // VkBlendOp            alphaBlendOp;
+               VK_COLOR_COMPONENT_R_BIT |
+               VK_COLOR_COMPONENT_G_BIT |
+               VK_COLOR_COMPONENT_B_BIT |
+               VK_COLOR_COMPONENT_A_BIT                                                                                // VkColorComponentFlags    colorWriteMask;
+       };
+
+       const VkPipelineColorBlendStateCreateInfo colorBlendStateParams =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,       // VkStructureType                                                              sType;
+               DE_NULL,                                                                                                        // const void*                                                                  pNext;
+               0u,                                                                                                                     // VkPipelineColorBlendStateCreateFlags                 flags;
+               VK_FALSE,                                                                                                       // VkBool32                                                                             logicOpEnable;
+               VK_LOGIC_OP_COPY,                                                                                       // VkLogicOp                                                                    logicOp;
+               1u,                                                                                                                     // deUint32                                                                             attachmentCount;
+               &colorBlendAttachmentState,                                                                     // const VkPipelineColorBlendAttachmentState*   pAttachments;
+               { 0.0f, 0.0f, 0.0f, 0.0f },                                                                     // float                                                                                blendConst[4];
+       };
+
+       const VkPipelineMultisampleStateCreateInfo  multisampleStateParams      =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,       // VkStructureType                                                      sType;
+               DE_NULL,                                                                                                        // const void*                                                          pNext;
+               0u,                                                                                                                     // VkPipelineMultisampleStateCreateFlags        flags;
+               VK_SAMPLE_COUNT_1_BIT,                                                                          // VkSampleCountFlagBits                                        rasterizationSamples;
+               VK_FALSE,                                                                                                       // VkBool32                                                                     sampleShadingEnable;
+               0.0f,                                                                                                           // float                                                                        minSampleShading;
+               DE_NULL,                                                                                                        // const VkSampleMask*                                          pSampleMask;
+               VK_FALSE,                                                                                                       // VkBool32                                                                     alphaToCoverageEnable;
+               VK_FALSE,                                                                                                       // VkBool32                                                                     alphaToOneEnable;
+       };
+
+       VkPipelineDepthStencilStateCreateInfo depthStencilStateParams =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, // VkStructureType                                                  sType;
+               DE_NULL,                                                                                                        // const void*                                                          pNext;
+               0u,                                                                                                                     // VkPipelineDepthStencilStateCreateFlags       flags;
+               VK_TRUE,                                                                                                        // VkBool32                                                                     depthTestEnable;
+               VK_TRUE,                                                                                                        // VkBool32                                                                     depthWriteEnable;
+               VK_COMPARE_OP_LESS_OR_EQUAL,                                                            // VkCompareOp                                                          depthCompareOp;
+               VK_FALSE,                                                                                                       // VkBool32                                                                     depthBoundsTestEnable;
+               VK_FALSE,                                                                                                       // VkBool32                                                                     stencilTestEnable;
+               // VkStencilOpState front;
+               {
+                       VK_STENCIL_OP_KEEP,             // VkStencilOp  failOp;
+                       VK_STENCIL_OP_KEEP,             // VkStencilOp  passOp;
+                       VK_STENCIL_OP_KEEP,             // VkStencilOp  depthFailOp;
+                       VK_COMPARE_OP_NEVER,    // VkCompareOp  compareOp;
+                       0u,                                             // deUint32             compareMask;
+                       0u,                                             // deUint32             writeMask;
+                       0u,                                             // deUint32             reference;
+               },
+               // VkStencilOpState back;
+               {
+                       VK_STENCIL_OP_KEEP,             // VkStencilOp  failOp;
+                       VK_STENCIL_OP_KEEP,             // VkStencilOp  passOp;
+                       VK_STENCIL_OP_KEEP,             // VkStencilOp  depthFailOp;
+                       VK_COMPARE_OP_NEVER,    // VkCompareOp  compareOp;
+                       0u,                                             // deUint32             compareMask;
+                       0u,                                             // deUint32             writeMask;
+                       0u,                                             // deUint32             reference;
+               },
+               0.0f,                                                                                                           // float                                                                        minDepthBounds;
+               1.0f,                                                                                                           // float                                                                        maxDepthBounds;
+       };
+
+       const VkPipelineTessellationStateCreateInfo tessStateCreateInfo =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO,      // VkStructureType                                                      sType;
+               DE_NULL,                                                                                                        // const void*                                                          pNext;
+               0u,                                                                                                                     // VkPipelineTesselationStateCreateFlags        flags;
+               m_patchControlPoints,                                                                           // deUint32                                                                     patchControlPoints;
+       };
+       const VkPipelineTessellationStateCreateInfo* pTessCreateInfo = (m_patchControlPoints > 0)
+                                                                                                                                 ? &tessStateCreateInfo
+                                                                                                                                 : DE_NULL;
+
+       const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
+       {
+               VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,        // VkStructureType                                                                      sType;
+               DE_NULL,                                                                                        // const void*                                                                          pNext;
+               flags,                                                                                          // VkPipelineCreateFlags                                                        flags;
+               m_shaderStageCount,                                                                     // deUint32                                                                                     stageCount;
+               m_shaderStageInfo,                                                                      // const VkPipelineShaderStageCreateInfo*                       pStages;
+               &vertexInputStateParams,                                                        // const VkPipelineVertexInputStateCreateInfo*          pVertexInputState;
+               &inputAssemblyStateParams,                                                      // const VkPipelineInputAssemblyStateCreateInfo*        pInputAssemblyState;
+               pTessCreateInfo,                                                                        // const VkPipelineTessellationStateCreateInfo*         pTessellationState;
+               &viewportStateParams,                                                           // const VkPipelineViewportStateCreateInfo*                     pViewportState;
+               &rasterStateParams,                                                                     // const VkPipelineRasterizationStateCreateInfo*        pRasterState;
+               &multisampleStateParams,                                                        // const VkPipelineMultisampleStateCreateInfo*          pMultisampleState;
+               &depthStencilStateParams,                                                       // const VkPipelineDepthStencilStateCreateInfo*         pDepthStencilState;
+               &colorBlendStateParams,                                                         // const VkPipelineColorBlendStateCreateInfo*           pColorBlendState;
+               (const VkPipelineDynamicStateCreateInfo*)DE_NULL,       // const VkPipelineDynamicStateCreateInfo*                      pDynamicState;
+               pipelineLayout,                                                                         // VkPipelineLayout                                                                     layout;
+               renderPass,                                                                                     // VkRenderPass                                                                         renderPass;
+               0u,                                                                                                     // deUint32                                                                                     subpass;
+               DE_NULL,                                                                                        // VkPipeline                                                                           basePipelineHandle;
+               0,                                                                                                      // deInt32                                                                                      basePipelineIndex;
+       };
+       VkPipeline pipeline;
+       vk.createGraphicsPipelines(vkDevice, cache, 1u, &graphicsPipelineParams, DE_NULL, &pipeline);
+       return pipeline;
+}
+
+void SimpleGraphicsPipelineBuilder::enableTessellationStage (deUint32 patchControlPoints)
+{
+       m_patchControlPoints = patchControlPoints;
+}
+
+template <class Test>
+vkt::TestCase* newTestCase (tcu::TestContext&          testContext,
+                                                       const ExecutablePropertiesTestParam*    testParam)
+{
+       return new Test(testContext,
+                                       testParam->generateTestName().c_str(),
+                                       testParam->generateTestDescription().c_str(),
+                                       testParam);
+}
+
+// Test Classes
+class ExecutablePropertiesTest : public vkt::TestCase
+{
+public:
+                                                       ExecutablePropertiesTest(tcu::TestContext&              testContext,
+                                                                                  const std::string&           name,
+                                                                                  const std::string&           description,
+                                                                                  const ExecutablePropertiesTestParam* param)
+                                                               : vkt::TestCase (testContext, name, description)
+                                                               , m_param (*param)
+                                                               { }
+       virtual                                 ~ExecutablePropertiesTest (void) { }
+protected:
+       const ExecutablePropertiesTestParam     m_param;
+};
+
+class ExecutablePropertiesTestInstance : public vkt::TestInstance
+{
+public:
+                                                       ExecutablePropertiesTestInstance                        (Context&                               context,
+                                                                                                                        const ExecutablePropertiesTestParam*   param);
+       virtual                                 ~ExecutablePropertiesTestInstance                       (void);
+       virtual tcu::TestStatus iterate                                                 (void);
+protected:
+       virtual tcu::TestStatus verifyStatistics                                (deUint32 binaryNdx);
+       virtual tcu::TestStatus verifyInternalRepresentations   (deUint32 binaryNdx);
+       virtual tcu::TestStatus verifyTestResult                                (void);
+protected:
+       const ExecutablePropertiesTestParam*    m_param;
+
+       Move<VkPipelineCache>   m_cache;
+       deBool                                  m_extensions;
+
+       VkPipeline                              m_pipeline[PIPELINE_CACHE_NDX_COUNT];
+};
+
+ExecutablePropertiesTestInstance::ExecutablePropertiesTestInstance (Context&                                   context,
+                                                                                               const ExecutablePropertiesTestParam*    param)
+       : TestInstance          (context)
+       , m_param                       (param)
+       , m_extensions          (m_context.requireDeviceExtension("VK_KHR_pipeline_executable_properties"))
+{
+       const DeviceInterface&  vk                              = m_context.getDeviceInterface();
+       const VkDevice                  vkDevice                = m_context.getDevice();
+
+       const VkPipelineCacheCreateInfo pipelineCacheCreateInfo =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,                   // VkStructureType                              sType;
+               DE_NULL,                                                                                                // const void*                                  pNext;
+               0u,                                                                                                             // VkPipelineCacheCreateFlags   flags;
+               0u,                                                                                                             // deUintptr                                    initialDataSize;
+               DE_NULL,                                                                                                // const void*                                  pInitialData;
+       };
+
+       m_cache = createPipelineCache(vk, vkDevice, &pipelineCacheCreateInfo);
+}
+
+ExecutablePropertiesTestInstance::~ExecutablePropertiesTestInstance (void)
+{
+}
+
+tcu::TestStatus ExecutablePropertiesTestInstance::iterate (void)
+{
+       return verifyTestResult();
+}
+
+bool
+checkString(const char *string, size_t size)
+{
+       size_t i = 0;
+       for (; i < size; i++)
+       {
+               if (string[i] == 0)
+               {
+                       break;
+               }
+       }
+
+       // The string needs to be non-empty and null terminated
+       if (i == 0 || i >= size)
+       {
+               return false;
+       }
+
+       // The rest of the string should be zero
+       for (; i < size; i++)
+       {
+               if (string[i] != 0)
+               {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+tcu::TestStatus ExecutablePropertiesTestInstance::verifyStatistics (deUint32 executableNdx)
+{
+       const DeviceInterface&          vk                      = m_context.getDeviceInterface();
+       const VkDevice                          vkDevice        = m_context.getDevice();
+       tcu::TestLog                            &log            = m_context.getTestContext().getLog();
+
+       std::vector<VkPipelineExecutableStatisticKHR> statistics[PIPELINE_CACHE_NDX_COUNT];
+
+       for (deUint32 ndx = 0; ndx < PIPELINE_CACHE_NDX_COUNT; ndx++)
+       {
+               const VkPipelineExecutableInfoKHR pipelineExecutableInfo =
+               {
+                       VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR, // VkStructureType                                      sType;
+                       DE_NULL,                                                                                // const void*                                          pNext;
+                       m_pipeline[ndx],                                                                // VkPipeline                                           pipeline;
+                       executableNdx,                                                                  // uint32_t                                                     executableIndex;
+               };
+
+               deUint32 statisticCount = 0;
+               VK_CHECK(vk.getPipelineExecutableStatisticsKHR(vkDevice, &pipelineExecutableInfo, &statisticCount, DE_NULL));
+
+               if (statisticCount == 0)
+               {
+                       continue;
+               }
+
+               statistics[ndx].resize(statisticCount);
+               for (deUint32 statNdx = 0; statNdx < statisticCount; statNdx++)
+               {
+                       deMemset(&statistics[ndx][statNdx], 0, sizeof(statistics[ndx][statNdx]));
+                       statistics[ndx][statNdx].sType = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR;
+                       statistics[ndx][statNdx].pNext = DE_NULL;
+               }
+               VK_CHECK(vk.getPipelineExecutableStatisticsKHR(vkDevice, &pipelineExecutableInfo, &statisticCount, &statistics[ndx][0]));
+
+               for (deUint32 statNdx = 0; statNdx < statisticCount; statNdx++)
+               {
+                       if (!checkString(statistics[ndx][statNdx].name, DE_LENGTH_OF_ARRAY(statistics[ndx][statNdx].name)))
+                       {
+                               return tcu::TestStatus::fail("Invalid statistic name string");
+                       }
+
+                       for (deUint32 otherNdx = 0; otherNdx < statNdx; otherNdx++)
+                       {
+                               if (deMemCmp(statistics[ndx][statNdx].name, statistics[ndx][otherNdx].name,
+                                                        DE_LENGTH_OF_ARRAY(statistics[ndx][statNdx].name)) == 0)
+                               {
+                                       return tcu::TestStatus::fail("Statistic name string not unique within the executable");
+                               }
+                       }
+
+                       if (!checkString(statistics[ndx][statNdx].description, DE_LENGTH_OF_ARRAY(statistics[ndx][statNdx].description)))
+                       {
+                               return tcu::TestStatus::fail("Invalid statistic description string");
+                       }
+
+                       if (statistics[ndx][statNdx].format == VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR)
+                       {
+                               if (statistics[ndx][statNdx].value.b32 != VK_TRUE && statistics[ndx][statNdx].value.b32 != VK_FALSE)
+                               {
+                                       return tcu::TestStatus::fail("Boolean statistic is neither VK_TRUE nor VK_FALSE");
+                               }
+                       }
+               }
+       }
+
+       if (statistics[0].size() != statistics[1].size())
+       {
+               return tcu::TestStatus::fail("Identical pipelines have different numbers of statistics");
+       }
+
+       if (statistics[0].size() == 0)
+       {
+               return tcu::TestStatus::pass("No statistics reported");
+       }
+
+       // Both compiles had better have specified the same infos
+       for (deUint32 statNdx0 = 0; statNdx0 < statistics[0].size(); statNdx0++)
+       {
+               deUint32 statNdx1 = 0;
+               for (; statNdx1 < statistics[1].size(); statNdx1++)
+               {
+                       if (deMemCmp(statistics[0][statNdx0].name, statistics[1][statNdx1].name,
+                                                DE_LENGTH_OF_ARRAY(statistics[0][statNdx0].name)) == 0)
+                       {
+                               break;
+                       }
+               }
+               if (statNdx1 >= statistics[1].size())
+               {
+                       return tcu::TestStatus::fail("Identical pipelines have different statistics");
+               }
+
+               if (deMemCmp(statistics[0][statNdx0].description, statistics[1][statNdx1].description,
+                                        DE_LENGTH_OF_ARRAY(statistics[0][statNdx0].description)) != 0)
+               {
+                       return tcu::TestStatus::fail("Invalid binary description string");
+               }
+
+               if (statistics[0][statNdx0].format != statistics[1][statNdx1].format)
+               {
+                       return tcu::TestStatus::fail("Identical pipelines have statistics with different formats");
+               }
+
+               switch (statistics[0][statNdx0].format)
+               {
+                       case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR:
+                       {
+                               bool match = statistics[0][statNdx0].value.b32 == statistics[1][statNdx1].value.b32;
+                               log << tcu::TestLog::Message
+                                       << statistics[0][statNdx0].name << ": "
+                                       << (statistics[0][statNdx0].value.b32 ? "VK_TRUE" : "VK_FALSE")
+                                       << (match ? "" : " (non-deterministic)")
+                                       << " (" << statistics[0][statNdx0].description << ")"
+                                       << tcu::TestLog::EndMessage;
+                               break;
+                       }
+                       case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR:
+                       {
+                               bool match = statistics[0][statNdx0].value.i64 == statistics[1][statNdx1].value.i64;
+                               log << tcu::TestLog::Message
+                                       << statistics[0][statNdx0].name << ": "
+                                       << statistics[0][statNdx0].value.i64
+                                       << (match ? "" : " (non-deterministic)")
+                                       << " (" << statistics[0][statNdx0].description << ")"
+                                       << tcu::TestLog::EndMessage;
+                               break;
+                       }
+                       case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR:
+                       {
+                               bool match = statistics[0][statNdx0].value.u64 == statistics[1][statNdx1].value.u64;
+                               log << tcu::TestLog::Message
+                                       << statistics[0][statNdx0].name << ": "
+                                       << statistics[0][statNdx0].value.u64
+                                       << (match ? "" : " (non-deterministic)")
+                                       << " (" << statistics[0][statNdx0].description << ")"
+                                       << tcu::TestLog::EndMessage;
+                               break;
+                       }
+                       case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR:
+                       {
+                               bool match = statistics[0][statNdx0].value.f64 == statistics[1][statNdx1].value.f64;
+                               log << tcu::TestLog::Message
+                                       << statistics[0][statNdx0].name << ": "
+                                       << statistics[0][statNdx0].value.f64
+                                       << (match ? "" : " (non-deterministic)")
+                                       << " (" << statistics[0][statNdx0].description << ")"
+                                       << tcu::TestLog::EndMessage;
+                               break;
+                       }
+                       default:
+                               return tcu::TestStatus::fail("Invalid statistic format");
+               }
+       }
+
+       return tcu::TestStatus::pass("Pass");
+}
+
+tcu::TestStatus ExecutablePropertiesTestInstance::verifyInternalRepresentations (deUint32 executableNdx)
+{
+       const DeviceInterface&          vk                      = m_context.getDeviceInterface();
+       const VkDevice                          vkDevice        = m_context.getDevice();
+       tcu::TestLog                            &log            = m_context.getTestContext().getLog();
+
+       // We only care about internal representations on the second pipeline.
+       // We still compile twice to ensure that we still get the right thing
+       // even if the pipeline is hot in the cache.
+       const VkPipelineExecutableInfoKHR pipelineExecutableInfo =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR, // VkStructureType                                      sType;
+               DE_NULL,                                                                                // const void*                                          pNext;
+               m_pipeline[1],                                                                  // VkPipeline                                           pipeline;
+               executableNdx,                                                                  // uint32_t                                                     executableIndex;
+       };
+
+       std::vector<VkPipelineExecutableInternalRepresentationKHR> irs;
+       std::vector<std::vector<deUint8>> irDatas;
+
+       deUint32 irCount = 0;
+       VK_CHECK(vk.getPipelineExecutableInternalRepresentationsKHR(vkDevice, &pipelineExecutableInfo, &irCount, DE_NULL));
+
+       if (irCount == 0)
+       {
+               return tcu::TestStatus::pass("No internal representations reported");
+       }
+
+       irs.resize(irCount);
+       irDatas.resize(irCount);
+       for (deUint32 irNdx = 0; irNdx < irCount; irNdx++)
+       {
+               deMemset(&irs[irNdx], 0, sizeof(irs[irNdx]));
+               irs[irNdx].sType = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR;
+               irs[irNdx].pNext = DE_NULL;
+       }
+       VK_CHECK(vk.getPipelineExecutableInternalRepresentationsKHR(vkDevice, &pipelineExecutableInfo, &irCount, &irs[0]));
+
+       for (deUint32 irNdx = 0; irNdx < irCount; irNdx++)
+       {
+               if (!checkString(irs[irNdx].name, DE_LENGTH_OF_ARRAY(irs[irNdx].name)))
+               {
+                       return tcu::TestStatus::fail("Invalid internal representation name string");
+               }
+
+               for (deUint32 otherNdx = 0; otherNdx < irNdx; otherNdx++)
+               {
+                       if (deMemCmp(irs[irNdx].name, irs[otherNdx].name,
+                                                DE_LENGTH_OF_ARRAY(irs[irNdx].name)) == 0)
+                       {
+                               return tcu::TestStatus::fail("Internal representation name string not unique within the executable");
+                       }
+               }
+
+               if (!checkString(irs[irNdx].description, DE_LENGTH_OF_ARRAY(irs[irNdx].description)))
+               {
+                       return tcu::TestStatus::fail("Invalid binary description string");
+               }
+
+               if (irs[irNdx].dataSize == 0)
+               {
+                       return tcu::TestStatus::fail("Internal representation has no data");
+               }
+
+               irDatas[irNdx].resize(irs[irNdx].dataSize);
+               irs[irNdx].pData = &irDatas[irNdx][0];
+               if (irs[irNdx].isText)
+               {
+                       // For binary data the size is important.  We check that the
+                       // implementation fills the whole buffer by filling it with
+                       // garbage first and then looking for that same garbage later.
+                       for (size_t i = 0; i < irs[irNdx].dataSize; i++)
+                       {
+                               irDatas[irNdx][i] = (deUint8)(37 * (17 + i));
+                       }
+               }
+       }
+
+       VK_CHECK(vk.getPipelineExecutableInternalRepresentationsKHR(vkDevice, &pipelineExecutableInfo, &irCount, &irs[0]));
+
+       for (deUint32 irNdx = 0; irNdx < irCount; irNdx++)
+       {
+               if (irs[irNdx].isText)
+               {
+                       if (!checkString((char *)irs[irNdx].pData, irs[irNdx].dataSize))
+                       {
+                               return tcu::TestStatus::fail("Textual internal representation isn't a valid string");
+                       }
+                       log << tcu::TestLog::Section(irs[irNdx].name, irs[irNdx].description)
+                               << tcu::LogKernelSource((char *)irs[irNdx].pData)
+                               << tcu::TestLog::EndSection;
+               }
+               else
+               {
+                       size_t maxMatchingChunkSize = 0;
+                       size_t matchingChunkSize = 0;
+                       for (size_t i = 0; i < irs[irNdx].dataSize; i++)
+                       {
+                               if (irDatas[irNdx][i] == (deUint8)(37 * (17 + i)))
+                               {
+                                       matchingChunkSize++;
+                                       if (matchingChunkSize > maxMatchingChunkSize)
+                                       {
+                                               maxMatchingChunkSize = matchingChunkSize;
+                                       }
+                               }
+                               else
+                               {
+                                       matchingChunkSize = 0;
+                               }
+                       }
+
+                       // 64 bytes of our random data still being in the buffer probably
+                       // isn't a coincidence
+                       if (matchingChunkSize == irs[irNdx].dataSize || matchingChunkSize >= 64)
+                       {
+                               return tcu::TestStatus::fail("Implementation didn't fill the whole internal representation data buffer");
+                       }
+
+                       log << tcu::TestLog::Section(irs[irNdx].name, irs[irNdx].description)
+                               << tcu::TestLog::Message << "Received " << irs[irNdx].dataSize << "B of binary data" << tcu::TestLog::EndMessage
+                               << tcu::TestLog::EndSection;
+               }
+       }
+
+       return tcu::TestStatus::pass("Pass");
+}
+
+tcu::TestStatus ExecutablePropertiesTestInstance::verifyTestResult (void)
+{
+       const DeviceInterface&          vk                      = m_context.getDeviceInterface();
+       const VkDevice                          vkDevice        = m_context.getDevice();
+       tcu::TestLog                            &log            = m_context.getTestContext().getLog();
+
+       std::vector<VkPipelineExecutablePropertiesKHR> props[PIPELINE_CACHE_NDX_COUNT];
+
+       for (deUint32 ndx = 0; ndx < PIPELINE_CACHE_NDX_COUNT; ndx++)
+       {
+               const VkPipelineInfoKHR pipelineInfo =
+               {
+                       VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR,    // VkStructureType                                      sType;
+                       DE_NULL,                                                                // const void*                                          pNext;
+                       m_pipeline[ndx],                                                // VkPipeline                                           pipeline;
+
+               };
+               deUint32 executableCount = 0;
+               VK_CHECK(vk.getPipelineExecutablePropertiesKHR(vkDevice, &pipelineInfo, &executableCount, DE_NULL));
+
+               if (executableCount == 0)
+               {
+                       continue;
+               }
+
+               props[ndx].resize(executableCount);
+               for (deUint32 execNdx = 0; execNdx < executableCount; execNdx++)
+               {
+                       deMemset(&props[ndx][execNdx], 0, sizeof(props[ndx][execNdx]));
+                       props[ndx][execNdx].sType = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR;
+                       props[ndx][execNdx].pNext = DE_NULL;
+               }
+               VK_CHECK(vk.getPipelineExecutablePropertiesKHR(vkDevice, &pipelineInfo, &executableCount, &props[ndx][0]));
+
+               for (deUint32 execNdx = 0; execNdx < executableCount; execNdx++)
+               {
+                       if (!checkString(props[ndx][execNdx].name, DE_LENGTH_OF_ARRAY(props[ndx][execNdx].name)))
+                       {
+                               return tcu::TestStatus::fail("Invalid binary name string");
+                       }
+
+                       for (deUint32 otherNdx = 0; otherNdx < execNdx; otherNdx++)
+                       {
+                               if (deMemCmp(props[ndx][execNdx].name, props[ndx][otherNdx].name,
+                                                        DE_LENGTH_OF_ARRAY(props[ndx][execNdx].name)) == 0)
+                               {
+                                       return tcu::TestStatus::fail("Binary name string not unique within the pipeline");
+                               }
+                       }
+
+                       if (!checkString(props[ndx][execNdx].description, DE_LENGTH_OF_ARRAY(props[ndx][execNdx].description)))
+                       {
+                               return tcu::TestStatus::fail("Invalid binary description string");
+                       }
+
+                       // Check that the binary only contains stages actually used to
+                       // compile the pipeline
+                       VkShaderStageFlags stages = props[ndx][execNdx].stages;
+                       for (deUint32 stageNdx = 0; stageNdx < m_param->getShaderCount(); stageNdx++)
+                       {
+                               stages &= ~m_param->getShaderFlag(stageNdx);
+                       }
+                       if (stages != 0)
+                       {
+                               return tcu::TestStatus::fail("Binary uses unprovided stage");
+                       }
+               }
+       }
+
+       if (props[0].size() != props[1].size())
+       {
+               return tcu::TestStatus::fail("Identical pipelines have different numbers of props");
+       }
+
+       if (props[0].size() == 0)
+       {
+               return tcu::TestStatus::pass("No executables reported");
+       }
+
+       // Both compiles had better have specified the same infos
+       for (deUint32 execNdx0 = 0; execNdx0 < props[0].size(); execNdx0++)
+       {
+               deUint32 execNdx1 = 0;
+               for (; execNdx1 < props[1].size(); execNdx1++)
+               {
+                       if (deMemCmp(props[0][execNdx0].name, props[1][execNdx1].name,
+                                                DE_LENGTH_OF_ARRAY(props[0][execNdx0].name)) == 0)
+                       {
+                               break;
+                       }
+               }
+               if (execNdx1 >= props[1].size())
+               {
+                       return tcu::TestStatus::fail("Identical pipelines have different sets of executables");
+               }
+
+               if (deMemCmp(props[0][execNdx0].description, props[1][execNdx1].description,
+                                        DE_LENGTH_OF_ARRAY(props[0][execNdx0].description)) != 0)
+               {
+                       return tcu::TestStatus::fail("Same binary has different descriptions");
+               }
+
+               if (props[0][execNdx0].stages != props[1][execNdx1].stages)
+               {
+                       return tcu::TestStatus::fail("Same binary has different stages");
+               }
+
+               if (props[0][execNdx0].subgroupSize != props[1][execNdx1].subgroupSize)
+               {
+                       return tcu::TestStatus::fail("Same binary has different subgroup sizes");
+               }
+       }
+
+       log << tcu::TestLog::Section("Binaries", "Binaries reported for this pipeline");
+       log << tcu::TestLog::Message << "Pipeline reported " << props[0].size() << " props" << tcu::TestLog::EndMessage;
+
+       tcu::TestStatus status = tcu::TestStatus::pass("Pass");
+       for (deUint32 execNdx = 0; execNdx < props[0].size(); execNdx++)
+       {
+               log << tcu::TestLog::Section(props[0][execNdx].name, props[0][execNdx].description);
+               log << tcu::TestLog::Message << "Name: " << props[0][execNdx].name << tcu::TestLog::EndMessage;
+               log << tcu::TestLog::Message << "Description: " << props[0][execNdx].description << tcu::TestLog::EndMessage;
+               log << tcu::TestLog::Message << "Stages: " << getShaderFlagsStr(props[0][execNdx].stages) << tcu::TestLog::EndMessage;
+               log << tcu::TestLog::Message << "Subgroup Size: " << props[0][execNdx].subgroupSize << tcu::TestLog::EndMessage;
+
+               if (m_param->getTestStatistics())
+               {
+                       status = verifyStatistics(execNdx);
+                       if (status.getCode() != QP_TEST_RESULT_PASS)
+                       {
+                               log << tcu::TestLog::EndSection;
+                               break;
+                       }
+               }
+
+               if (m_param->getTestInternalRepresentations())
+               {
+                       status = verifyInternalRepresentations(execNdx);
+                       if (status.getCode() != QP_TEST_RESULT_PASS)
+                       {
+                               log << tcu::TestLog::EndSection;
+                               break;
+                       }
+               }
+
+               log << tcu::TestLog::EndSection;
+       }
+
+       log << tcu::TestLog::EndSection;
+
+       return status;
+}
+
+class GraphicsExecutablePropertiesTest : public ExecutablePropertiesTest
+{
+public:
+                                                       GraphicsExecutablePropertiesTest        (tcu::TestContext&              testContext,
+                                                                                                        const std::string&     name,
+                                                                                                        const std::string&     description,
+                                                                                                        const ExecutablePropertiesTestParam*   param)
+                                                               : ExecutablePropertiesTest (testContext, name, description, param)
+                                                               { }
+       virtual                                 ~GraphicsExecutablePropertiesTest       (void) { }
+       virtual void                    initPrograms            (SourceCollections&     programCollection) const;
+       virtual TestInstance*   createInstance          (Context&                               context) const;
+};
+
+class GraphicsExecutablePropertiesTestInstance : public ExecutablePropertiesTestInstance
+{
+public:
+                                                       GraphicsExecutablePropertiesTestInstance        (Context&                               context,
+                                                                                                                        const ExecutablePropertiesTestParam*   param);
+       virtual                                 ~GraphicsExecutablePropertiesTestInstance       (void);
+protected:
+       const tcu::UVec2                                        m_renderSize;
+       const VkFormat                                          m_colorFormat;
+       const VkFormat                                          m_depthFormat;
+       Move<VkPipelineLayout>                          m_pipelineLayout;
+
+       SimpleGraphicsPipelineBuilder           m_pipelineBuilder;
+       SimpleGraphicsPipelineBuilder           m_missPipelineBuilder;
+       Move<VkRenderPass>                                      m_renderPass;
+};
+
+void GraphicsExecutablePropertiesTest::initPrograms (SourceCollections& programCollection) const
+{
+       for (deUint32 shaderNdx = 0; shaderNdx < m_param.getShaderCount(); shaderNdx++)
+       {
+               switch(m_param.getShaderFlag(shaderNdx))
+               {
+               case VK_SHADER_STAGE_VERTEX_BIT:
+                       programCollection.glslSources.add("color_vert") << glu::VertexSource(
+                                               "#version 310 es\n"
+                                               "layout(location = 0) in vec4 position;\n"
+                                               "layout(location = 1) in vec4 color;\n"
+                                               "layout(location = 0) out highp vec4 vtxColor;\n"
+                                               "void main (void)\n"
+                                               "{\n"
+                                               "  gl_Position = position;\n"
+                                               "  vtxColor = color;\n"
+                                               "}\n");
+                                       break;
+               case VK_SHADER_STAGE_FRAGMENT_BIT:
+                       programCollection.glslSources.add("color_frag") << glu::FragmentSource(
+                                               "#version 310 es\n"
+                                               "layout(location = 0) in highp vec4 vtxColor;\n"
+                                               "layout(location = 0) out highp vec4 fragColor;\n"
+                                               "void main (void)\n"
+                                               "{\n"
+                                               "  fragColor = vtxColor;\n"
+                                               "}\n");
+                       break;
+
+               case VK_SHADER_STAGE_GEOMETRY_BIT:
+                       programCollection.glslSources.add("dummy_geo") << glu::GeometrySource(
+                                               "#version 450 \n"
+                                               "layout(triangles) in;\n"
+                                               "layout(triangle_strip, max_vertices = 3) out;\n"
+                                               "layout(location = 0) in highp vec4 in_vtxColor[];\n"
+                                               "layout(location = 0) out highp vec4 vtxColor;\n"
+                                               "out gl_PerVertex { vec4 gl_Position; float gl_PointSize; };\n"
+                                               "in gl_PerVertex { vec4 gl_Position; float gl_PointSize; } gl_in[];\n"
+                                               "void main (void)\n"
+                                               "{\n"
+                                               "  for(int ndx=0; ndx<3; ndx++)\n"
+                                               "  {\n"
+                                               "    gl_Position = gl_in[ndx].gl_Position;\n"
+                                               "    gl_PointSize = gl_in[ndx].gl_PointSize;\n"
+                                               "    vtxColor    = in_vtxColor[ndx];\n"
+                                               "    EmitVertex();\n"
+                                               "  }\n"
+                                               "  EndPrimitive();\n"
+                                               "}\n");
+                       break;
+
+               case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT:
+                       programCollection.glslSources.add("basic_tcs") << glu::TessellationControlSource(
+                                               "#version 450 \n"
+                                               "layout(vertices = 3) out;\n"
+                                               "layout(location = 0) in highp vec4 color[];\n"
+                                               "layout(location = 0) out highp vec4 vtxColor[];\n"
+                                               "out gl_PerVertex { vec4 gl_Position; float gl_PointSize; } gl_out[3];\n"
+                                               "in gl_PerVertex { vec4 gl_Position; float gl_PointSize; } gl_in[gl_MaxPatchVertices];\n"
+                                               "void main()\n"
+                                               "{\n"
+                                               "  gl_TessLevelOuter[0] = 4.0;\n"
+                                               "  gl_TessLevelOuter[1] = 4.0;\n"
+                                               "  gl_TessLevelOuter[2] = 4.0;\n"
+                                               "  gl_TessLevelInner[0] = 4.0;\n"
+                                               "  gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;\n"
+                                               "  gl_out[gl_InvocationID].gl_PointSize = gl_in[gl_InvocationID].gl_PointSize;\n"
+                                               "  vtxColor[gl_InvocationID] = color[gl_InvocationID];\n"
+                                               "}\n");
+                                       break;
+
+                               case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT:
+                                       programCollection.glslSources.add("basic_tes") << glu::TessellationEvaluationSource(
+                                               "#version 450 \n"
+                                               "layout(triangles, fractional_even_spacing, ccw) in;\n"
+                                               "layout(location = 0) in highp vec4 colors[];\n"
+                                               "layout(location = 0) out highp vec4 vtxColor;\n"
+                                               "out gl_PerVertex { vec4 gl_Position; float gl_PointSize; };\n"
+                                               "in gl_PerVertex { vec4 gl_Position; float gl_PointSize; } gl_in[gl_MaxPatchVertices];\n"
+                                               "void main() \n"
+                                               "{\n"
+                                               "  float u = gl_TessCoord.x;\n"
+                                               "  float v = gl_TessCoord.y;\n"
+                                               "  float w = gl_TessCoord.z;\n"
+                                               "  vec4 pos = vec4(0);\n"
+                                               "  vec4 color = vec4(0);\n"
+                                               "  pos.xyz += u * gl_in[0].gl_Position.xyz;\n"
+                                               "  color.xyz += u * colors[0].xyz;\n"
+                                               "  pos.xyz += v * gl_in[1].gl_Position.xyz;\n"
+                                               "  color.xyz += v * colors[1].xyz;\n"
+                                               "  pos.xyz += w * gl_in[2].gl_Position.xyz;\n"
+                                               "  color.xyz += w * colors[2].xyz;\n"
+                                               "  pos.w = 1.0;\n"
+                                               "  color.w = 1.0;\n"
+                                               "  gl_Position = pos;\n"
+                                               "  gl_PointSize = gl_in[0].gl_PointSize;"
+                                               "  vtxColor = color;\n"
+                                               "}\n");
+                                       break;
+
+                               default:
+                                       DE_FATAL("Unknown Shader Stage!");
+                                       break;
+               };
+       }
+}
+
+TestInstance* GraphicsExecutablePropertiesTest::createInstance (Context& context) const
+{
+       return new GraphicsExecutablePropertiesTestInstance(context, &m_param);
+}
+
+GraphicsExecutablePropertiesTestInstance::GraphicsExecutablePropertiesTestInstance (Context&                                   context,
+                                                                                                                               const ExecutablePropertiesTestParam*    param)
+       : ExecutablePropertiesTestInstance              (context, param)
+       , m_renderSize                  (32u, 32u)
+       , m_colorFormat                 (VK_FORMAT_R8G8B8A8_UNORM)
+       , m_depthFormat                 (VK_FORMAT_D16_UNORM)
+       , m_pipelineBuilder             (context)
+       , m_missPipelineBuilder (context)
+{
+       const DeviceInterface&  vk                              = m_context.getDeviceInterface();
+       const VkDevice                  vkDevice                = m_context.getDevice();
+
+       // Create pipeline layout
+       {
+               const VkPipelineLayoutCreateInfo pipelineLayoutParams =
+               {
+                       VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,          // VkStructureType                                      sType;
+                       DE_NULL,                                                                                        // const void*                                          pNext;
+                       0u,                                                                                                     // VkPipelineLayoutCreateFlags          flags;
+                       0u,                                                                                                     // deUint32                                                     setLayoutCount;
+                       DE_NULL,                                                                                        // const VkDescriptorSetLayout*         pSetLayouts;
+                       0u,                                                                                                     // deUint32                                                     pushConstantRangeCount;
+                       DE_NULL                                                                                         // const VkPushConstantRange*           pPushConstantRanges;
+               };
+
+               m_pipelineLayout = createPipelineLayout(vk, vkDevice, &pipelineLayoutParams);
+       }
+
+       // Create render pass
+       m_renderPass = makeRenderPass(vk, vkDevice, m_colorFormat, m_depthFormat);
+
+       // Bind shader stages
+
+       VkPhysicalDeviceFeatures        features = m_context.getDeviceFeatures();
+       for (deUint32 ndx = 0; ndx < PIPELINE_CACHE_NDX_COUNT; ndx++)
+       {
+               for (deUint32 shaderNdx = 0; shaderNdx < m_param->getShaderCount(); shaderNdx++)
+               {
+                       switch(m_param->getShaderFlag(shaderNdx))
+                       {
+                       case VK_SHADER_STAGE_VERTEX_BIT:
+                               m_pipelineBuilder.bindShaderStage(VK_SHADER_STAGE_VERTEX_BIT, "color_vert", "main");
+                               break;
+                       case VK_SHADER_STAGE_FRAGMENT_BIT:
+                               m_pipelineBuilder.bindShaderStage(VK_SHADER_STAGE_FRAGMENT_BIT, "color_frag", "main");
+                               break;
+                       case VK_SHADER_STAGE_GEOMETRY_BIT:
+                               if (features.geometryShader == VK_FALSE)
+                               {
+                                       TCU_THROW(NotSupportedError, "Geometry Shader Not Supported");
+                               }
+                               else
+                               {
+                                       m_pipelineBuilder.bindShaderStage(VK_SHADER_STAGE_GEOMETRY_BIT, "dummy_geo", "main");
+                               }
+                               break;
+                       case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT:
+                               if (features.tessellationShader == VK_FALSE)
+                               {
+                                       TCU_THROW(NotSupportedError, "Tessellation Not Supported");
+                               }
+                               else
+                               {
+                                       m_pipelineBuilder.bindShaderStage(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, "basic_tcs", "main");
+                                       m_pipelineBuilder.enableTessellationStage(3);
+                               }
+                               break;
+                       case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT:
+                               if (features.tessellationShader == VK_FALSE)
+                               {
+                                       TCU_THROW(NotSupportedError, "Tessellation Not Supported");
+                               }
+                               else
+                               {
+                                       m_pipelineBuilder.bindShaderStage(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, "basic_tes", "main");
+                                       m_pipelineBuilder.enableTessellationStage(3);
+                               }
+                               break;
+                       default:
+                               DE_FATAL("Unknown Shader Stage!");
+                               break;
+                       };
+
+               }
+
+               VkPipelineCreateFlags flags = 0;
+               if (param->getTestStatistics())
+               {
+                       flags |= VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR;
+               }
+
+               // Only check gather internal representations on the second
+               // pipeline.  This way, it's more obvious if they failed to capture
+               // due to the pipeline being cached.
+               if (ndx == PIPELINE_CACHE_NDX_CACHED && param->getTestInternalRepresentations())
+               {
+                       flags |= VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR;
+               }
+
+               m_pipeline[ndx] = m_pipelineBuilder.buildPipeline(m_renderSize, *m_renderPass, *m_cache, *m_pipelineLayout, flags);
+               m_pipelineBuilder.resetBuilder();
+       }
+}
+
+GraphicsExecutablePropertiesTestInstance::~GraphicsExecutablePropertiesTestInstance (void)
+{
+}
+
+class ComputeExecutablePropertiesTest : public ExecutablePropertiesTest
+{
+public:
+                                                       ComputeExecutablePropertiesTest (tcu::TestContext&              testContext,
+                                                                                                        const std::string&             name,
+                                                                                                        const std::string&             description,
+                                                                                                        const ExecutablePropertiesTestParam*   param)
+                                                               : ExecutablePropertiesTest      (testContext, name, description, param)
+                                                               { }
+       virtual                                 ~ComputeExecutablePropertiesTest        (void) { }
+       virtual void                    initPrograms                    (SourceCollections&     programCollection) const;
+       virtual TestInstance*   createInstance                  (Context&                               context) const;
+};
+
+class ComputeExecutablePropertiesTestInstance : public ExecutablePropertiesTestInstance
+{
+public:
+                                                       ComputeExecutablePropertiesTestInstance (Context&                               context,
+                                                                                                                        const ExecutablePropertiesTestParam*   param);
+       virtual                                 ~ComputeExecutablePropertiesTestInstance        (void);
+protected:
+       void                                    buildDescriptorSets                             (deUint32 ndx);
+       void                                    buildShader                                             (deUint32 ndx);
+       void                                    buildPipeline                                   (deUint32 ndx);
+protected:
+       Move<VkBuffer>                                  m_inputBuf;
+       de::MovePtr<Allocation>         m_inputBufferAlloc;
+       Move<VkShaderModule>                    m_computeShaderModule[PIPELINE_CACHE_NDX_COUNT];
+
+       Move<VkBuffer>                                  m_outputBuf[PIPELINE_CACHE_NDX_COUNT];
+       de::MovePtr<Allocation>         m_outputBufferAlloc[PIPELINE_CACHE_NDX_COUNT];
+
+       Move<VkDescriptorPool>                  m_descriptorPool[PIPELINE_CACHE_NDX_COUNT];
+       Move<VkDescriptorSetLayout>     m_descriptorSetLayout[PIPELINE_CACHE_NDX_COUNT];
+       Move<VkDescriptorSet>                   m_descriptorSet[PIPELINE_CACHE_NDX_COUNT];
+
+       Move<VkPipelineLayout>                  m_pipelineLayout[PIPELINE_CACHE_NDX_COUNT];
+};
+
+void ComputeExecutablePropertiesTest::initPrograms (SourceCollections& programCollection) const
+{
+       programCollection.glslSources.add("basic_compute") << glu::ComputeSource(
+               "#version 310 es\n"
+               "layout(local_size_x = 1) in;\n"
+               "layout(std430) buffer;\n"
+               "layout(binding = 0) readonly buffer Input0\n"
+               "{\n"
+               "  vec4 elements[];\n"
+               "} input_data0;\n"
+               "layout(binding = 1) writeonly buffer Output\n"
+               "{\n"
+               "  vec4 elements[];\n"
+               "} output_data;\n"
+               "void main()\n"
+               "{\n"
+               "  uint ident = gl_GlobalInvocationID.x;\n"
+               "  output_data.elements[ident] = input_data0.elements[ident] * input_data0.elements[ident];\n"
+               "}");
+}
+
+TestInstance* ComputeExecutablePropertiesTest::createInstance (Context& context) const
+{
+       return new ComputeExecutablePropertiesTestInstance(context, &m_param);
+}
+
+void ComputeExecutablePropertiesTestInstance::buildDescriptorSets (deUint32 ndx)
+{
+       const DeviceInterface&  vk                              = m_context.getDeviceInterface();
+       const VkDevice                  vkDevice                = m_context.getDevice();
+
+       // Create descriptor set layout
+       DescriptorSetLayoutBuilder descLayoutBuilder;
+       for (deUint32 bindingNdx = 0u; bindingNdx < 2u; bindingNdx++)
+               descLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_COMPUTE_BIT);
+       m_descriptorSetLayout[ndx] = descLayoutBuilder.build(vk, vkDevice);
+}
+
+void ComputeExecutablePropertiesTestInstance::buildShader (deUint32 ndx)
+{
+       const DeviceInterface&  vk                              = m_context.getDeviceInterface();
+       const VkDevice                  vkDevice                = m_context.getDevice();
+
+       // Create compute shader
+       VkShaderModuleCreateInfo shaderModuleCreateInfo =
+       {
+               VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,                                                                    // VkStructureType                              sType;
+               DE_NULL,                                                                                                                                                // const void*                                  pNext;
+               0u,                                                                                                                                                             // VkShaderModuleCreateFlags    flags;
+               m_context.getBinaryCollection().get("basic_compute").getSize(),                                 // deUintptr                                    codeSize;
+               (deUint32*)m_context.getBinaryCollection().get("basic_compute").getBinary(),    // const deUint32*                              pCode;
+       };
+       m_computeShaderModule[ndx] = createShaderModule(vk, vkDevice, &shaderModuleCreateInfo);
+}
+
+void ComputeExecutablePropertiesTestInstance::buildPipeline (deUint32 ndx)
+{
+       const DeviceInterface&  vk                               = m_context.getDeviceInterface();
+       const VkDevice                  vkDevice                 = m_context.getDevice();
+
+       // Create compute pipeline layout
+       const VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,                                  // VkStructureType                                      sType;
+               DE_NULL,                                                                                                                // const void*                                          pNext;
+               0u,                                                                                                                             // VkPipelineLayoutCreateFlags          flags;
+               1u,                                                                                                                             // deUint32                                                     setLayoutCount;
+               &m_descriptorSetLayout[ndx].get(),                                                              // const VkDescriptorSetLayout*         pSetLayouts;
+               0u,                                                                                                                             // deUint32                                                     pushConstantRangeCount;
+               DE_NULL,                                                                                                                // const VkPushConstantRange*           pPushConstantRanges;
+       };
+
+       m_pipelineLayout[ndx] = createPipelineLayout(vk, vkDevice, &pipelineLayoutCreateInfo);
+
+       const VkPipelineShaderStageCreateInfo stageCreateInfo =
+       {
+               VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,                    // VkStructureType                                      sType;
+               DE_NULL,                                                                                                                // const void*                                          pNext;
+               0u,                                                                                                                             // VkPipelineShaderStageCreateFlags     flags;
+               VK_SHADER_STAGE_COMPUTE_BIT,                                                                    // VkShaderStageFlagBits                        stage;
+               *m_computeShaderModule[ndx],                                                                    // VkShaderModule                                       module;
+               "main",                                                                                                                 // const char*                                          pName;
+               DE_NULL,                                                                                                                // const VkSpecializationInfo*          pSpecializationInfo;
+       };
+
+       VkPipelineCreateFlags flags = 0;
+       if (m_param->getTestStatistics())
+       {
+               flags |= VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR;
+       }
+
+       // Only check gather internal representations on the second
+       // pipeline.  This way, it's more obvious if they failed to capture
+       // due to the pipeline being cached.
+       if (ndx == PIPELINE_CACHE_NDX_CACHED && m_param->getTestInternalRepresentations())
+       {
+               flags |= VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR;
+       }
+
+       const VkComputePipelineCreateInfo pipelineCreateInfo =
+       {
+               VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,                         // VkStructureType                                      sType;
+               DE_NULL,                                                                                                        // const void*                                          pNext;
+               flags,                                                                                                          // VkPipelineCreateFlags                        flags;
+               stageCreateInfo,                                                                                        // VkPipelineShaderStageCreateInfo      stage;
+               *m_pipelineLayout[ndx],                                                                         // VkPipelineLayout                                     layout;
+               (VkPipeline)0,                                                                                          // VkPipeline                                           basePipelineHandle;
+               0u,                                                                                                                     // deInt32                                                      basePipelineIndex;
+       };
+
+       vk.createComputePipelines(vkDevice, *m_cache, 1u, &pipelineCreateInfo, DE_NULL, &m_pipeline[ndx]);
+}
+
+ComputeExecutablePropertiesTestInstance::ComputeExecutablePropertiesTestInstance (Context&                             context,
+                                                                                                       const ExecutablePropertiesTestParam*    param)
+       : ExecutablePropertiesTestInstance (context, param)
+{
+       for (deUint32 ndx = 0; ndx < PIPELINE_CACHE_NDX_COUNT; ndx++)
+       {
+               buildDescriptorSets(ndx);
+               buildShader(ndx);
+               buildPipeline(ndx);
+       }
+}
+
+ComputeExecutablePropertiesTestInstance::~ComputeExecutablePropertiesTestInstance (void)
+{
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createExecutablePropertiesTests (tcu::TestContext& testCtx)
+{
+
+       de::MovePtr<tcu::TestCaseGroup> binaryInfoTests (new tcu::TestCaseGroup(testCtx, "executable_properties", "pipeline binary statistics tests"));
+
+       // Graphics Pipeline Tests
+       {
+               de::MovePtr<tcu::TestCaseGroup> graphicsTests (new tcu::TestCaseGroup(testCtx, "graphics", "Test pipeline binary info with graphics pipeline."));
+
+               const VkShaderStageFlagBits testParamShaders0[] =
+               {
+                       VK_SHADER_STAGE_VERTEX_BIT,
+                       VK_SHADER_STAGE_FRAGMENT_BIT,
+               };
+               const VkShaderStageFlagBits testParamShaders1[] =
+               {
+                       VK_SHADER_STAGE_VERTEX_BIT,
+                       VK_SHADER_STAGE_GEOMETRY_BIT,
+                       VK_SHADER_STAGE_FRAGMENT_BIT,
+               };
+               const VkShaderStageFlagBits testParamShaders2[] =
+               {
+                       VK_SHADER_STAGE_VERTEX_BIT,
+                       VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
+                       VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
+                       VK_SHADER_STAGE_FRAGMENT_BIT,
+               };
+               const ExecutablePropertiesTestParam testParams[] =
+               {
+                       ExecutablePropertiesTestParam(testParamShaders0, DE_LENGTH_OF_ARRAY(testParamShaders0), DE_FALSE, DE_FALSE),
+                       ExecutablePropertiesTestParam(testParamShaders1, DE_LENGTH_OF_ARRAY(testParamShaders1), DE_FALSE, DE_FALSE),
+                       ExecutablePropertiesTestParam(testParamShaders2, DE_LENGTH_OF_ARRAY(testParamShaders2), DE_FALSE, DE_FALSE),
+                       ExecutablePropertiesTestParam(testParamShaders0, DE_LENGTH_OF_ARRAY(testParamShaders0), DE_TRUE, DE_FALSE),
+                       ExecutablePropertiesTestParam(testParamShaders1, DE_LENGTH_OF_ARRAY(testParamShaders1), DE_TRUE, DE_FALSE),
+                       ExecutablePropertiesTestParam(testParamShaders2, DE_LENGTH_OF_ARRAY(testParamShaders2), DE_TRUE, DE_FALSE),
+                       ExecutablePropertiesTestParam(testParamShaders0, DE_LENGTH_OF_ARRAY(testParamShaders0), DE_FALSE, DE_TRUE),
+                       ExecutablePropertiesTestParam(testParamShaders1, DE_LENGTH_OF_ARRAY(testParamShaders1), DE_FALSE, DE_TRUE),
+                       ExecutablePropertiesTestParam(testParamShaders2, DE_LENGTH_OF_ARRAY(testParamShaders2), DE_FALSE, DE_TRUE),
+                       ExecutablePropertiesTestParam(testParamShaders0, DE_LENGTH_OF_ARRAY(testParamShaders0), DE_TRUE, DE_TRUE),
+                       ExecutablePropertiesTestParam(testParamShaders1, DE_LENGTH_OF_ARRAY(testParamShaders1), DE_TRUE, DE_TRUE),
+                       ExecutablePropertiesTestParam(testParamShaders2, DE_LENGTH_OF_ARRAY(testParamShaders2), DE_TRUE, DE_TRUE),
+               };
+
+               for (deUint32 i = 0; i < DE_LENGTH_OF_ARRAY(testParams); i++)
+                       graphicsTests->addChild(newTestCase<GraphicsExecutablePropertiesTest>(testCtx, &testParams[i]));
+
+               binaryInfoTests->addChild(graphicsTests.release());
+       }
+
+       // Compute Pipeline Tests
+       {
+               de::MovePtr<tcu::TestCaseGroup> computeTests (new tcu::TestCaseGroup(testCtx, "compute", "Test pipeline binary info with compute pipeline."));
+
+               const VkShaderStageFlagBits testParamShaders0[] =
+               {
+                       VK_SHADER_STAGE_COMPUTE_BIT,
+               };
+               const ExecutablePropertiesTestParam testParams[] =
+               {
+                       ExecutablePropertiesTestParam(testParamShaders0, DE_LENGTH_OF_ARRAY(testParamShaders0), DE_FALSE, DE_FALSE),
+                       ExecutablePropertiesTestParam(testParamShaders0, DE_LENGTH_OF_ARRAY(testParamShaders0), DE_TRUE, DE_FALSE),
+                       ExecutablePropertiesTestParam(testParamShaders0, DE_LENGTH_OF_ARRAY(testParamShaders0), DE_FALSE, DE_TRUE),
+                       ExecutablePropertiesTestParam(testParamShaders0, DE_LENGTH_OF_ARRAY(testParamShaders0), DE_TRUE, DE_TRUE),
+               };
+
+               for (deUint32 i = 0; i < DE_LENGTH_OF_ARRAY(testParams); i++)
+                       computeTests->addChild(newTestCase<ComputeExecutablePropertiesTest>(testCtx, &testParams[i]));
+
+               binaryInfoTests->addChild(computeTests.release());
+       }
+
+       return binaryInfoTests.release();
+}
+
+} // pipeline
+
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelineExecutablePropertiesTests.hpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelineExecutablePropertiesTests.hpp
new file mode 100644 (file)
index 0000000..d50719e
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _VKTPIPELINEEXECUTABLEPROPERTIESTESTS_HPP
+#define _VKTPIPELINEEXECUTABLEPROPERTIESTESTS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2019 The Khronos Group Inc.
+ * Copyright (c) 2019 Intel Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Pipeline Creation Feedback Tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktTestCase.hpp"
+
+namespace vkt
+{
+namespace pipeline
+{
+
+tcu::TestCaseGroup* createExecutablePropertiesTests (tcu::TestContext& testCtx);
+
+} // pipeline
+} // vkt
+
+#endif // _VKTPIPELINEEXECUTABLEPROPERTIESTESTS_HPP
index 9495ff9..d70fadc 100644 (file)
@@ -48,6 +48,7 @@
 #include "vktPipelineDerivativeTests.hpp"
 #include "vktPipelineCreationFeedbackTests.hpp"
 #include "vktPipelineDepthRangeUnrestrictedTests.hpp"
+#include "vktPipelineExecutablePropertiesTests.hpp"
 #include "vktPipelineVertexOnlyTests.hpp"
 #include "vktTestGroupUtil.hpp"
 
@@ -88,6 +89,7 @@ void createChildren (tcu::TestCaseGroup* pipelineTests)
        pipelineTests->addChild(createDerivativeTests                           (testCtx));
        pipelineTests->addChild(createCreationFeedbackTests                     (testCtx));
        pipelineTests->addChild(createDepthRangeUnrestrictedTests       (testCtx));
+       pipelineTests->addChild(createExecutablePropertiesTests         (testCtx));
        pipelineTests->addChild(createVertexOnlyTests                           (testCtx));
 }
 
index 3cf1bb4..db83d05 100644 (file)
@@ -214157,6 +214157,22 @@ dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compar
 dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compare_op_less_or_equal_clear_value_-7_wc_2_viewport_min_-12_max_12
 dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compare_op_less_or_equal_clear_value_-7_wc_6_viewport_min_-12_max_12
 dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compare_op_less_or_equal_clear_value_-7_wc_12_viewport_min_-12_max_12
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage_statistics
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage_statistics
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage_statistics
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage_statistics_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage_statistics_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage_statistics_internal_representations
+dEQP-VK.pipeline.executable_properties.compute.compute_stage
+dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics
+dEQP-VK.pipeline.executable_properties.compute.compute_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics_internal_representations
 dEQP-VK.pipeline.vertex_only.position_to_ssbo
 dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.no_access.single_descriptor.1d
 dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.no_access.single_descriptor.1d_base_mip
index 04d79d5..9dc3103 100644 (file)
@@ -214157,6 +214157,22 @@ dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compar
 dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compare_op_less_or_equal_clear_value_-7_wc_2_viewport_min_-12_max_12
 dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compare_op_less_or_equal_clear_value_-7_wc_6_viewport_min_-12_max_12
 dEQP-VK.pipeline.depth_range_unrestricted.depthclampingdisabled.d16_unorm_compare_op_less_or_equal_clear_value_-7_wc_12_viewport_min_-12_max_12
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage_statistics
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage_statistics
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage_statistics
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_fragment_stage_statistics_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_geometry_stage_fragment_stage_statistics_internal_representations
+dEQP-VK.pipeline.executable_properties.graphics.vertex_stage_tessellation_control_stage_tessellation_evaluation_stage_fragment_stage_statistics_internal_representations
+dEQP-VK.pipeline.executable_properties.compute.compute_stage
+dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics
+dEQP-VK.pipeline.executable_properties.compute.compute_stage_internal_representations
+dEQP-VK.pipeline.executable_properties.compute.compute_stage_statistics_internal_representations
 dEQP-VK.pipeline.vertex_only.position_to_ssbo
 dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.no_access.single_descriptor.1d
 dEQP-VK.binding_model.shader_access.primary_cmd_buf.sampler_mutable.no_access.single_descriptor.1d_base_mip
index 9105ec6..70c6e91 100644 (file)
@@ -65,4 +65,5 @@ VK_KHR_draw_indirect_count                                    DEVICE
 VK_KHR_shader_atomic_int64                                     DEVICE
 VK_KHR_vulkan_memory_model                                     DEVICE
 VK_KHR_uniform_buffer_standard_layout          DEVICE
-VK_KHR_imageless_framebuffer                           DEVICE
\ No newline at end of file
+VK_KHR_imageless_framebuffer                           DEVICE
+VK_KHR_pipeline_executable_properties          DEVICE
index 8991de6..960bc5b 100644 (file)
@@ -28,4 +28,5 @@ VkPhysicalDeviceDescriptorIndexingFeaturesEXT                 runtimeDescriptorArray                                                          VK
 VkPhysicalDeviceInlineUniformBlockFeaturesEXT                  inlineUniformBlock                                                                      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT                             EXTENSIONS ( VK_EXT_inline_uniform_block )
 VkPhysicalDeviceInlineUniformBlockFeaturesEXT                  descriptorBindingInlineUniformBlockUpdateAfterBind      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT                             EXTENSIONS ( VK_EXT_inline_uniform_block VK_EXT_descriptor_indexing )
 VkPhysicalDeviceScalarBlockLayoutFeaturesEXT                   scalarBlockLayout                                                                       VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT                              EXTENSIONS ( VK_EXT_scalar_block_layout )
-VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR uniformBufferStandardLayout                                                     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR   EXTENSIONS ( VK_KHR_uniform_buffer_standard_layout )
\ No newline at end of file
+VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR uniformBufferStandardLayout                                                     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR   EXTENSIONS ( VK_KHR_uniform_buffer_standard_layout )
+VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR        pipelineExecutableInfo                                                          VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR   EXTENSIONS ( VK_KHR_pipeline_executable_properties )
index a423f0b..cda4115 100644 (file)
@@ -523,6 +523,12 @@ typedef enum VkStructureType {
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = 1000259002,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = 1000261000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000,
+    VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000,
+    VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001,
+    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002,
+    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003,
+    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004,
+    VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000,
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001,
@@ -1673,6 +1679,8 @@ typedef enum VkPipelineCreateFlagBits {
     VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008,
     VK_PIPELINE_CREATE_DISPATCH_BASE = 0x00000010,
     VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = 0x00000020,
+    VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = 0x00000040,
+    VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080,
     VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
     VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE,
     VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
@@ -6513,6 +6521,100 @@ typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR {
 
 
 
+#define VK_KHR_pipeline_executable_properties 1
+#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1
+#define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties"
+
+typedef enum VkPipelineExecutableStatisticFormatKHR {
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BEGIN_RANGE_KHR = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_END_RANGE_KHR = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR,
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_RANGE_SIZE_KHR = (VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR - VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR + 1),
+    VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkPipelineExecutableStatisticFormatKHR;
+typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    VkBool32           pipelineExecutableInfo;
+} VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR;
+
+typedef struct VkPipelineInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkPipeline         pipeline;
+} VkPipelineInfoKHR;
+
+typedef struct VkPipelineExecutablePropertiesKHR {
+    VkStructureType       sType;
+    void*                 pNext;
+    VkShaderStageFlags    stages;
+    char                  name[VK_MAX_DESCRIPTION_SIZE];
+    char                  description[VK_MAX_DESCRIPTION_SIZE];
+    uint32_t              subgroupSize;
+} VkPipelineExecutablePropertiesKHR;
+
+typedef struct VkPipelineExecutableInfoKHR {
+    VkStructureType    sType;
+    const void*        pNext;
+    VkPipeline         pipeline;
+    uint32_t           executableIndex;
+} VkPipelineExecutableInfoKHR;
+
+typedef union VkPipelineExecutableStatisticValueKHR {
+    VkBool32    b32;
+    int64_t     i64;
+    uint64_t    u64;
+    double      f64;
+} VkPipelineExecutableStatisticValueKHR;
+
+typedef struct VkPipelineExecutableStatisticKHR {
+    VkStructureType                           sType;
+    void*                                     pNext;
+    char                                      name[VK_MAX_DESCRIPTION_SIZE];
+    char                                      description[VK_MAX_DESCRIPTION_SIZE];
+    VkPipelineExecutableStatisticFormatKHR    format;
+    VkPipelineExecutableStatisticValueKHR     value;
+} VkPipelineExecutableStatisticKHR;
+
+typedef struct VkPipelineExecutableInternalRepresentationKHR {
+    VkStructureType    sType;
+    void*              pNext;
+    char               name[VK_MAX_DESCRIPTION_SIZE];
+    char               description[VK_MAX_DESCRIPTION_SIZE];
+    VkBool32           isText;
+    size_t             dataSize;
+    void*              pData;
+} VkPipelineExecutableInternalRepresentationKHR;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice                        device, const VkPipelineInfoKHR*        pPipelineInfo, uint32_t* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice                        device, const VkPipelineExecutableInfoKHR*  pExecutableInfo, uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice                        device, const VkPipelineExecutableInfoKHR*  pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR(
+    VkDevice                                    device,
+    const VkPipelineInfoKHR*                    pPipelineInfo,
+    uint32_t*                                   pExecutableCount,
+    VkPipelineExecutablePropertiesKHR*          pProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR(
+    VkDevice                                    device,
+    const VkPipelineExecutableInfoKHR*          pExecutableInfo,
+    uint32_t*                                   pStatisticCount,
+    VkPipelineExecutableStatisticKHR*           pStatistics);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR(
+    VkDevice                                    device,
+    const VkPipelineExecutableInfoKHR*          pExecutableInfo,
+    uint32_t*                                   pInternalRepresentationCount,
+    VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
+#endif
+
+
+
 #define VK_EXT_debug_report 1
 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
 #define VK_EXT_DEBUG_REPORT_SPEC_VERSION  9