[Mesa-dev] [PATCH 4/6] anv: do not export the Vulkan API

Emil Velikov emil.l.velikov at gmail.com
Wed Jul 27 13:02:53 UTC 2016

From: Emil Velikov <emil.velikov at collabora.com>

With version 1 of the Loader interface there is an internal/private symbol
(vk_icdGetInstanceProcAddr) which is used to retrieve all the API from the
Vulkan entrypoints from the ICD. Implying that exposing the Vulkan API is not

Version 2 goes a step further explicitly forbiding the ICD from exposing Vulkan
symbols (and adding a negotiation API)

As a reference:
 - Nvidia 367.35
Missing negotiation API - version 1.
Exposes only vk_icdGetInstanceProcAddr.

 - AMD
Have negotiation API - version 2,
Exposes vk_icdGetInstanceProcAddr.
Exposes a couple of Vulkan entry points - seems to be in violation with the spec.

Cc: "12.0" <mesa-stable at lists.freedesktop.org>
Cc: Jason Ekstrand <jason at jlekstrand.net>
Cc: Christian K├Ânig <christian.koenig at amd.com>
Signed-off-by: Emil Velikov <emil.velikov at collabora.com>

Christian, can you ping/check with the relevant team if I'm missing something
or the driver indeed goes against the spec ?

Apart from the small reduction in binary size, we get rid of the ifuncs. The
latter was never checked at configure time, so things could have gone very
badly on platforms which lack support.
 src/intel/vulkan/anv_entrypoints_gen.py | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/src/intel/vulkan/anv_entrypoints_gen.py b/src/intel/vulkan/anv_entrypoints_gen.py
index a4922c2..6904d37 100644
--- a/src/intel/vulkan/anv_entrypoints_gen.py
+++ b/src/intel/vulkan/anv_entrypoints_gen.py
@@ -291,17 +291,6 @@ anv_resolve_entrypoint(uint32_t index)
-# Now output ifuncs and their resolve helpers for all entry points. The
-# resolve helper calls resolve_entrypoint() with the entry point index, which
-# lets the resolver look it up in the table.
-for type, name, args, num, h in entrypoints:
-    print_guard_start(name)
-    print "static void *resolve_%s(void) { return anv_resolve_entrypoint(%d); }" % (name, num)
-    print "%s vk%s%s\n   __attribute__ ((ifunc (\"resolve_%s\"), visibility (\"default\")));\n" % (type, name, args, name)
-    print_guard_end(name)
 # Now generate the hash table used for entry point look up.  This is a
 # uint16_t table of entry point indices. We use 0xffff to indicate an entry
 # in the hash table is empty.

More information about the mesa-dev mailing list