anv/radv: Resolving 'GetInstanceProcAddr' should not require a valid instance
authorEduardo Lima Mitev <elima@igalia.com>
Sat, 21 Mar 2020 19:18:56 +0000 (20:18 +0100)
committerMarge Bot <eric+marge@anholt.net>
Fri, 24 Apr 2020 09:09:14 +0000 (09:09 +0000)
Since vk_icdGetInstanceProcAddr() is wired through
vkGetInstanceProcAddr() in both drivers, we lost the ability for
'GetInstanceProcAddr' to resolve itself prior to having a valid
instance.

An upcoming spec change will fix that and allow
vkGetInstanceProcAddr() to resolve itself passing NULL as
instance. See https://gitlab.khronos.org/vulkan/vulkan/issues/2057
for details.

This patch implements the change in both radv and anvil.

CTS changes have already landed:
https://gitlab.khronos.org/Tracker/vk-gl-cts/issues/2278

vulkan-loader changes have also landed:
https://gitlab.khronos.org/Tracker/vk-gl-cts/issues/2278

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4273>

src/amd/vulkan/radv_device.c
src/intel/vulkan/anv_device.c

index 730d1a67747e1ab0508ef7fb67dab43782a80fc0..bed7062ec1d1dd49dd6916c1172682c611f79624 100644 (file)
@@ -4948,6 +4948,11 @@ PFN_vkVoidFunction radv_GetInstanceProcAddr(
        LOOKUP_RADV_ENTRYPOINT(EnumerateInstanceVersion);
        LOOKUP_RADV_ENTRYPOINT(CreateInstance);
 
+       /* GetInstanceProcAddr() can also be called with a NULL instance.
+        * See https://gitlab.khronos.org/vulkan/vulkan/issues/2057
+        */
+       LOOKUP_RADV_ENTRYPOINT(GetInstanceProcAddr);
+
 #undef LOOKUP_RADV_ENTRYPOINT
 
        if (instance == NULL)
index 1462b76157600e899229b7f0e72b9f46b828ce35..caa622d5f4e7bd58bae5b35b23ee08b27fb1130e 100644 (file)
@@ -2204,6 +2204,11 @@ PFN_vkVoidFunction anv_GetInstanceProcAddr(
    LOOKUP_ANV_ENTRYPOINT(EnumerateInstanceVersion);
    LOOKUP_ANV_ENTRYPOINT(CreateInstance);
 
+   /* GetInstanceProcAddr() can also be called with a NULL instance.
+    * See https://gitlab.khronos.org/vulkan/vulkan/issues/2057
+    */
+   LOOKUP_ANV_ENTRYPOINT(GetInstanceProcAddr);
+
 #undef LOOKUP_ANV_ENTRYPOINT
 
    if (instance == NULL)