aboutsummaryrefslogtreecommitdiff
path: root/loader/trampoline.c
diff options
context:
space:
mode:
authorJeremy Hayes <jeremy@lunarg.com>2016-04-01 11:40:26 -0600
committerJeremy Hayes <jeremy@lunarg.com>2016-04-01 14:45:32 -0600
commite26f199d098d1ee2ab2418d4ba259d564fbde4d8 (patch)
treed11e17c37bc75f9d43ab30c70edf921ab087f7c0 /loader/trampoline.c
parent3a0eb0b42748d56a4f8598cd6949e50881abc73c (diff)
downloadusermoji-e26f199d098d1ee2ab2418d4ba259d564fbde4d8.tar.xz
loader: report implicit instance extensions
GL74: vkEnumerateInstanceExtensionProperties should report implicit instance extensions when pLayerName is NULL or an implicit layer name. Change-Id: Iba7664a168e146c4b862468b6255cdc752cc8c77
Diffstat (limited to 'loader/trampoline.c')
-rw-r--r--loader/trampoline.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/loader/trampoline.c b/loader/trampoline.c
index 260fd340..d1c02f0e 100644
--- a/loader/trampoline.c
+++ b/loader/trampoline.c
@@ -137,21 +137,22 @@ vkEnumerateInstanceExtensionProperties(const char *pLayerName,
/* get layer libraries if needed */
if (pLayerName && strlen(pLayerName) != 0) {
- if (vk_string_validate(MaxLoaderStringLength, pLayerName) ==
+ if (vk_string_validate(MaxLoaderStringLength, pLayerName) !=
VK_STRING_ERROR_NONE) {
- loader_layer_scan(NULL, &instance_layers, NULL);
- for (uint32_t i = 0; i < instance_layers.count; i++) {
- struct loader_layer_properties *props =
- &instance_layers.list[i];
- if (strcmp(props->info.layerName, pLayerName) == 0) {
- global_ext_list = &props->instance_extension_list;
- }
- }
- } else {
assert(VK_FALSE && "vkEnumerateInstanceExtensionProperties: "
"pLayerName is too long or is badly formed");
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
+
+ loader_layer_scan(NULL, &instance_layers, NULL);
+ for (uint32_t i = 0; i < instance_layers.count; i++) {
+ struct loader_layer_properties *props =
+ &instance_layers.list[i];
+ if (strcmp(props->info.layerName, pLayerName) == 0) {
+ global_ext_list = &props->instance_extension_list;
+ break;
+ }
+ }
} else {
/* Scan/discover all ICD libraries */
memset(&icd_libs, 0, sizeof(struct loader_icd_libs));
@@ -160,6 +161,14 @@ vkEnumerateInstanceExtensionProperties(const char *pLayerName,
loader_get_icd_loader_instance_extensions(NULL, &icd_libs,
&icd_extensions);
loader_scanned_icd_clear(NULL, &icd_libs);
+
+ // Append implicit layers.
+ loader_implicit_layer_scan(NULL, &instance_layers, NULL);
+ for (uint32_t i = 0; i < instance_layers.count; i++) {
+ struct loader_extension_list *ext_list = &instance_layers.list[i].instance_extension_list;
+ loader_add_to_ext_list(NULL, &icd_extensions, ext_list->count, ext_list->list);
+ }
+
global_ext_list = &icd_extensions;
}