• Home
  • Raw
  • Download

Lines Matching +full:- +full:validation +full:- +full:settings

1 <!-- markdownlint-disable MD041 -->
7 # Application Interface to Loader <!-- omit from toc -->
10 <!-- Copyright &copy; 2015-2023 LunarG, Inc. -->
12 [3]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License"
13 [4]: https://creativecommons.org/licenses/by-nd/4.0/
15 ## Table of Contents <!-- omit from toc -->
17 - [Overview](#overview)
18 - [Interfacing with Vulkan Functions](#interfacing-with-vulkan-functions)
19 - [Vulkan Direct Exports](#vulkan-direct-exports)
20 - [Directly Linking to the Loader](#directly-linking-to-the-loader)
21 - [Dynamic Linking](#dynamic-linking)
22 - [Static Linking](#static-linking)
23 - [Indirectly Linking to the Loader](#indirectly-linking-to-the-loader)
24 - [Best Application Performance Setup](#best-application-performance-setup)
25 - [ABI Versioning](#abi-versioning)
26 - [Windows Dynamic Library Usage](#windows-dynamic-library-usage)
27 - [Linux Dynamic Library Usage](#linux-dynamic-library-usage)
28 - [MacOs Dynamic Library Usage](#macos-dynamic-library-usage)
29 - [Bundling the Loader With An Application](#bundling-the-loader-with-an-application)
30 - [Application Layer Usage](#application-layer-usage)
31 - [Meta-Layers](#meta-layers)
32 - [Implicit vs Explicit Layers](#implicit-vs-explicit-layers)
33 - [Override Layer](#override-layer)
34 - [Forcing Layer Source Folders](#forcing-layer-source-folders)
35 - [Exception for Elevated Privileges](#exception-for-elevated-privileges)
36- [Forcing Layers to be Enabled on Windows, Linux and macOS](#forcing-layers-to-be-enabled-on-wind…
37 - [Overall Layer Ordering](#overall-layer-ordering)
38 - [Debugging Possible Layer Issues](#debugging-possible-layer-issues)
39 - [Application Usage of Extensions](#application-usage-of-extensions)
40 - [Instance and Device Extensions](#instance-and-device-extensions)
41 - [WSI Extensions](#wsi-extensions)
42 - [Unknown Extensions](#unknown-extensions)
43- [Filtering Out Unknown Instance Extension Names](#filtering-out-unknown-instance-extension-names)
44 - [Physical Device Ordering](#physical-device-ordering)
48 This is the Application-centric view of working with the Vulkan loader.
60 Vulkan entry-points and all appropriate Window System Interface (WSI)
61 entry-points.
93 - The loader can never be updated without re-linking the application
94 - The possibility that two included libraries could contain different versions
96 - Could cause conflicts between the different loader versions
103 they can use the appropriate platform-specific dynamic symbol lookup on the
112 and `vkEnumerateInstanceLayerProperties` in a platform-independent way.
117 should set up its own dispatch table for every Vulkan API entry-point.
118 For every instance-level Vulkan command in the dispatch table, the function pointer
120 Additionally, for every device-level Vulkan command, the function pointer
127 Remember, a [Vulkan instance is a high-level construct used to provide Vulkan
128 system-level information](LoaderInterfaceArchitecture.md#instance-specific).
143 Thus, using a loader-exported Vulkan device function, the call chain
150 This further optimizes the call chain by removing the loader all-together under
157 With many function calls, the lack of indirection in each adds up to non-trivial
169 object into an driver-specific KHR_surface object prior to passing down the rest
194 The Vulkan loader library file name is `vulkan-<ABI version>.dll`.
196 `vulkan-1.dll`.
198 directory (on 64-bit Windows installs, the 32-bit version of the loader with
210 output of `pkg-config --cflags --libs vulkan` as compiler flags.
213 Linux applications that load Vulkan-Loader dynamically at runtime do not
228 platform-specific way (i.e. packages on Linux) or as part of a driver install
235 2) Ensures certain loader behavior is well-known
245 3) The application/engine will miss out on important loader bug-fixes
254 But, that relies upon end-users correctly performing whatever update process is
260 Then, the installation process can use that to ensure the end-user's system
274 A layer cannot add new Vulkan core API entry-points that are not exposed in
277 additional entry-points beyond what is available without those layers.
278 These additional extension entry-points can be queried through the Vulkan
281 A common use of layers is for API validation which can be enabled during
283 This allows easy control of the overhead resulting from enabling validation of
292 [Layer discovery](LoaderLayerInterface.md#layer-discovery)
305 See the [Overall Layer Ordering](#overall-layer-ordering) section for more
333 err = vkCreateInstance(&inst_info, NULL, &demo->inst);
335 // Couldn't find the validation layer
344 See the [Overall Layer Ordering](#overall-layer-ordering) section for more
362 ### Meta-Layers
364 Meta-layers are layers which contain an ordered list of other layers to enable.
367 Originally, this was used to group together the individual Vulkan Validation
369 It was necessary because instead of a single Validation layer, validation was
373 While not necessary for validation anymore, VkConfig does use meta layers to
377 and the section later on the [Override Layer](#override-layer).
379 Meta-layers are detailed more in the
380 [Meta-Layers](LoaderLayerInterface.md#meta-layers) section of the
398 (e.g. layers that overlay frames-per-second).
407 On Desktop platforms (Windows, Linux, and macOS), these enable/disable settings
410 Discovery of system-installed implicit and explicit layers is described later
411 in the [Layer discovery](LoaderLayerInterface.md#layer-discovery)
448 The "Override Layer" is a special implicit meta-layer created by the
456 This allows an end-user or developer to easily force on any number of layers
457 and settings via VkConfig.
460 [Override Meta-Layer](LoaderLayerInterface.md#override-meta-layer) section of the
466 Developers may need to use special, pre-production layers, without modifying
467 the system-installed layers.
478 paths separated by the operating-system specific path separator.
494 [Table of Debug Environment Variables](LoaderInterfaceArchitecture.md#table-of-debug-environment-va…
507 [Elevated Privilege Caveats](LoaderInterfaceArchitecture.md#elevated-privilege-caveats)
508 in the top-level
529 separated by the operating-system specific path separator.
533 the top-most layer (closest to the application) and the last layer name in the
534 list being the bottom-most layer (closest to the driver).
535 See the [Overall Layer Ordering](#overall-layer-ordering) section for more
541 Layers specified via environment variable are top-most (closest to the
542 application) while layers specified by the application are bottom-most.
544 An example of using these environment variables to activate the validation
552 [Table of Debug Environment Variables](LoaderInterfaceArchitecture.md#table-of-debug-environment-va…
570 validation layer can intercept any Vulkan API calls the overlay layer needs to
578 [Debugging Possible Layer Issues](LoaderDebugging.md#debugging-possible-layer-issues)
598 [Instance Versus Device](LoaderInterfaceArchitecture.md#instance-versus-device)
606 instance-level objects, such as `VkInstance` and `VkPhysicalDevice`.
607 A device extension does the same for device-level objects, such as `VkDevice`,
650 still present in the device call-chain.
661 The Validation layers will catch this invalid API usage.
666 Khronos-approved WSI extensions are available and provide Windows System
674 For the most part, the selection is done in the loader using compile-time
678 - VK_KHR_surface
679 - VK_KHR_swapchain
680 - VK_KHR_display
682 In addition, each of the following OS targets for the loader support target-
686 | ---------------- | ------------------------------------------ |
694 entry-points for these extensions, there is a handshake required to actually
711 entry-point down the device call chain ending with the appropriate
712 driver entry-points.
731 Because the device call-chain does not normally pass through the loader
761 variable to a non-zero number.
795 environment variable `VK_LOADER_DISABLE_SELECT` to a non-zero value.
799 [Return to the top-level LoaderInterfaceArchitecture.md file.](LoaderInterfaceArchitecture.md)