diff options
| author | Courtney Goeltzenleuchter <courtneygo@google.com> | 2015-12-21 16:41:47 -0700 |
|---|---|---|
| committer | Tony Barbour <tony@LunarG.com> | 2015-12-22 13:38:27 -0700 |
| commit | 93040bbb39953f48deb2744018ff946238fbb58a (patch) | |
| tree | 592dbec418032dea1cda9a1ea0eb49052730a431 /loader/loader.c | |
| parent | 94bd53d2a92356a5b6dc1d565026f204304be498 (diff) | |
| download | usermoji-93040bbb39953f48deb2744018ff946238fbb58a.tar.xz | |
loader: Properly filter ICD extensions
As of NVIDIA driver 355.00.19, the ICD's CreateInstance
checks for invalid extension names and it turns out the
loader was passing on DEBUG_REPORT when it should have
been filtered out.
This change re-constructs the ICD's extension list to
do that filtering.
Diffstat (limited to 'loader/loader.c')
| -rw-r--r-- | loader/loader.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/loader/loader.c b/loader/loader.c index d5ff4f98..d2d2d580 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -538,7 +538,7 @@ static void loader_add_instance_extensions( const char *lib_name, struct loader_extension_list *ext_list) { - uint32_t i, count; + uint32_t i, count = 0; VkExtensionProperties *ext_props; VkResult res; @@ -3160,15 +3160,28 @@ VKAPI_ATTR VkResult VKAPI_CALL loader_CreateInstance( icd = loader_icd_add(ptr_instance, &ptr_instance->icd_libs.list[i]); if (icd) { icd_create_info.enabledExtensionNameCount = 0; + struct loader_extension_list icd_exts; + + loader_log(ptr_instance, VK_DEBUG_REPORT_DEBUG_BIT_EXT, 0, "Build ICD instance extension list"); + // traverse scanned icd list adding non-duplicate extensions to the list + loader_init_generic_list(ptr_instance, (struct loader_generic_list *) &icd_exts, + sizeof(VkExtensionProperties)); + loader_add_instance_extensions(ptr_instance, + icd->this_icd_lib->EnumerateInstanceExtensionProperties, + icd->this_icd_lib->lib_name, + &icd_exts); + for (uint32_t i = 0; i < pCreateInfo->enabledExtensionNameCount; i++) { prop = get_extension_property(pCreateInfo->ppEnabledExtensionNames[i], - &ptr_instance->ext_list); + &icd_exts); if (prop) { filtered_extension_names[icd_create_info.enabledExtensionNameCount] = (char *) pCreateInfo->ppEnabledExtensionNames[i]; icd_create_info.enabledExtensionNameCount++; } } + loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *) &icd_exts); + res = ptr_instance->icd_libs.list[i].CreateInstance(&icd_create_info, pAllocator, &(icd->instance)); |
