From: Jason Ekstrand Date: Wed, 17 Jan 2018 00:14:25 +0000 (-0800) Subject: anv: Properly NULL for GetInstanceProcAddr with a null instance X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a372b9247ddcaa43d13cf8161d2026c239d0bf57;p=mesa.git anv: Properly NULL for GetInstanceProcAddr with a null instance Reviewed-by: Samuel Iglesias Gonsálvez --- diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 33b2a52a51c..c3a8fbbb4e6 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -1063,9 +1063,31 @@ void anv_GetPhysicalDeviceMemoryProperties2KHR( } PFN_vkVoidFunction anv_GetInstanceProcAddr( - VkInstance instance, + VkInstance _instance, const char* pName) { + ANV_FROM_HANDLE(anv_instance, instance, _instance); + + /* The Vulkan 1.0 spec for vkGetInstanceProcAddr has a table of exactly + * when we have to return valid function pointers, NULL, or it's left + * undefined. See the table for exact details. + */ + if (pName == NULL) + return NULL; + +#define LOOKUP_ANV_ENTRYPOINT(entrypoint) \ + if (strcmp(pName, "vk" #entrypoint) == 0) \ + return (PFN_vkVoidFunction)anv_##entrypoint + + LOOKUP_ANV_ENTRYPOINT(EnumerateInstanceExtensionProperties); + LOOKUP_ANV_ENTRYPOINT(EnumerateInstanceLayerProperties); + LOOKUP_ANV_ENTRYPOINT(CreateInstance); + +#undef LOOKUP_ANV_ENTRYPOINT + + if (instance == NULL) + return NULL; + return anv_lookup_entrypoint(NULL, pName); }