Home | History | Annotate | Download | only in loader

Lines Matching full:vulkan

0 # Vulkan Loader Specification and Architecture Overview
14 Application, Vulkan driver and Vulkan layer developers.
35 Vulkan is a layered architecture. Layers can hook (intercept) Vulkan commands to
36 achieve various functionality that a Vulkan driver (aka ICD) or loader doesn?t
37 support. Functionality such as Vulkan API tracing and debugging, API usage
39 candidates for Vulkan layers. Layers are implemented as libraries that are
42 Not only is Vulkan a layered architecture but it also supports multiple GPUs
43 and their drivers. Vulkan commands called by an application may wind up calling
45 to managing the proper dispatching of Vulkan commands to the appropriate set of
46 layers and ICDs. The Vulkan object model allows the loader to insert layers
47 into a call chain so the layers can process Vulkan commands prior to the
50 Vulkan uses an object model to control the scope of a particular action /
51 operation. The object to be acted on is always the first parameter of a Vulkan
52 call and is a dispatchable object (see Vulkan specification section 2.2 Object
55 This dispatch table contains pointers to the Vulkan functions appropriate to
57 Instance and Device. I.e. a VkInstance object?s dispatch table will point to Vulkan
69 the specified layers to create a call chain for each Vulkan function and each
90 instance) can skip intercepting any given Vulkan entry point.
100 - Dynamic Vulkan command lookup & application dispatch table.
102 - Loader library filenames for linking to different Vulkan ABI versions.
110 The loader library on Windows, Linux and Android will export all core Vulkan
112 make it simpler to get started with Vulkan development. When an application
113 links directly to the loader library in this way, the Vulkan calls are simple
121 provides the fastest mechanism for the application to call Vulkan functions. An
129 The Vulkan loader library will be distributed in various ways including Vulkan
132 Vulkan loader library is specified so an app can link to the correct Vulkan ABI
133 library version. Vulkan versioning is such that ABI backwards compatibility is
137 given system. The Vulkan loader library file name is ?vulkan-<ABI
138 version>.dll?. For example, for Vulkan version 1.X on Windows the library
139 filename is vulkan-1.dll. And this library file can typically be found in the
144 Linux an application wanting to link to the latest Vulkan ABI version would
145 just link to the name vulkan (libvulkan.so). A specific Vulkan ABI version can
148 Applications desiring Vulkan functionality beyond what the core API offers may
150 Vulkan commands, but may offer extensions that do. A common use of layers is
209 ICD. Extensions can modify the behavior of the Vulkan API and need to be
218 or the Vulkan platform implementation. If pLayerName is NULL, extensions from
219 Vulkan implementation components (including loader, implicit layers, and ICDs)
251 Vulkan Installable Client Driver interface with the loader
256 Vulkan allows multiple drivers each with one or more devices (represented by a
257 Vulkan VkPhysicalDevice object) to be used collectively. The loader is
258 responsible for discovering available Vulkan ICDs on the system. Given a list
269 In order to find properly-installed ICDs, the Vulkan loader will scan the
272 HKEY\_LOCAL\_MACHINE\\SOFTWARE\\Khronos\\Vulkan\\Drivers
277 The Vulkan loader will open each manifest file to obtain the name or pathname
306 The ?api\_version? specifies the major.minor.patch version number of the Vulkan
316 [HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\Drivers\]
375 In order to find properly-installed ICDs, the Vulkan loader will scan the files
378 /usr/share/vulkan/icd.d
379 /etc/vulkan/icd.d
380 $HOME/.local/share/vulkan/icd.d
388 The Vulkan loader will open each manifest file found to obtain the name or
405 create Vulkan-specific system directories (e.g. ".../vulkan/icd"), but is not
418 The ?api\_version? specifies the major.minor.patch version number of the Vulkan
421 The "/usr/share/vulkan/icd.d" directory is for ICDs that are installed from
422 Linux-distribution-provided packages. The "/etc/vulkan/icd.d" directory is for
428 if the "/usr/share/vulkan/icd.d" directory contain the following files, with
457 - A filename (e.g. "libvkicd.json") in the "/usr/share/vulkan/icd.d", "/etc/vulkan/icd.d" "$HOME/.local/share/vulkan/icd.d" directories
483 of "vulkan". Due to security policies in Android none of this can be modified
490 Generally, for all Vulkan commands issued by an application, the loader can be
494 covering two areas: 1) Obtaining ICD Vulkan entry points; 2) Specifying
495 requirements for a given Vulkan command(s) over and above the Vulkan
508 valid function pointers for all the global level and instance level Vulkan
517 vk\_icdGetInstanceProcAddr. Future Vulkan instance extensions may define and
523 - All other Vulkan entry points must either NOT be exported from the ICD
524 library or else NOT use the official Vulkan function names if they are
527 application prior to when the Vulkan loader library is loaded by the
528 application. In other words, the ICD library exported Vulkan symbols must not
529 clash with the loader's exported Vulkan symbols.
531 - Beware of interposing by dynamic OS library loaders if the official Vulkan
538 pointers for all the Vulkan API entry points.
544 ##### Loader specific requirements for Vulkan commands
546 Normally, ICDs handle object creation and destruction for various Vulkan
557 defined in include/vulkan/vk\_icd.h.
568 within Vulkan dispatchable objects, which include VkInstance, VkPhysicalDevice,
586 dispatchable objects, as follows (see include/vulkan/vk\_icd.h):
629 Vulkan layer interface with the loader
638 In order to find properly-installed layers, the Vulkan loader will use a
648 In order to find properly-installed layers, the Vulkan loader will scan the
651 HKEY\_LOCAL\_MACHINE\\SOFTWARE\\Khronos\\Vulkan\\ExplicitLayers
653 HKEY\_LOCAL\_MACHINE\\SOFTWARE\\Khronos\\Vulkan\\ImplicitLayers
672 The Vulkan loader will open each info file to obtain information about the
700 - (required) extension "name" - Vulkan registered name
731 application can set this environment variable (before calling Vulkan functions)
807 In order to find properly-installed layers, the Vulkan loader will use a
816 The Vulkan loader will scan the files in the following Linux directories:
818 /usr/share/vulkan/explicit\_layer.d
819 /usr/share/vulkan/implicit\_layer.d
820 /etc/vulkan/explicit\_layer.d
821 /etc/vulkan/implicit\_layer.d
822 $HOME/.local/share/vulkan/explicit\_layer.d
823 $HOME/.local/share/vulkan/implicit\_layer.d
839 The "/usr/share/vulkan/\*\_layer.d" directories are for layers that are
841 "/etc/vulkan/\*\_layer.d" directories are for layers that are installed from
869 - (required) extension "name" - Vulkan registered name
898 application can set this environment variable (before calling Vulkan functions)
948 Vulkan-specific system directories (e.g. ".../vulkan/layers"), but is not
978 enables the layers at vkCreateInstance and vkCreateDevice as any Vulkan
981 layers located in /data/local/vulkan/debug.
993 Call chains are the links of calls for a given Vulkan command from layer module
999 CreateDevice. A layer can intercept Vulkan instance commands, device commands
1005 Normally, when a layer intercepts a given Vulkan command, it will call down the
1011 instance chain, a dispatch mechanism is required for all Vulkan commands a
1012 layer intercepts. For Vulkan commands that are not intercepted by a layer, or
1013 if the layer chooses to terminate a given Vulkan command by not calling down
1014 the chain, then no dispatch mechanism is needed for that particular Vulkan
1015 command. Only for those Vulkan commands, which may be a subset of all Vulkan
1018 extension Vulkan commands to the first entity in the chain.
1020 Instance level Vulkan commands are those that have the dispatchable objects
1024 Device level Vulkan commands are those that use VkDevice, VkQueue or
1035 - A layer intercepting instance level Vulkan commands (aka an instance level
1042 - A layer intercepting device level Vulkan commands (aka a device level layer)
1050 the local entry points for all instance level Vulkan commands it intercepts. At
1053 the entry points for all device level Vulkan commands it intercepts. At a
1066 - Layers intercept a Vulkan command by defining a C/C++ function with signature
1067 identical to the Vulkan API for that command.
1070 - For any Vulkan command a layer intercepts which has a non-void return value,
1073 Vulkan command in the next entity. Undefined results will occur if a layer
1076 chain for Vulkan commands that they do not intercept.
1077 - Layer intercept functions may insert extra calls to Vulkan commands in
1091 (see include/vulkan/vk_layer.h).
1093 dispatch table (see include/vulkan/vk_layer.h).
1112 include/vulkan/vk_layer.h for details.
1140 Get*ProcAddr function once for each Vulkan command needed in your dispatch
1255 A layer may want to associate it's own private data with one or more Vulkan
1258 supports layers wrapping any Vulkan object including dispatchable objects.
1260 passing them down the chain. This implies the layer must intercept every Vulkan
1296 - layers which insert extra Vulkan commands in the stream of commands they