diff options
| author | Jamie Madill <jmadill@chromium.org> | 2016-04-06 18:26:46 -0400 |
|---|---|---|
| committer | Jon Ashburn <jon@lunarg.com> | 2016-04-28 16:19:47 -0600 |
| commit | dffafa95f3d60de7e73f0cc6cecaccfcd19bfddc (patch) | |
| tree | 539b4ddfb4b5889d3305ba3112da7d6fff943b7b /loader | |
| parent | f670934e0a197d49bcd0b0ea525e7d04c362aabd (diff) | |
| download | usermoji-dffafa95f3d60de7e73f0cc6cecaccfcd19bfddc.tar.xz | |
loader: Add compile-time option for layer search paths.
This enables programatically specifying search directories for the
layer JSON files. This makes deploying and running compiled layers
in local and automated testing with multiple configurations a much
simpler process.
Change-Id: I0904ef230d020004d8d71cbe265e83cdb6120db8
Diffstat (limited to 'loader')
| -rw-r--r-- | loader/loader.c | 21 | ||||
| -rw-r--r-- | loader/vk_loader_platform.h | 8 |
2 files changed, 21 insertions, 8 deletions
diff --git a/loader/loader.c b/loader/loader.c index 17c2f557..59572474 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -2182,11 +2182,12 @@ loader_add_layer_properties(const struct loader_instance *inst, * Linux Layer| dirs | dirs */ static void loader_get_manifest_files(const struct loader_instance *inst, - const char *env_override, bool is_layer, + const char *env_override, + const char *source_override, bool is_layer, const char *location, const char *home_location, struct loader_manifest_files *out_files) { - char *override = NULL; + const char *override = NULL; char *loc; char *file, *next_file, *name; size_t alloced_count = 64; @@ -2198,7 +2199,9 @@ static void loader_get_manifest_files(const struct loader_instance *inst, out_files->count = 0; out_files->filename_list = NULL; - if (env_override != NULL && (override = loader_getenv(env_override))) { + if (source_override != NULL) { + override = source_override; + } else if (env_override != NULL && (override = loader_getenv(env_override))) { #if !defined(_WIN32) if (geteuid() != getuid() || getegid() != getgid()) { /* Don't allow setuid apps to use the env var: */ @@ -2260,7 +2263,9 @@ static void loader_get_manifest_files(const struct loader_instance *inst, return; } strcpy(loc, override); - loader_free_getenv(override); + if (source_override == NULL) { + loader_free_getenv(override); + } } // Print out the paths being searched if debugging is enabled @@ -2410,7 +2415,7 @@ void loader_icd_scan(const struct loader_instance *inst, loader_scanned_icd_init(inst, icds); // Get a list of manifest files for ICDs - loader_get_manifest_files(inst, "VK_ICD_FILENAMES", false, + loader_get_manifest_files(inst, "VK_ICD_FILENAMES", NULL, false, DEFAULT_VK_DRIVERS_INFO, HOME_VK_DRIVERS_INFO, &manifest_files); if (manifest_files.count == 0) @@ -2525,12 +2530,12 @@ void loader_layer_scan(const struct loader_instance *inst, uint32_t implicit; // Get a list of manifest files for explicit layers - loader_get_manifest_files(inst, LAYERS_PATH_ENV, true, + loader_get_manifest_files(inst, LAYERS_PATH_ENV, LAYERS_SOURCE_PATH, true, DEFAULT_VK_ELAYERS_INFO, HOME_VK_ELAYERS_INFO, &manifest_files[0]); // Pass NULL for environment variable override - implicit layers are not // overridden by LAYERS_PATH_ENV - loader_get_manifest_files(inst, NULL, true, DEFAULT_VK_ILAYERS_INFO, + loader_get_manifest_files(inst, NULL, NULL, true, DEFAULT_VK_ILAYERS_INFO, HOME_VK_ILAYERS_INFO, &manifest_files[1]); if (manifest_files[0].count == 0 && manifest_files[1].count == 0) return; @@ -2585,7 +2590,7 @@ void loader_implicit_layer_scan(const struct loader_instance *inst, // Pass NULL for environment variable override - implicit layers are not // overridden by LAYERS_PATH_ENV - loader_get_manifest_files(inst, NULL, true, DEFAULT_VK_ILAYERS_INFO, + loader_get_manifest_files(inst, NULL, NULL, true, DEFAULT_VK_ILAYERS_INFO, HOME_VK_ILAYERS_INFO, &manifest_files); if (manifest_files.count == 0) { return; diff --git a/loader/vk_loader_platform.h b/loader/vk_loader_platform.h index aed0a703..c94e33c0 100644 --- a/loader/vk_loader_platform.h +++ b/loader/vk_loader_platform.h @@ -106,6 +106,9 @@ "/" SYSCONFDIR VULKAN_ILAYERCONF_DIR ":" \ "/usr/" DATADIR VULKAN_ILAYERCONF_DIR #define DEFAULT_VK_LAYERS_PATH "" +#if !defined(LAYERS_SOURCE_PATH) +#define LAYERS_SOURCE_PATH NULL +#endif #define LAYERS_PATH_ENV "VK_LAYER_PATH" #define HOME_VK_DRIVERS_INFO "/.local/share" VULKAN_ICDCONF_DIR #define HOME_VK_ELAYERS_INFO "/.local/share" VULKAN_ELAYERCONF_DIR @@ -250,7 +253,12 @@ using namespace std; #define DEFAULT_VK_DRIVERS_PATH "" #define DEFAULT_VK_ELAYERS_INFO "SOFTWARE\\Khronos\\Vulkan\\ExplicitLayers" #define DEFAULT_VK_ILAYERS_INFO "SOFTWARE\\Khronos\\Vulkan\\ImplicitLayers" +#if !defined(DEFAULT_VK_LAYERS_PATH) #define DEFAULT_VK_LAYERS_PATH "" +#endif +#if !defined(LAYERS_SOURCE_PATH) +#define LAYERS_SOURCE_PATH NULL +#endif #define LAYERS_PATH_ENV "VK_LAYER_PATH" #define HOME_VK_DRIVERS_INFO "" #define HOME_VK_ELAYERS_INFO "" |
