Fix entry function pointer queries.
vkGetInstanceProcAddr must return NULL when the instance parameter is
NULL, except for a few global functions.
vkGetDeviceProcAddr must return NULL for any non-device-level functions.
Fixes dEQP-VK.api.version_check.entry_points
Bug b/116336664
Change-Id: I446edb0b8c4b94938e0ab77913c8ad391d490f4f
Reviewed-on: https://swiftshader-review.googlesource.com/c/22688
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Vulkan/VkGetProcAddress.cpp b/src/Vulkan/VkGetProcAddress.cpp
index b7a51cb..2d4a302 100644
--- a/src/Vulkan/VkGetProcAddress.cpp
+++ b/src/Vulkan/VkGetProcAddress.cpp
@@ -19,218 +19,263 @@
namespace vk
{
-#define MAKE_VULKAN_ENTRY(aFunction) { #aFunction, reinterpret_cast<PFN_vkVoidFunction>(aFunction) }
- static const std::unordered_map <std::string, PFN_vkVoidFunction> func_ptrs =
- {
- MAKE_VULKAN_ENTRY(vkCreateInstance),
- MAKE_VULKAN_ENTRY(vkDestroyInstance),
- MAKE_VULKAN_ENTRY(vkEnumeratePhysicalDevices),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFeatures),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFormatProperties),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceImageFormatProperties),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceProperties),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceMemoryProperties),
- MAKE_VULKAN_ENTRY(vkGetInstanceProcAddr),
- MAKE_VULKAN_ENTRY(vkGetDeviceProcAddr),
- MAKE_VULKAN_ENTRY(vkCreateDevice),
- MAKE_VULKAN_ENTRY(vkDestroyDevice),
- MAKE_VULKAN_ENTRY(vkEnumerateInstanceExtensionProperties),
- MAKE_VULKAN_ENTRY(vkEnumerateDeviceExtensionProperties),
- MAKE_VULKAN_ENTRY(vkEnumerateInstanceLayerProperties),
- MAKE_VULKAN_ENTRY(vkEnumerateDeviceLayerProperties),
- MAKE_VULKAN_ENTRY(vkGetDeviceQueue),
- MAKE_VULKAN_ENTRY(vkQueueSubmit),
- MAKE_VULKAN_ENTRY(vkQueueWaitIdle),
- MAKE_VULKAN_ENTRY(vkDeviceWaitIdle),
- MAKE_VULKAN_ENTRY(vkAllocateMemory),
- MAKE_VULKAN_ENTRY(vkFreeMemory),
- MAKE_VULKAN_ENTRY(vkMapMemory),
- MAKE_VULKAN_ENTRY(vkUnmapMemory),
- MAKE_VULKAN_ENTRY(vkFlushMappedMemoryRanges),
- MAKE_VULKAN_ENTRY(vkInvalidateMappedMemoryRanges),
- MAKE_VULKAN_ENTRY(vkGetDeviceMemoryCommitment),
- MAKE_VULKAN_ENTRY(vkBindBufferMemory),
- MAKE_VULKAN_ENTRY(vkBindImageMemory),
- MAKE_VULKAN_ENTRY(vkGetBufferMemoryRequirements),
- MAKE_VULKAN_ENTRY(vkGetImageMemoryRequirements),
- MAKE_VULKAN_ENTRY(vkGetImageSparseMemoryRequirements),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties),
- MAKE_VULKAN_ENTRY(vkQueueBindSparse),
- MAKE_VULKAN_ENTRY(vkCreateFence),
- MAKE_VULKAN_ENTRY(vkDestroyFence),
- MAKE_VULKAN_ENTRY(vkResetFences),
- MAKE_VULKAN_ENTRY(vkGetFenceStatus),
- MAKE_VULKAN_ENTRY(vkWaitForFences),
- MAKE_VULKAN_ENTRY(vkCreateSemaphore),
- MAKE_VULKAN_ENTRY(vkDestroySemaphore),
- MAKE_VULKAN_ENTRY(vkCreateEvent),
- MAKE_VULKAN_ENTRY(vkDestroyEvent),
- MAKE_VULKAN_ENTRY(vkGetEventStatus),
- MAKE_VULKAN_ENTRY(vkSetEvent),
- MAKE_VULKAN_ENTRY(vkResetEvent),
- MAKE_VULKAN_ENTRY(vkCreateQueryPool),
- MAKE_VULKAN_ENTRY(vkDestroyQueryPool),
- MAKE_VULKAN_ENTRY(vkGetQueryPoolResults),
- MAKE_VULKAN_ENTRY(vkCreateBuffer),
- MAKE_VULKAN_ENTRY(vkDestroyBuffer),
- MAKE_VULKAN_ENTRY(vkCreateBufferView),
- MAKE_VULKAN_ENTRY(vkDestroyBufferView),
- MAKE_VULKAN_ENTRY(vkCreateImage),
- MAKE_VULKAN_ENTRY(vkDestroyImage),
- MAKE_VULKAN_ENTRY(vkGetImageSubresourceLayout),
- MAKE_VULKAN_ENTRY(vkCreateImageView),
- MAKE_VULKAN_ENTRY(vkDestroyImageView),
- MAKE_VULKAN_ENTRY(vkCreateShaderModule),
- MAKE_VULKAN_ENTRY(vkDestroyShaderModule),
- MAKE_VULKAN_ENTRY(vkCreatePipelineCache),
- MAKE_VULKAN_ENTRY(vkDestroyPipelineCache),
- MAKE_VULKAN_ENTRY(vkGetPipelineCacheData),
- MAKE_VULKAN_ENTRY(vkMergePipelineCaches),
- MAKE_VULKAN_ENTRY(vkCreateGraphicsPipelines),
- MAKE_VULKAN_ENTRY(vkCreateComputePipelines),
- MAKE_VULKAN_ENTRY(vkDestroyPipeline),
- MAKE_VULKAN_ENTRY(vkCreatePipelineLayout),
- MAKE_VULKAN_ENTRY(vkDestroyPipelineLayout),
- MAKE_VULKAN_ENTRY(vkCreateSampler),
- MAKE_VULKAN_ENTRY(vkDestroySampler),
- MAKE_VULKAN_ENTRY(vkCreateDescriptorSetLayout),
- MAKE_VULKAN_ENTRY(vkDestroyDescriptorSetLayout),
- MAKE_VULKAN_ENTRY(vkCreateDescriptorPool),
- MAKE_VULKAN_ENTRY(vkDestroyDescriptorPool),
- MAKE_VULKAN_ENTRY(vkResetDescriptorPool),
- MAKE_VULKAN_ENTRY(vkAllocateDescriptorSets),
- MAKE_VULKAN_ENTRY(vkFreeDescriptorSets),
- MAKE_VULKAN_ENTRY(vkUpdateDescriptorSets),
- MAKE_VULKAN_ENTRY(vkCreateFramebuffer),
- MAKE_VULKAN_ENTRY(vkDestroyFramebuffer),
- MAKE_VULKAN_ENTRY(vkCreateRenderPass),
- MAKE_VULKAN_ENTRY(vkDestroyRenderPass),
- MAKE_VULKAN_ENTRY(vkGetRenderAreaGranularity),
- MAKE_VULKAN_ENTRY(vkCreateCommandPool),
- MAKE_VULKAN_ENTRY(vkDestroyCommandPool),
- MAKE_VULKAN_ENTRY(vkResetCommandPool),
- MAKE_VULKAN_ENTRY(vkAllocateCommandBuffers),
- MAKE_VULKAN_ENTRY(vkFreeCommandBuffers),
- MAKE_VULKAN_ENTRY(vkBeginCommandBuffer),
- MAKE_VULKAN_ENTRY(vkEndCommandBuffer),
- MAKE_VULKAN_ENTRY(vkResetCommandBuffer),
- MAKE_VULKAN_ENTRY(vkCmdBindPipeline),
- MAKE_VULKAN_ENTRY(vkCmdSetViewport),
- MAKE_VULKAN_ENTRY(vkCmdSetScissor),
- MAKE_VULKAN_ENTRY(vkCmdSetLineWidth),
- MAKE_VULKAN_ENTRY(vkCmdSetDepthBias),
- MAKE_VULKAN_ENTRY(vkCmdSetBlendConstants),
- MAKE_VULKAN_ENTRY(vkCmdSetDepthBounds),
- MAKE_VULKAN_ENTRY(vkCmdSetStencilCompareMask),
- MAKE_VULKAN_ENTRY(vkCmdSetStencilWriteMask),
- MAKE_VULKAN_ENTRY(vkCmdSetStencilReference),
- MAKE_VULKAN_ENTRY(vkCmdBindDescriptorSets),
- MAKE_VULKAN_ENTRY(vkCmdBindIndexBuffer),
- MAKE_VULKAN_ENTRY(vkCmdBindVertexBuffers),
- MAKE_VULKAN_ENTRY(vkCmdDraw),
- MAKE_VULKAN_ENTRY(vkCmdDrawIndexed),
- MAKE_VULKAN_ENTRY(vkCmdDrawIndirect),
- MAKE_VULKAN_ENTRY(vkCmdDrawIndexedIndirect),
- MAKE_VULKAN_ENTRY(vkCmdDispatch),
- MAKE_VULKAN_ENTRY(vkCmdDispatchIndirect),
- MAKE_VULKAN_ENTRY(vkCmdCopyBuffer),
- MAKE_VULKAN_ENTRY(vkCmdCopyImage),
- MAKE_VULKAN_ENTRY(vkCmdBlitImage),
- MAKE_VULKAN_ENTRY(vkCmdCopyBufferToImage),
- MAKE_VULKAN_ENTRY(vkCmdCopyImageToBuffer),
- MAKE_VULKAN_ENTRY(vkCmdUpdateBuffer),
- MAKE_VULKAN_ENTRY(vkCmdFillBuffer),
- MAKE_VULKAN_ENTRY(vkCmdClearColorImage),
- MAKE_VULKAN_ENTRY(vkCmdClearDepthStencilImage),
- MAKE_VULKAN_ENTRY(vkCmdClearAttachments),
- MAKE_VULKAN_ENTRY(vkCmdResolveImage),
- MAKE_VULKAN_ENTRY(vkCmdSetEvent),
- MAKE_VULKAN_ENTRY(vkCmdResetEvent),
- MAKE_VULKAN_ENTRY(vkCmdWaitEvents),
- MAKE_VULKAN_ENTRY(vkCmdPipelineBarrier),
- MAKE_VULKAN_ENTRY(vkCmdBeginQuery),
- MAKE_VULKAN_ENTRY(vkCmdEndQuery),
- MAKE_VULKAN_ENTRY(vkCmdResetQueryPool),
- MAKE_VULKAN_ENTRY(vkCmdWriteTimestamp),
- MAKE_VULKAN_ENTRY(vkCmdCopyQueryPoolResults),
- MAKE_VULKAN_ENTRY(vkCmdPushConstants),
- MAKE_VULKAN_ENTRY(vkCmdBeginRenderPass),
- MAKE_VULKAN_ENTRY(vkCmdNextSubpass),
- MAKE_VULKAN_ENTRY(vkCmdEndRenderPass),
- MAKE_VULKAN_ENTRY(vkCmdExecuteCommands),
- MAKE_VULKAN_ENTRY(vkEnumerateInstanceVersion),
- MAKE_VULKAN_ENTRY(vkBindBufferMemory2),
- MAKE_VULKAN_ENTRY(vkBindImageMemory2),
- MAKE_VULKAN_ENTRY(vkGetDeviceGroupPeerMemoryFeatures),
- MAKE_VULKAN_ENTRY(vkCmdSetDeviceMask),
- MAKE_VULKAN_ENTRY(vkCmdDispatchBase),
- MAKE_VULKAN_ENTRY(vkEnumeratePhysicalDeviceGroups),
- MAKE_VULKAN_ENTRY(vkGetImageMemoryRequirements2),
- MAKE_VULKAN_ENTRY(vkGetBufferMemoryRequirements2),
- MAKE_VULKAN_ENTRY(vkGetImageSparseMemoryRequirements2),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFeatures2),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceProperties2),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFormatProperties2),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceImageFormatProperties2),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceMemoryProperties2),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2),
- MAKE_VULKAN_ENTRY(vkTrimCommandPool),
- MAKE_VULKAN_ENTRY(vkGetDeviceQueue2),
- MAKE_VULKAN_ENTRY(vkCreateSamplerYcbcrConversion),
- MAKE_VULKAN_ENTRY(vkDestroySamplerYcbcrConversion),
- MAKE_VULKAN_ENTRY(vkCreateDescriptorUpdateTemplate),
- MAKE_VULKAN_ENTRY(vkDestroyDescriptorUpdateTemplate),
- MAKE_VULKAN_ENTRY(vkUpdateDescriptorSetWithTemplate),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalBufferProperties),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalFenceProperties),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalSemaphoreProperties),
- MAKE_VULKAN_ENTRY(vkGetDescriptorSetLayoutSupport),
- // VK_KHR_bind_memory2
- MAKE_VULKAN_ENTRY(vkBindBufferMemory2KHR),
- MAKE_VULKAN_ENTRY(vkBindImageMemory2KHR),
- // VK_KHR_descriptor_update_template
- MAKE_VULKAN_ENTRY(vkCreateDescriptorUpdateTemplateKHR),
- MAKE_VULKAN_ENTRY(vkDestroyDescriptorUpdateTemplateKHR),
- MAKE_VULKAN_ENTRY(vkUpdateDescriptorSetWithTemplateKHR),
- // VK_KHR_device_group
- MAKE_VULKAN_ENTRY(vkGetDeviceGroupPeerMemoryFeaturesKHR),
- MAKE_VULKAN_ENTRY(vkCmdSetDeviceMaskKHR),
- MAKE_VULKAN_ENTRY(vkCmdDispatchBaseKHR),
- // VK_KHR_device_group_creation
- MAKE_VULKAN_ENTRY(vkEnumeratePhysicalDeviceGroupsKHR),
- // VK_KHR_external_fence_capabilities
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalFencePropertiesKHR),
- // VK_KHR_external_memory_capabilities
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalBufferPropertiesKHR),
- // VK_KHR_external_semaphore_capabilities
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceExternalSemaphorePropertiesKHR),
- // VK_KHR_get_memory_requirements2
- MAKE_VULKAN_ENTRY(vkGetImageMemoryRequirements2KHR),
- MAKE_VULKAN_ENTRY(vkGetBufferMemoryRequirements2KHR),
- MAKE_VULKAN_ENTRY(vkGetImageSparseMemoryRequirements2KHR),
- // VK_KHR_get_physical_device_properties2
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFeatures2KHR),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceProperties2KHR),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceFormatProperties2KHR),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceImageFormatProperties2KHR),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2KHR),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceMemoryProperties2KHR),
- MAKE_VULKAN_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2KHR),
- // VK_KHR_maintenance1
- MAKE_VULKAN_ENTRY(vkTrimCommandPoolKHR),
- // VK_KHR_maintenance3
- MAKE_VULKAN_ENTRY(vkGetDescriptorSetLayoutSupportKHR),
- // VK_KHR_sampler_ycbcr_conversion
- MAKE_VULKAN_ENTRY(vkCreateSamplerYcbcrConversionKHR),
- MAKE_VULKAN_ENTRY(vkDestroySamplerYcbcrConversionKHR),
- };
-#undef MAKE_VULKAN_ENTRY
- PFN_vkVoidFunction GetProcAddr(const char* pName)
+#define MAKE_VULKAN_GLOBAL_ENTRY(aFunction) { #aFunction, reinterpret_cast<PFN_vkVoidFunction>(aFunction) }
+static const std::unordered_map<std::string, PFN_vkVoidFunction> globalFunctionPointers =
+{
+ MAKE_VULKAN_GLOBAL_ENTRY(vkCreateInstance),
+ MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceExtensionProperties),
+ MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceLayerProperties),
+ MAKE_VULKAN_GLOBAL_ENTRY(vkEnumerateInstanceVersion),
+};
+#undef MAKE_VULKAN_GLOBAL_ENTRY
+
+#define MAKE_VULKAN_INSTANCE_ENTRY(aFunction) { #aFunction, reinterpret_cast<PFN_vkVoidFunction>(aFunction) }
+static const std::unordered_map<std::string, PFN_vkVoidFunction> instanceFunctionPointers =
+{
+ MAKE_VULKAN_INSTANCE_ENTRY(vkDestroyInstance),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDevices),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFormatProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceImageFormatProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceMemoryProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkCreateDevice),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkEnumerateDeviceExtensionProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkEnumerateDeviceLayerProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDeviceGroups),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures2),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceProperties2),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFormatProperties2),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceImageFormatProperties2),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceMemoryProperties2),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalBufferProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalFenceProperties),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalSemaphoreProperties),
+ // VK_KHR_device_group_creation
+ MAKE_VULKAN_INSTANCE_ENTRY(vkEnumeratePhysicalDeviceGroupsKHR),
+ // VK_KHR_external_fence_capabilities
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalFencePropertiesKHR),
+ // VK_KHR_external_memory_capabilities
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalBufferPropertiesKHR),
+ // VK_KHR_external_semaphore_capabilities
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceExternalSemaphorePropertiesKHR),
+ // VK_KHR_get_physical_device_properties2
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFeatures2KHR),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceProperties2KHR),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceFormatProperties2KHR),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceImageFormatProperties2KHR),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceQueueFamilyProperties2KHR),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceMemoryProperties2KHR),
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetPhysicalDeviceSparseImageFormatProperties2KHR),
+};
+#undef MAKE_VULKAN_GLOBAL_ENTRY
+
+#define MAKE_VULKAN_DEVICE_ENTRY(aFunction) { #aFunction, reinterpret_cast<PFN_vkVoidFunction>(aFunction) }
+static const std::unordered_map<std::string, PFN_vkVoidFunction> deviceFunctionPointers =
+{
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetInstanceProcAddr),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceProcAddr),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDevice),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceQueue),
+ MAKE_VULKAN_DEVICE_ENTRY(vkQueueSubmit),
+ MAKE_VULKAN_DEVICE_ENTRY(vkQueueWaitIdle),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDeviceWaitIdle),
+ MAKE_VULKAN_DEVICE_ENTRY(vkAllocateMemory),
+ MAKE_VULKAN_DEVICE_ENTRY(vkFreeMemory),
+ MAKE_VULKAN_DEVICE_ENTRY(vkMapMemory),
+ MAKE_VULKAN_DEVICE_ENTRY(vkUnmapMemory),
+ MAKE_VULKAN_DEVICE_ENTRY(vkFlushMappedMemoryRanges),
+ MAKE_VULKAN_DEVICE_ENTRY(vkInvalidateMappedMemoryRanges),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceMemoryCommitment),
+ MAKE_VULKAN_DEVICE_ENTRY(vkBindBufferMemory),
+ MAKE_VULKAN_DEVICE_ENTRY(vkBindImageMemory),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferMemoryRequirements),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetImageMemoryRequirements),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSparseMemoryRequirements),
+ MAKE_VULKAN_DEVICE_ENTRY(vkQueueBindSparse),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateFence),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyFence),
+ MAKE_VULKAN_DEVICE_ENTRY(vkResetFences),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetFenceStatus),
+ MAKE_VULKAN_DEVICE_ENTRY(vkWaitForFences),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateSemaphore),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroySemaphore),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateEvent),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyEvent),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetEventStatus),
+ MAKE_VULKAN_DEVICE_ENTRY(vkSetEvent),
+ MAKE_VULKAN_DEVICE_ENTRY(vkResetEvent),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateQueryPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyQueryPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetQueryPoolResults),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateBufferView),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyBufferView),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateImage),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyImage),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSubresourceLayout),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateImageView),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyImageView),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateShaderModule),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyShaderModule),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreatePipelineCache),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPipelineCache),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetPipelineCacheData),
+ MAKE_VULKAN_DEVICE_ENTRY(vkMergePipelineCaches),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateGraphicsPipelines),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateComputePipelines),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPipeline),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreatePipelineLayout),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyPipelineLayout),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateSampler),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroySampler),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorSetLayout),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorSetLayout),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkResetDescriptorPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkAllocateDescriptorSets),
+ MAKE_VULKAN_DEVICE_ENTRY(vkFreeDescriptorSets),
+ MAKE_VULKAN_DEVICE_ENTRY(vkUpdateDescriptorSets),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateFramebuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyFramebuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateRenderPass),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyRenderPass),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetRenderAreaGranularity),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateCommandPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyCommandPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkResetCommandPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkAllocateCommandBuffers),
+ MAKE_VULKAN_DEVICE_ENTRY(vkFreeCommandBuffers),
+ MAKE_VULKAN_DEVICE_ENTRY(vkBeginCommandBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkEndCommandBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkResetCommandBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindPipeline),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetViewport),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetScissor),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetLineWidth),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthBias),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetBlendConstants),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDepthBounds),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilCompareMask),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilWriteMask),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetStencilReference),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindDescriptorSets),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindIndexBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdBindVertexBuffers),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDraw),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexed),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndirect),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexedIndirect),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatch),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatchIndirect),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImage),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdBlitImage),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyBufferToImage),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyImageToBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdUpdateBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdFillBuffer),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdClearColorImage),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdClearDepthStencilImage),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdClearAttachments),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdResolveImage),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetEvent),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdResetEvent),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdWaitEvents),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdPipelineBarrier),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginQuery),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndQuery),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdResetQueryPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdWriteTimestamp),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdCopyQueryPoolResults),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdPushConstants),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdBeginRenderPass),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdNextSubpass),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdEndRenderPass),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdExecuteCommands),
+ MAKE_VULKAN_DEVICE_ENTRY(vkBindBufferMemory2),
+ MAKE_VULKAN_DEVICE_ENTRY(vkBindImageMemory2),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupPeerMemoryFeatures),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDeviceMask),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatchBase),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetImageMemoryRequirements2),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferMemoryRequirements2),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSparseMemoryRequirements2),
+ MAKE_VULKAN_DEVICE_ENTRY(vkTrimCommandPool),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceQueue2),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateSamplerYcbcrConversion),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroySamplerYcbcrConversion),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorUpdateTemplate),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorUpdateTemplate),
+ MAKE_VULKAN_DEVICE_ENTRY(vkUpdateDescriptorSetWithTemplate),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetDescriptorSetLayoutSupport),
+ // VK_KHR_descriptor_update_template
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateDescriptorUpdateTemplateKHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroyDescriptorUpdateTemplateKHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkUpdateDescriptorSetWithTemplateKHR),
+ // VK_KHR_device_group
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceGroupPeerMemoryFeaturesKHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdSetDeviceMaskKHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDispatchBaseKHR),
+ // VK_KHR_maintenance1
+ MAKE_VULKAN_DEVICE_ENTRY(vkTrimCommandPoolKHR),
+ // VK_KHR_sampler_ycbcr_conversion
+ MAKE_VULKAN_DEVICE_ENTRY(vkCreateSamplerYcbcrConversionKHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkDestroySamplerYcbcrConversionKHR),
+ // VK_KHR_bind_memory2
+ MAKE_VULKAN_DEVICE_ENTRY(vkBindBufferMemory2KHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkBindImageMemory2KHR),
+ // VK_KHR_get_memory_requirements2
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetImageMemoryRequirements2KHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferMemoryRequirements2KHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetImageSparseMemoryRequirements2KHR),
+ // VK_KHR_maintenance3
+ MAKE_VULKAN_INSTANCE_ENTRY(vkGetDescriptorSetLayoutSupportKHR),
+};
+#undef MAKE_VULKAN_DEVICE_ENTRY
+
+PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName)
+{
+ auto globalFunction = globalFunctionPointers.find(std::string(pName));
+ if(globalFunction != globalFunctionPointers.end())
{
- auto pFunc = func_ptrs.find(std::string(pName));
- return (pFunc == func_ptrs.end()) ? nullptr : pFunc->second;
+ return globalFunction->second;
}
+
+ if(instance != VK_NULL_HANDLE)
+ {
+ auto instanceFunction = instanceFunctionPointers.find(std::string(pName));
+ if(instanceFunction != instanceFunctionPointers.end())
+ {
+ return instanceFunction->second;
+ }
+
+ auto deviceFunction = deviceFunctionPointers.find(std::string(pName));
+ if(deviceFunction != deviceFunctionPointers.end())
+ {
+ return deviceFunction->second;
+ }
+ }
+
+ return nullptr;
+}
+
+PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName)
+{
+ auto deviceFunction = deviceFunctionPointers.find(std::string(pName));
+ if(deviceFunction != deviceFunctionPointers.end())
+ {
+ return deviceFunction->second;
+ }
+
+ return nullptr;
+}
+
}
diff --git a/src/Vulkan/VkGetProcAddress.h b/src/Vulkan/VkGetProcAddress.h
index c8bfc35..2d5ba5f 100644
--- a/src/Vulkan/VkGetProcAddress.h
+++ b/src/Vulkan/VkGetProcAddress.h
@@ -19,7 +19,8 @@
namespace vk
{
- PFN_vkVoidFunction GetProcAddr(const char* pName);
+PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName);
+PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName);
}
#endif // VK_UTILS_HPP_
\ No newline at end of file
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 21466db..57716be 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -45,7 +45,9 @@
{
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName)
{
- return vk::GetProcAddr(pName);
+ TRACE("(VkInstance instance = 0x%X, const char* pName = 0x%X)", instance, pName);
+
+ return vk::GetInstanceProcAddr(instance, pName);
}
VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance)
@@ -186,13 +188,15 @@
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* pName)
{
TRACE("(VkInstance instance = 0x%X, const char* pName = 0x%X)", instance, pName);
- return vk::GetProcAddr(pName);
+
+ return vk::GetInstanceProcAddr(instance, pName);
}
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* pName)
{
TRACE("(VkDevice device = 0x%X, const char* pName = 0x%X)", device, pName);
- return vk::GetProcAddr(pName);
+
+ return vk::GetDeviceProcAddr(device, pName);
}
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice)
diff --git a/tests/VulkanUnitTests/unittests.cpp b/tests/VulkanUnitTests/unittests.cpp
index cf4e8e9..dfde2f8 100644
--- a/tests/VulkanUnitTests/unittests.cpp
+++ b/tests/VulkanUnitTests/unittests.cpp
@@ -58,218 +58,21 @@
vk_icdGetInstanceProcAddrPtr vk_icdGetInstanceProcAddr = nullptr;
};
-TEST_F(SwiftShaderVulkanTest, API_Check)
+TEST_F(SwiftShaderVulkanTest, ICD_Check)
{
if(vk_icdGetInstanceProcAddr)
{
- #define API_CHECK(function) auto function = vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, #function); \
- EXPECT_NE(function, nullptr);
+ auto createInstance = vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance");
+ EXPECT_NE(createInstance, nullptr);
- API_CHECK(vkCreateInstance);
- API_CHECK(vkDestroyInstance);
- API_CHECK(vkEnumeratePhysicalDevices);
- API_CHECK(vkGetPhysicalDeviceFeatures);
- API_CHECK(vkGetPhysicalDeviceFormatProperties);
- API_CHECK(vkGetPhysicalDeviceImageFormatProperties);
- API_CHECK(vkGetPhysicalDeviceProperties);
- API_CHECK(vkGetPhysicalDeviceQueueFamilyProperties);
- API_CHECK(vkGetPhysicalDeviceMemoryProperties);
- API_CHECK(vkGetInstanceProcAddr);
- API_CHECK(vkGetDeviceProcAddr);
- API_CHECK(vkCreateDevice);
- API_CHECK(vkDestroyDevice);
- API_CHECK(vkEnumerateInstanceExtensionProperties);
- API_CHECK(vkEnumerateDeviceExtensionProperties);
- API_CHECK(vkEnumerateInstanceLayerProperties);
- API_CHECK(vkEnumerateDeviceLayerProperties);
- API_CHECK(vkGetDeviceQueue);
- API_CHECK(vkQueueSubmit);
- API_CHECK(vkQueueWaitIdle);
- API_CHECK(vkDeviceWaitIdle);
- API_CHECK(vkAllocateMemory);
- API_CHECK(vkFreeMemory);
- API_CHECK(vkMapMemory);
- API_CHECK(vkUnmapMemory);
- API_CHECK(vkFlushMappedMemoryRanges);
- API_CHECK(vkInvalidateMappedMemoryRanges);
- API_CHECK(vkGetDeviceMemoryCommitment);
- API_CHECK(vkBindBufferMemory);
- API_CHECK(vkBindImageMemory);
- API_CHECK(vkGetBufferMemoryRequirements);
- API_CHECK(vkGetImageMemoryRequirements);
- API_CHECK(vkGetImageSparseMemoryRequirements);
- API_CHECK(vkGetPhysicalDeviceSparseImageFormatProperties);
- API_CHECK(vkQueueBindSparse);
- API_CHECK(vkCreateFence);
- API_CHECK(vkDestroyFence);
- API_CHECK(vkResetFences);
- API_CHECK(vkGetFenceStatus);
- API_CHECK(vkWaitForFences);
- API_CHECK(vkCreateSemaphore);
- API_CHECK(vkDestroySemaphore);
- API_CHECK(vkCreateEvent);
- API_CHECK(vkDestroyEvent);
- API_CHECK(vkGetEventStatus);
- API_CHECK(vkSetEvent);
- API_CHECK(vkResetEvent);
- API_CHECK(vkCreateQueryPool);
- API_CHECK(vkDestroyQueryPool);
- API_CHECK(vkGetQueryPoolResults);
- API_CHECK(vkCreateBuffer);
- API_CHECK(vkDestroyBuffer);
- API_CHECK(vkCreateBufferView);
- API_CHECK(vkDestroyBufferView);
- API_CHECK(vkCreateImage);
- API_CHECK(vkDestroyImage);
- API_CHECK(vkGetImageSubresourceLayout);
- API_CHECK(vkCreateImageView);
- API_CHECK(vkDestroyImageView);
- API_CHECK(vkCreateShaderModule);
- API_CHECK(vkDestroyShaderModule);
- API_CHECK(vkCreatePipelineCache);
- API_CHECK(vkDestroyPipelineCache);
- API_CHECK(vkGetPipelineCacheData);
- API_CHECK(vkMergePipelineCaches);
- API_CHECK(vkCreateGraphicsPipelines);
- API_CHECK(vkCreateComputePipelines);
- API_CHECK(vkDestroyPipeline);
- API_CHECK(vkCreatePipelineLayout);
- API_CHECK(vkDestroyPipelineLayout);
- API_CHECK(vkCreateSampler);
- API_CHECK(vkDestroySampler);
- API_CHECK(vkCreateDescriptorSetLayout);
- API_CHECK(vkDestroyDescriptorSetLayout);
- API_CHECK(vkCreateDescriptorPool);
- API_CHECK(vkDestroyDescriptorPool);
- API_CHECK(vkResetDescriptorPool);
- API_CHECK(vkAllocateDescriptorSets);
- API_CHECK(vkFreeDescriptorSets);
- API_CHECK(vkUpdateDescriptorSets);
- API_CHECK(vkCreateFramebuffer);
- API_CHECK(vkDestroyFramebuffer);
- API_CHECK(vkCreateRenderPass);
- API_CHECK(vkDestroyRenderPass);
- API_CHECK(vkGetRenderAreaGranularity);
- API_CHECK(vkCreateCommandPool);
- API_CHECK(vkDestroyCommandPool);
- API_CHECK(vkResetCommandPool);
- API_CHECK(vkAllocateCommandBuffers);
- API_CHECK(vkFreeCommandBuffers);
- API_CHECK(vkBeginCommandBuffer);
- API_CHECK(vkEndCommandBuffer);
- API_CHECK(vkResetCommandBuffer);
- API_CHECK(vkCmdBindPipeline);
- API_CHECK(vkCmdSetViewport);
- API_CHECK(vkCmdSetScissor);
- API_CHECK(vkCmdSetLineWidth);
- API_CHECK(vkCmdSetDepthBias);
- API_CHECK(vkCmdSetBlendConstants);
- API_CHECK(vkCmdSetDepthBounds);
- API_CHECK(vkCmdSetStencilCompareMask);
- API_CHECK(vkCmdSetStencilWriteMask);
- API_CHECK(vkCmdSetStencilReference);
- API_CHECK(vkCmdBindDescriptorSets);
- API_CHECK(vkCmdBindIndexBuffer);
- API_CHECK(vkCmdBindVertexBuffers);
- API_CHECK(vkCmdDraw);
- API_CHECK(vkCmdDrawIndexed);
- API_CHECK(vkCmdDrawIndirect);
- API_CHECK(vkCmdDrawIndexedIndirect);
- API_CHECK(vkCmdDispatch);
- API_CHECK(vkCmdDispatchIndirect);
- API_CHECK(vkCmdCopyBuffer);
- API_CHECK(vkCmdCopyImage);
- API_CHECK(vkCmdBlitImage);
- API_CHECK(vkCmdCopyBufferToImage);
- API_CHECK(vkCmdCopyImageToBuffer);
- API_CHECK(vkCmdUpdateBuffer);
- API_CHECK(vkCmdFillBuffer);
- API_CHECK(vkCmdClearColorImage);
- API_CHECK(vkCmdClearDepthStencilImage);
- API_CHECK(vkCmdClearAttachments);
- API_CHECK(vkCmdResolveImage);
- API_CHECK(vkCmdSetEvent);
- API_CHECK(vkCmdResetEvent);
- API_CHECK(vkCmdWaitEvents);
- API_CHECK(vkCmdPipelineBarrier);
- API_CHECK(vkCmdBeginQuery);
- API_CHECK(vkCmdEndQuery);
- API_CHECK(vkCmdResetQueryPool);
- API_CHECK(vkCmdWriteTimestamp);
- API_CHECK(vkCmdCopyQueryPoolResults);
- API_CHECK(vkCmdPushConstants);
- API_CHECK(vkCmdBeginRenderPass);
- API_CHECK(vkCmdNextSubpass);
- API_CHECK(vkCmdEndRenderPass);
- API_CHECK(vkCmdExecuteCommands);
- API_CHECK(vkEnumerateInstanceVersion);
- API_CHECK(vkBindBufferMemory2);
- API_CHECK(vkBindImageMemory2);
- API_CHECK(vkGetDeviceGroupPeerMemoryFeatures);
- API_CHECK(vkCmdSetDeviceMask);
- API_CHECK(vkCmdDispatchBase);
- API_CHECK(vkEnumeratePhysicalDeviceGroups);
- API_CHECK(vkGetImageMemoryRequirements2);
- API_CHECK(vkGetBufferMemoryRequirements2);
- API_CHECK(vkGetImageSparseMemoryRequirements2);
- API_CHECK(vkGetPhysicalDeviceFeatures2);
- API_CHECK(vkGetPhysicalDeviceProperties2);
- API_CHECK(vkGetPhysicalDeviceFormatProperties2);
- API_CHECK(vkGetPhysicalDeviceImageFormatProperties2);
- API_CHECK(vkGetPhysicalDeviceQueueFamilyProperties2);
- API_CHECK(vkGetPhysicalDeviceMemoryProperties2);
- API_CHECK(vkGetPhysicalDeviceSparseImageFormatProperties2);
- API_CHECK(vkTrimCommandPool);
- API_CHECK(vkGetDeviceQueue2);
- API_CHECK(vkCreateSamplerYcbcrConversion);
- API_CHECK(vkDestroySamplerYcbcrConversion);
- API_CHECK(vkCreateDescriptorUpdateTemplate);
- API_CHECK(vkDestroyDescriptorUpdateTemplate);
- API_CHECK(vkUpdateDescriptorSetWithTemplate);
- API_CHECK(vkGetPhysicalDeviceExternalBufferProperties);
- API_CHECK(vkGetPhysicalDeviceExternalFenceProperties);
- API_CHECK(vkGetPhysicalDeviceExternalSemaphoreProperties);
- API_CHECK(vkGetDescriptorSetLayoutSupport);
- // VK_KHR_bind_memory2
- API_CHECK(vkBindBufferMemory2KHR);
- API_CHECK(vkBindImageMemory2KHR);
- // VK_KHR_descriptor_update_template
- API_CHECK(vkCreateDescriptorUpdateTemplateKHR);
- API_CHECK(vkDestroyDescriptorUpdateTemplateKHR);
- API_CHECK(vkUpdateDescriptorSetWithTemplateKHR);
- // VK_KHR_device_group
- API_CHECK(vkGetDeviceGroupPeerMemoryFeaturesKHR);
- API_CHECK(vkCmdSetDeviceMaskKHR);
- API_CHECK(vkCmdDispatchBaseKHR);
- // VK_KHR_device_group_creation
- API_CHECK(vkEnumeratePhysicalDeviceGroupsKHR);
- // VK_KHR_external_fence_capabilities
- API_CHECK(vkGetPhysicalDeviceExternalFencePropertiesKHR);
- // VK_KHR_external_memory_capabilities
- API_CHECK(vkGetPhysicalDeviceExternalBufferPropertiesKHR);
- // VK_KHR_external_semaphore_capabilities
- API_CHECK(vkGetPhysicalDeviceExternalSemaphorePropertiesKHR);
- // VK_KHR_get_memory_requirements2
- API_CHECK(vkGetImageMemoryRequirements2KHR);
- API_CHECK(vkGetBufferMemoryRequirements2KHR);
- API_CHECK(vkGetImageSparseMemoryRequirements2KHR);
- // VK_KHR_get_physical_device_properties2
- API_CHECK(vkGetPhysicalDeviceFeatures2KHR);
- API_CHECK(vkGetPhysicalDeviceProperties2KHR);
- API_CHECK(vkGetPhysicalDeviceFormatProperties2KHR);
- API_CHECK(vkGetPhysicalDeviceImageFormatProperties2KHR);
- API_CHECK(vkGetPhysicalDeviceQueueFamilyProperties2KHR);
- API_CHECK(vkGetPhysicalDeviceMemoryProperties2KHR);
- API_CHECK(vkGetPhysicalDeviceSparseImageFormatProperties2KHR);
- // VK_KHR_maintenance1
- API_CHECK(vkTrimCommandPoolKHR);
- // VK_KHR_maintenance3
- API_CHECK(vkGetDescriptorSetLayoutSupportKHR);
- // VK_KHR_sampler_ycbcr_conversion
- API_CHECK(vkCreateSamplerYcbcrConversionKHR);
- API_CHECK(vkDestroySamplerYcbcrConversionKHR);
+ auto enumerateInstanceExtensionProperties = vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceExtensionProperties");
+ EXPECT_NE(enumerateInstanceExtensionProperties, nullptr);
- #undef API_CHECK
+ auto enumerateInstanceLayerProperties = vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceLayerProperties");
+ EXPECT_NE(enumerateInstanceLayerProperties, nullptr);
+
+ auto enumerateInstanceVersion = vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceVersion");
+ EXPECT_NE(enumerateInstanceVersion, nullptr);
auto bad_function = vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "bad_function");
EXPECT_EQ(bad_function, nullptr);
@@ -278,6 +81,10 @@
TEST_F(SwiftShaderVulkanTest, Version)
{
+ uint32_t apiVersion = 0;
+ VkResult result = vkEnumerateInstanceVersion(&apiVersion);
+ EXPECT_EQ(apiVersion, VK_API_VERSION_1_1);
+
const VkInstanceCreateInfo createInfo =
{
VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType
@@ -289,8 +96,8 @@
0, // enabledExtensionCount
nullptr, // ppEnabledExtensionNames
};
- VkInstance instance;
- VkResult result = vkCreateInstance(&createInfo, nullptr, &instance);
+ VkInstance instance = VK_NULL_HANDLE;
+ result = vkCreateInstance(&createInfo, nullptr, &instance);
EXPECT_EQ(result, VK_SUCCESS);
uint32_t pPhysicalDeviceCount = 0;