aboutsummaryrefslogtreecommitdiff
path: root/loader
diff options
context:
space:
mode:
authorMark Young <marky@lunarg.com>2017-05-26 14:39:54 -0600
committerMark Young <marky@lunarg.com>2017-05-26 15:45:34 -0600
commit75c249d6ab7e08757a04f624fcb6210b6e2d8a97 (patch)
tree2d8ce6afa358a83da155ddf926f560c9d4ddf850 /loader
parentd3db0943c0533ca32161f1a13342f5ad07ab5bf3 (diff)
downloadusermoji-75c249d6ab7e08757a04f624fcb6210b6e2d8a97.tar.xz
loader: Fix env usage and cleanup messages
Fix the environment variable usage of VK_LOADER_DISABLE_INST_EXT_FILTER so that it will also ignore the unknown extensions during vkCreateInstance and clean up a few more messages. The previous messages were confusing and didn't indicate what was actually wrong. Change-Id: Iccd0a4b2cfd673187cb7e92fe9cec23deb058ff2
Diffstat (limited to 'loader')
-rw-r--r--loader/loader.c65
1 files changed, 35 insertions, 30 deletions
diff --git a/loader/loader.c b/loader/loader.c
index d94bbc4a..f5c74a3d 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -4477,8 +4477,7 @@ VkResult loader_validate_layers(const struct loader_instance *inst, const uint32
prop = loader_get_layer_property(ppEnabledLayerNames[i], list);
if (NULL == prop) {
loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
- "loader_validate_layers: Layer %d does not exist in "
- "the list of available layers",
+ "loader_validate_layers: Layer %d does not exist in the list of available layers",
i);
return VK_ERROR_LAYER_NOT_PRESENT;
}
@@ -4491,33 +4490,42 @@ VkResult loader_validate_instance_extensions(const struct loader_instance *inst,
const VkInstanceCreateInfo *pCreateInfo) {
VkExtensionProperties *extension_prop;
struct loader_layer_properties *layer_prop;
+ char *env_value;
+ bool check_if_known = true;
for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
VkStringErrorFlags result = vk_string_validate(MaxLoaderStringLength, pCreateInfo->ppEnabledExtensionNames[i]);
if (result != VK_STRING_ERROR_NONE) {
loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
- "loader_validate_instance_extensions: Instance "
- "ppEnabledExtensionNames contains "
+ "loader_validate_instance_extensions: Instance ppEnabledExtensionNames contains "
"string that is too long or is badly formed");
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
- // See if the extension is in the list of supported extensions
- bool found = false;
- for (uint32_t j = 0; LOADER_INSTANCE_EXTENSIONS[j] != NULL; j++) {
- if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], LOADER_INSTANCE_EXTENSIONS[j]) == 0) {
- found = true;
- break;
- }
+ // Check if a user wants to disable the instance extension filtering behavior
+ env_value = loader_getenv("VK_LOADER_DISABLE_INST_EXT_FILTER", inst);
+ if (NULL != env_value && atoi(env_value) != 0) {
+ check_if_known = false;
}
+ loader_free_getenv(env_value, inst);
- // If it isn't in the list, return an error
- if (!found) {
- loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
- "loader_validate_instance_extensions: Extension %d "
- "not found in list of available extensions.",
- i);
- return VK_ERROR_EXTENSION_NOT_PRESENT;
+ if (check_if_known) {
+ // See if the extension is in the list of supported extensions
+ bool found = false;
+ for (uint32_t j = 0; LOADER_INSTANCE_EXTENSIONS[j] != NULL; j++) {
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], LOADER_INSTANCE_EXTENSIONS[j]) == 0) {
+ found = true;
+ break;
+ }
+ }
+
+ // If it isn't in the list, return an error
+ if (!found) {
+ loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
+ "loader_validate_instance_extensions: Extension %s not found in list of known instance extensions.",
+ pCreateInfo->ppEnabledExtensionNames[i]);
+ return VK_ERROR_EXTENSION_NOT_PRESENT;
+ }
}
extension_prop = get_extension_property(pCreateInfo->ppEnabledExtensionNames[i], icd_exts);
@@ -4546,9 +4554,9 @@ VkResult loader_validate_instance_extensions(const struct loader_instance *inst,
if (!extension_prop) {
// Didn't find extension name in any of the global layers, error out
loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
- "loader_validate_instance_extensions: Extension %d "
- "not found in enabled layer list extensions.",
- i);
+ "loader_validate_instance_extensions: Instance extension %s not supported by available ICDs or enabled "
+ "layers.",
+ pCreateInfo->ppEnabledExtensionNames[i]);
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
}
@@ -4565,8 +4573,7 @@ VkResult loader_validate_device_extensions(struct loader_physical_device_tramp *
VkStringErrorFlags result = vk_string_validate(MaxLoaderStringLength, pCreateInfo->ppEnabledExtensionNames[i]);
if (result != VK_STRING_ERROR_NONE) {
loader_log(phys_dev->this_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
- "loader_validate_device_extensions: Device "
- "ppEnabledExtensionNames contains "
+ "loader_validate_device_extensions: Device ppEnabledExtensionNames contains "
"string that is too long or is badly formed");
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
@@ -4592,9 +4599,9 @@ VkResult loader_validate_device_extensions(struct loader_physical_device_tramp *
if (!extension_prop) {
// Didn't find extension name in any of the device layers, error out
loader_log(phys_dev->this_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
- "loader_validate_device_extensions: Extension %d "
- "not found in enabled layer list extensions.",
- i);
+ "loader_validate_device_extensions: Device extension %s not supported by selected physical device "
+ "or enabled layers.",
+ pCreateInfo->ppEnabledExtensionNames[i]);
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
}
@@ -4625,8 +4632,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateInstance(const VkInstanceCreateI
filtered_extension_names = loader_stack_alloc(pCreateInfo->enabledExtensionCount * sizeof(char *));
if (!filtered_extension_names) {
loader_log(ptr_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
- "terminator_CreateInstance: Failed create extension name "
- "array for %d extensions",
+ "terminator_CreateInstance: Failed create extension name array for %d extensions",
pCreateInfo->enabledExtensionCount);
res = VK_ERROR_OUT_OF_HOST_MEMORY;
goto out;
@@ -4637,8 +4643,7 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateInstance(const VkInstanceCreateI
icd_term = loader_icd_add(ptr_instance, &ptr_instance->icd_tramp_list.scanned_list[i]);
if (NULL == icd_term) {
loader_log(ptr_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
- "terminator_CreateInstance: Failed to add ICD %d to ICD "
- "trampoline list.",
+ "terminator_CreateInstance: Failed to add ICD %d to ICD trampoline list.",
i);
res = VK_ERROR_OUT_OF_HOST_MEMORY;
goto out;