Document vk_icdGetInstanceProcAddr querying device functions
authorCharles Giessen <charles@lunarg.com>
Wed, 12 Oct 2022 19:57:22 +0000 (13:57 -0600)
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>
Wed, 26 Oct 2022 03:04:34 +0000 (21:04 -0600)
vk_icdGetInstanceProcAddr has similar semantics to vkGetInstanceProcAddr.
It was created to prevent dynamic linker issues. It stated that it should support
global & instance level function querying. But this differs from the Vulkan spec
which states that vkGetInstanceProcAddr should be able to query all functions.
This creates confusion about what takes precendence, the spec or the loader's docs.

This commit makes it explicit that it should have the same semanics what the spec
says.

docs/LoaderDriverInterface.md

index 40430fb..ab20941 100644 (file)
@@ -35,7 +35,7 @@
   - [Using Pre-Production ICDs or Software Drivers](#using-pre-production-icds-or-software-drivers)
   - [Driver Discovery on Android](#driver-discovery-on-android)
 - [Driver Manifest File Format](#driver-manifest-file-format)
-    - [Driver Manifest File Versions](#driver-manifest-file-versions)
+  - [Driver Manifest File Versions](#driver-manifest-file-versions)
     - [Driver Manifest File Version 1.0.0](#driver-manifest-file-version-100)
     - [Driver Manifest File Version 1.0.1](#driver-manifest-file-version-101)
 - [Driver Vulkan Entry Point Discovery](#driver-vulkan-entry-point-discovery)
@@ -619,8 +619,12 @@ application. This field is optional.
 
 The Vulkan symbols exported by a driver must not clash with the loader's
 exported Vulkan symbols.
-Because of this, all drivers must export the following function that is
-used for discovery of driver Vulkan entry-points.
+Therefore, `vk_icdGetInstanceProcAddr` was introduced to allow the loader
+to perform the the same behavior as `vkGetInstanceProcAddr` but on a driver
+basis.
+As such, it behaves the same as `vkGetInstanceProcAddr`.
+All drivers must export this function which is used for discovery of driver
+Vulkan entry-points.
 This entry-point is not a part of the Vulkan API itself, only a private
 interface between the loader and drivers for version 1 and higher
 interfaces.
@@ -632,15 +636,11 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL
       const char* pName);
 ```
 
-This function has very similar semantics to `vkGetInstanceProcAddr`.
-`vk_icdGetInstanceProcAddr` returns valid function pointers for all the
-global-level and instance-level Vulkan functions, and also for
-`vkGetDeviceProcAddr`.
+The driver must support querying global-level entry points by calling
+`vk_icdGetInstanceProcAddr` with a NULL `VkInstance` parameter.
 Global-level functions are those which contain no dispatchable object as the
 first parameter, such as `vkCreateInstance` and
 `vkEnumerateInstanceExtensionProperties`.
-The driver must support querying global-level entry points by calling
-`vk_icdGetInstanceProcAddr` with a NULL `VkInstance` parameter.
 Instance-level functions are those that have either `VkInstance`, or
 `VkPhysicalDevice` as the first parameter dispatchable object.
 Both core entry points and any instance extension entry points the