From e0e9c56f2bb4f9bc8a560ada38df191728ef5d3d Mon Sep 17 00:00:00 2001 From: Mark Young Date: Fri, 16 Sep 2016 10:18:42 -0600 Subject: loader: More changes for gh181 With Piers' fix, another path was broke because we still needed to intercept the call before it went to the ICD. Now, with his change and this change, all paths work. Also, clean up some code based on comments from Ian and Courtney reviews. Finally, update docs to indicate behavior of new loader 3 interface with ICDs. Change-Id: I2d3f962baffb21c1edeb93b132ffad40f298c8e7 --- loader/LoaderAndLayerInterface.md | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'loader/LoaderAndLayerInterface.md') diff --git a/loader/LoaderAndLayerInterface.md b/loader/LoaderAndLayerInterface.md index 22d5520f..95c11f15 100644 --- a/loader/LoaderAndLayerInterface.md +++ b/loader/LoaderAndLayerInterface.md @@ -592,7 +592,7 @@ from the most recent interface version. ##### Version Negotiation Between Loader and ICDs -All ICDs (supporting interface version 2 or higher) must export the following +All ICDs (supporting interface version 2 or higher) must export the following function that is used for determination of the interface version that will be used. This entry point is not a part of the Vulkan API itself, only a private interface between the loader and ICDs. @@ -633,11 +633,31 @@ instead of VK_SUCCESS then the loader will treat the ICD as incompatible and will not load it for use. In this case the application will not see the ICDs vkPhysicalDevice during enumeration. +##### Loader Version 3 Interface Changes + +The primary change occuring in version 3 of the loader/ICD interface is to allow an ICD to +handle Creation/Destruction of their own KHR_surfaces. Up until this point, the loader created +a surface object that was used by all ICDs. However, some ICDs may want to provide their +own surface handles. If an ICD chooses to enable this support, they must export support for +version 3 of the Loader/ICD interface as well as any Vulkan command that uses a KHR_surface handle, +such as: +- vkCreateXXXSurfaceKHR (where XXX is the platform specific identifier [i.e.CreateWin32SurfaceKHR for Windows]) +- vkDestroySurfaceKHR +- vkCreateSwapchainKHR +- vkGetPhysicalDeviceSurfaceSupportKHR +- vkGetPhysicalDeviceSurfaceCapabilitiesKHR +- vkGetPhysicalDeviceSurfaceFormatsKHR +- vkGetPhysicalDeviceSurfacePresentModesKHR + +An ICD can still choose to not take advantage of this functionality by simply not exposing the +above the vkCreateXXXSurfaceKHR and vkDestroySurfaceKHR commands. + ##### Loader Version 2 Interface Requirements -Version 2 interface has requirements in three areas: 1) ICD Vulkan entry point discovery, -2) KHR_surface related requirements in the WSI extensions, 3) Vulkan dispatchable object -creation requirements. +Version 2 interface has requirements in three areas: + 1. ICD Vulkan entry point discovery, + 2. KHR_surface related requirements in the WSI extensions, + 3. Vulkan dispatchable object creation requirements. ###### ICD Vulkan entry point discovery All ICDs must export the following function that is used for discovery of ICD Vulkan entry points. -- cgit v1.2.3