Commit dc85364a by Nicolas Capens Committed by Nicolas Capens

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/22688Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent 318d5e03
......@@ -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 =
#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())
{
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
return globalFunction->second;
}
PFN_vkVoidFunction GetProcAddr(const char* pName)
if(instance != VK_NULL_HANDLE)
{
auto pFunc = func_ptrs.find(std::string(pName));
return (pFunc == func_ptrs.end()) ? nullptr : pFunc->second;
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;
}
}
......@@ -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
......@@ -45,7 +45,9 @@ extern "C"
{
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 void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice
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)
......
......@@ -58,218 +58,21 @@ protected:
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, API_Check)
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 @@ TEST_F(SwiftShaderVulkanTest, Version)
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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment