[Mesa-dev] [PATCH 3/3] anv: Support loader interface version 2

Chad Versace chadversary at chromium.org
Wed Jan 11 03:17:29 UTC 2017


Loader interface v2 differs from v1 in that the first ICD entrypoint
called by the loader is vk_icdNegotiateLoaderICDInterfaceVersion(), not
vk_icdGetInstanceProcAddr(). The ICD must statically expose this
entrypoint.
---
 src/intel/vulkan/anv_device.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 219c611408..89e427f342 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -2034,3 +2034,46 @@ void anv_DestroyFramebuffer(
 
    vk_free2(&device->alloc, pAllocator, fb);
 }
+
+/* Suppress warnings because vk_icd.h does not declare this function.
+ * Clang supports this pragma too.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmissing-prototypes"
+PUBLIC VKAPI_ATTR VkResult VKAPI_CALL
+vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pSupportedVersion)
+{
+   /* For the full details on loader interface versioning, see
+    * <https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/loader/LoaderAndLayerInterface.md>.
+    * What follows is a condensed summary, to help you navigate the large and
+    * confusing official doc.
+    *
+    *   - Loader interface v0 is incompatible with later versions. We don't
+    *     support it.
+    *
+    *   - In loader interface v1:
+    *       - The first ICD entrypoint called by the loader is
+    *         vk_icdGetInstanceProcAddr(). The ICD must statically expose this
+    *         entrypoint.
+    *       - The ICD must statically expose no other Vulkan symbol unless it is
+    *         linked with -Bsymbolic.
+    *       - Each dispatchable Vulkan handle created by the ICD must be
+    *         a pointer to a struct whose first member is VK_LOADER_DATA. The
+    *         ICD must initialize VK_LOADER_DATA.loadMagic to ICD_LOADER_MAGIC.
+    *       - The loader implements vkCreate{PLATFORM}SurfaceKHR() and
+    *         vkDestroySurfaceKHR(). The ICD must be capable of working with
+    *         such loader-managed surfaces.
+    *
+    *    - Loader interface v2 differs from v1 in:
+    *       - The first ICD entrypoint called by the loader is
+    *         vk_icdNegotiateLoaderICDInterfaceVersion(). The ICD must
+    *         statically expose this entrypoint.
+    *
+    *    - Loader interface v3 differs from v2 in:
+    *        - The ICD must implement vkCreate{PLATFORM}Surface() and
+    *          vkDestroySurface() because the loader no longer does so.
+    */
+   *pSupportedVersion = 2;
+   return VK_SUCCESS;
+}
+#pragma GCC diagnostic pop
-- 
2.11.0



More information about the mesa-dev mailing list