Jon Ashburn | 6121daf | 2015-07-24 09:20:11 -0600 | [diff] [blame] | 1 | This is a specification for how the Vulkan loader should identify Vulkan
|
| 2 | installable client drivers (ICDs) and layers on Linux systems. This is
|
| 3 | designed for production installation of Vulkan ICDs and layers. The design is
|
| 4 | shown first for ICDs, and then the variation for layers will be discussed.
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 5 |
|
| 6 |
|
| 7 | 1. Installable Client Drivers:
|
| 8 |
|
| 9 |
|
| 10 | 1.1. Properly-Installed ICDs
|
| 11 |
|
| 12 | In order to find properly-installed ICDs, the Vulkan loader will scan the files
|
| 13 | in the following Linux directories:
|
| 14 |
|
| 15 | /usr/share/vulkan/icd.d
|
| 16 | /etc/vulkan/icd.d
|
| 17 |
|
| 18 | These directories will contain text information files (a.k.a. "manifest
|
Jon Ashburn | 6121daf | 2015-07-24 09:20:11 -0600 | [diff] [blame] | 19 | files"), that use a JSON format (NOTE: The JSON in this version of the
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 20 | specification is for illustration purposes, and isn't completely valid yet).
|
Jon Ashburn | 6121daf | 2015-07-24 09:20:11 -0600 | [diff] [blame] | 21 | The Vulkan loader will open each info file to obtain the name or pathname of an
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 22 | ICD shared library (".so") file. For example:
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 23 |
|
| 24 | {
|
| 25 | "file_format_version": "1.0.0",
|
| 26 | "ICD": {
|
| 27 | "library_path": "path to ICD library",
|
Tony Barbour | fd2f788 | 2016-01-14 10:40:40 -0700 | [diff] [blame] | 28 | "api_version": "1.0.1"
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 29 | }
|
| 30 | }
|
| 31 |
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 32 | The "library_path" specifies either a filename, a relative pathname, or a full
|
| 33 | pathname to an ICD shared library file. If the ICD is specified via a
|
| 34 | filename, the loader will attempt to open that file as a shared object using
|
| 35 | dlopen(), and the file must be in a directory that dlopen is configured to look
|
| 36 | in (Note: various distributions are configured differently). A distribution is
|
| 37 | free to create Vulkan-specific system directories (e.g. ".../vulkan/icd"), but
|
| 38 | is not required to do so. If the ICD is specified via a relative pathname, it
|
| 39 | is relative to the path of the info file. Relative pathnames are those that do
|
| 40 | not start with, but do contain at least one directory separator (i.e. the '/'
|
| 41 | character). For example, "lib/vendora.so" and "./vendora.so" are examples of
|
| 42 | relative pathnames.
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 43 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 44 | The "file_format_version" provides a major.minor.patch version number in case
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 45 | the format of the text information file changes in the future. If the same ICD
|
| 46 | shared library supports multiple, incompatible versions of text info file
|
| 47 | format versions, it must have multiple text info files (all of which may point
|
| 48 | to the same shared library).
|
| 49 |
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 50 | The “api_version” specifies the major.minor.patch version number of the Vulkan
|
| 51 | API that the shared library (referenced by "library_path") was built with.
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 52 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 53 | The "/usr/share/vulkan/icd.d" directory is for ICDs that are installed from
|
| 54 | Linux-distribution-provided packages. The "/etc/vulkan/icd.d" directory is for
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 55 | ICDs that are installed from non-Linux-distribution-provided packages.
|
| 56 |
|
| 57 | There are no rules about the name of the text files (except the .json suffix).
|
| 58 | There are no rules about the name of the ICD shared library files. For
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 59 | example, if the "/usr/share/vulkan/icd.d" directory contain the following
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 60 | files, with the specified contents:
|
| 61 |
|
| 62 | Text File Name Text File Contents
|
| 63 | --------------------------------------------------------------------------
|
| 64 | vk_vendora.json { "ICD": { "library_path": "vendora.so" }}
|
| 65 | vendorb_vk.json { "ICD": { "library_path": "vendorb_vulkan_icd.so" }}
|
| 66 | vendorc_icd.json { "ICD": { "library_path": "/usr/lib/VENDORC/icd.so" }}
|
| 67 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 68 | then the loader will open the three files mentioned in the "Text File Contents"
|
Jon Ashburn | 6121daf | 2015-07-24 09:20:11 -0600 | [diff] [blame] | 69 | column, and then try to load and use the three shared libraries mentioned
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 70 | indicated by the ICD.library_path value.
|
| 71 |
|
| 72 |
|
| 73 | 1.2. Using Pre-Production ICDs
|
| 74 |
|
| 75 | IHV developers (and sometimes other developers) need to use special,
|
| 76 | pre-production ICDs. In some cases, a pre-production ICD may be in an
|
| 77 | installable package. In other cases, a pre-production ICD may simply be a
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 78 | shared library in the developer's build tree. In this latter case, we want to
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 79 | allow developers to point to such an ICD without modifying the
|
| 80 | properly-installed ICD(s) on their system.
|
| 81 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 82 | This need is met with the use of the "VK_ICD_FILENAMES" environment variable,
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 83 | which will override the mechanism used for finding properly-installed ICDs. In
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 84 | other words, only the ICDs listed in "VK_ICD_FILENAMES" will be used.
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 85 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 86 | The "VK_ICD_FILENAMES" environment variable is a colon-separated list of ICD
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 87 | text information files, containing the following:
|
| 88 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 89 | - A filename (e.g. "libvkicd.json") in the "/usr/share/vulkan/icd.d" or
|
| 90 | "/etc/vulkan/icd.d" system directories
|
| 91 | - A full pathname (e.g. "/my_build/my_icd.json")
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 92 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 93 | Typically, "VK_ICD_FILENAMES" will only contain a full pathname to one info
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 94 | file for a developer-built ICD. A colon is only used if more than one ICD is
|
| 95 | listed.
|
| 96 |
|
| 97 | For example, if a developer wants to refer to one ICD that they built, they
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 98 | could set the "VK_ICD_FILENAMES" environment variable to:
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 99 |
|
| 100 | /my_build/my_icd.json
|
| 101 |
|
| 102 | If a developer wants to refer to two ICDs, one of which is a properly-installed
|
| 103 | ICD, they can use the name of the text file in the system directory:
|
| 104 |
|
| 105 | vendorc_vulkan.json:/my_build/my_icd.json
|
| 106 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 107 | Notice the colon between "vendorc_vulkan.json" and "/my_build/my_icd.json".
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 108 |
|
| 109 | NOTE: this environment variable will be ignored for suid programs.
|
| 110 |
|
| 111 |
|
| 112 | 2. Layers:
|
| 113 |
|
| 114 |
|
| 115 | 2.1. Properly-Installed Layers
|
| 116 |
|
| 117 | In order to find properly-installed layers, the Vulkan loader will use a
|
| 118 | similar mechanism as used for ICDs. Text information files, that use a JSON
|
| 119 | format, are read in order to identify the names and attributes of layers and
|
| 120 | their extensions. The use of text info files allows the loader to avoid
|
| 121 | loading any shared library files when the application does not query nor
|
| 122 | request any extensions. Layers and extensions have additional complexity, and
|
| 123 | so their info files contain more information than ICD info files. For example,
|
| 124 | a layer shared library file may contain multiple layers/extensions (perhaps
|
| 125 | even an ICD).
|
| 126 |
|
| 127 | The Vulkan loader will scan the files in the following Linux directories:
|
| 128 |
|
| 129 | /usr/share/vulkan/explicit_layer.d
|
| 130 | /usr/share/vulkan/implicit_layer.d
|
| 131 | /etc/vulkan/explicit_layer.d
|
| 132 | /etc/vulkan/implicit_layer.d
|
| 133 |
|
| 134 | Explicit layers are those which are enabled by an application (e.g. with the
|
| 135 | vkCreateInstance function), or by an environment variable (see below).
|
| 136 | Implicit layers are those which are enabled by their existence. For example,
|
| 137 | certain application environments (e.g. Steam or an automotive infotainment
|
| 138 | system) may have layers which they always want enabled for all applications
|
| 139 | that they start. Other implicit layers may be for all applications started
|
| 140 | on a given system (e.g. layers that overlay frames-per-second). Implicit
|
| 141 | layers are enabled automatically, whereas explicit
|
| 142 | layers must be enabled explicitly. What distinguishes a layer as implicit or
|
| 143 | explicit is by which directory its layer information file exists in.
|
| 144 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 145 | The "/usr/share/vulkan/*_layer.d" directories are for ICDs that are installed
|
| 146 | from Linux-distribution-provided packages. The "/etc/vulkan/*_layer.d"
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 147 | directories are for ICDs that are installed from
|
| 148 | non-Linux-distribution-provided packages.
|
| 149 |
|
| 150 | The information file is in the JSON format and contains the following
|
| 151 | information:
|
| 152 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 153 | - (required) "file_format_version" – same as for ICDs, except that the format
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 154 | version can vary independently for ICDs and layers.
|
| 155 | - (required) "name" - layer name
|
| 156 | - (required) "type" - which layer chains should the layer be activated on.
|
| 157 | Allowable values are "INSTANCE", "DEVICE", "GLOBAL". Global means activate
|
| 158 | on both device and instance chains.
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 159 | - (required) "library_path" - filename / full path / relative path to the text
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 160 | file
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 161 | - (required) "api_version" – same as for ICDs.
|
| 162 | - (required) "implementation_version" – layer version, a single number increasing with backward compatible changes.
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 163 | - (required) "description" – informative decription of the layer.
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 164 | - (optional) "device_extensions" or "instance_extensions" - array of extension information as follows
|
| 165 | - (optional) extension "name" - Vulkan registered name
|
| 166 | - (optional) extension "spec_version" - extension specification version, a single number, increasing with backward compatible changes.
|
| 167 | - (optional) extension "entrypoints" - array of device extension entrypoints; not used for instance extensions
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 168 | - (sometimes required) "functions" - mapping list of function entry points. If
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 169 | multiple layers exist within the same shared library (or if a layer is in the
|
| 170 | same shared library as an ICD), this must be specified to allow each layer to
|
| 171 | have its own vkGet*ProcAddr entrypoints that can be found by the loader. At
|
| 172 | this time, only the following two functions are required:
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 173 | - "vkGetInstanceProcAddr" name
|
| 174 | - "vkGetDeviceProcAddr" name
|
| 175 | - (optional for implicit layers) "enable_environment" requirement(s) -
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 176 | environment variable and value required to enable an implicit layer. This
|
| 177 | environment variable (which should vary with each "version" of the layer, as
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 178 | in "ENABLE_LAYER_FOO_1") must be set to the given value or else the
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 179 | implicit layer is not loaded. This is for application environments
|
| 180 | (e.g. Steam) which want to enable a layer(s) only for applications that they
|
| 181 | launch, and allows for applications run outside of an application environment
|
| 182 | to not get that implicit layer(s).
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 183 | - (required for implicit layers) "disable_environment" requirement(s) -
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 184 | environment variable and value required to disable an implicit layer. Note:
|
| 185 | in rare cases of an application not working with an implicit layer, the
|
| 186 | application can set this environment variable (before calling Vulkan
|
| 187 | functions) in order to "blacklist" the layer. This environment variable
|
| 188 | (which should vary with each "version" of the layer, as in
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 189 | "DISABLE_LAYER_FOO_1") must be set (not particularly to any value). If
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 190 | both the "enable_environment" and "disable_environment" variables are set,
|
| 191 | the implicit layer is disabled.
|
| 192 |
|
Jon Ashburn | 6121daf | 2015-07-24 09:20:11 -0600 | [diff] [blame] | 193 | For example:
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 194 |
|
| 195 | {
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 196 | "file_format_version" : "1.0.0",
|
| 197 | "layer": {
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 198 | "name": "OverlayLayer",
|
| 199 | "type": "DEVICE",
|
| 200 | "library_path": "libvkOverlayLayer.so",
|
Tony Barbour | fd2f788 | 2016-01-14 10:40:40 -0700 | [diff] [blame] | 201 | "api_version" : "1.0.1",
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 202 | "implementation_version" : "2",
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 203 | "description" : "LunarG HUD layer",
|
| 204 | "functions": {
|
| 205 | "vkGetInstanceProcAddr": "Overlaylayer_GetInstanceProcAddr",
|
| 206 | "vkGetDeviceProcAddr": "OverlayLayer_GetDeviceProcAddr"
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 207 | },
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 208 | "instance_extensions": [
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 209 | {
|
David Pinedo | abd0772 | 2015-11-24 09:00:24 -0700 | [diff] [blame] | 210 | "name": "VK_LUNARG_DEBUG_REPORT",
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 211 | "spec_version": "1"
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 212 | },
|
| 213 | {
|
David Pinedo | abd0772 | 2015-11-24 09:00:24 -0700 | [diff] [blame] | 214 | "name": "VK_VENDOR_DEBUG_X",
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 215 | "spec_version": "3"
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 216 | }
|
| 217 | ],
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 218 | "device_extensions": [
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 219 | {
|
David Pinedo | abd0772 | 2015-11-24 09:00:24 -0700 | [diff] [blame] | 220 | "name": "VK_LUNARG_DEBUG_MARKER",
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 221 | "spec_version": "1",
|
| 222 | "entrypoints": ["vkCmdDbgMarkerBegin", "vkCmdDbgMarkerEnd"]
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 223 | }
|
| 224 | ],
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 225 | "disable_environment": {
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 226 | "DISABLE_LAYER_OVERLAY_1": ""
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 227 | }
|
| 228 | }
|
| 229 | }
|
| 230 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 231 | The "library_path" specifies either a filename, a relative pathname, or a full
|
| 232 | pathname to a layer shared library (".so") file, which the loader will attempt
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 233 | to load using dlopen(). If the layer is specified via a filename, the loader
|
| 234 | will attempt to open that file as a shared object using dlopen(), and the file
|
| 235 | must be in a directory that dlopen is configured to look in (Note: various
|
| 236 | distributions are configured differently). A distribution is free to create
|
| 237 | Vulkan-specific system directories (e.g. ".../vulkan/layers"), but is not
|
| 238 | required to do so. If the layer is specified via a relative pathname, it is
|
| 239 | relative to the path of the info file (e.g. for cases when an application
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 240 | provides a layer that is in the same directory hierarchy as the rest of the
|
Jon Ashburn | f2a944f | 2015-11-18 16:46:48 -0700 | [diff] [blame] | 241 | application files).
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 242 |
|
| 243 | There are no rules about the name of the text files (except the .json suffix).
|
| 244 | There are no rules about the name of the layer shared library files.
|
| 245 |
|
| 246 |
|
| 247 | 2.2. Using Pre-Production Layers
|
| 248 |
|
| 249 | As with ICDs, developers may need to use special, pre-production layers,
|
| 250 | without modifying the properly-installed layers.
|
| 251 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 252 | This need is met with the use of the "VK_LAYER_PATH" environment variable,
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 253 | which will override the mechanism using for finding properly-installed layers.
|
| 254 | Because many layers may exist on a system, this environment variable is a
|
| 255 | colon-separated list of directories that contain layer info files. Only the
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 256 | directories listed in "VK_LAYER_PATH" will be scanned for info files. Each
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 257 | colon-separated entry is:
|
| 258 |
|
| 259 | - The full pathname of a directory containing layer info files
|
| 260 |
|
| 261 | In addition to overriding the mechanism for finding layers, the following
|
| 262 | environment variables are used to select one or more layers/extensions
|
| 263 | (respectively) to explicitly enable:
|
| 264 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 265 | - "VK_INSTANCE_LAYERS" for instance/global layers/extensions, enabled at
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 266 | vkCreateInstance time
|
| 267 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 268 | - "VK_DEVICE_LAYERS" for device layers/extensions, enabled at vkCreateDevice
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 269 | time
|
| 270 |
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 271 | These are colon-separated lists of extension names, as listed in the "name"
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 272 | field of the info file. The loader will load all layers/extensions that match
|
jon | 5b1e34d | 2015-10-29 15:51:28 -0600 | [diff] [blame] | 273 | the given extension name(s), ignoring the "version" fields.
|
Jon Ashburn | 4a511f1 | 2015-07-16 10:54:55 -0600 | [diff] [blame] | 274 |
|
| 275 | NOTE: these environment variables will be ignored for suid programs.
|