From 4da0da044a455eb21ba4a73bd3c314f536de969d Mon Sep 17 00:00:00 2001 From: John Zulauf Date: Mon, 2 Apr 2018 10:55:18 -0600 Subject: loader: Eliminate duplicate validation messages Layer version mismatch validation messages were being generated multiple times for each mismatching layer. Eliminated duplicate error messages and fixed formatting issues. Change-Id: Iffc5ff94f70fefc075b74764ae87a6593143f503 --- loader/loader.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/loader/loader.c b/loader/loader.c index 266222f3..80d363b5 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -26,6 +26,7 @@ */ #define _GNU_SOURCE +#include #include #include #include @@ -1397,8 +1398,6 @@ void loader_destroy_layer_list(const struct loader_instance *inst, struct loader VkResult loader_add_to_layer_list(const struct loader_instance *inst, struct loader_layer_list *list, uint32_t prop_list_count, const struct loader_layer_properties *props) { uint32_t i; - uint16_t layer_api_major_version; - uint16_t layer_api_minor_version; struct loader_layer_properties *layer; if (list->list == NULL || list->capacity == 0) { @@ -1429,18 +1428,6 @@ VkResult loader_add_to_layer_list(const struct loader_instance *inst, struct loa list->capacity = new_capacity; } - // Verify that the layer api version is at least that of the application's request, if not, throw a warning since - // undefined behavior could occur. - layer_api_major_version = VK_VERSION_MAJOR(props[i].info.specVersion); - layer_api_minor_version = VK_VERSION_MINOR(props[i].info.specVersion); - if (inst->app_api_major_version > layer_api_major_version || - (inst->app_api_major_version == layer_api_major_version && inst->app_api_minor_version > layer_api_minor_version)) { - loader_log( - inst, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0, - "loader_add_to_layer_list: Explicit layer %s is using an old API version %d.%d versus application requested %d.%d", - props[i].info.layerName, layer_api_major_version, layer_api_minor_version, inst->app_api_major_version,- inst->app_api_minor_version); - } - memcpy(&list->list[list->count], layer, sizeof(struct loader_layer_properties)); list->count++; } @@ -4538,6 +4525,10 @@ out: VkResult loader_enable_instance_layers(struct loader_instance *inst, const VkInstanceCreateInfo *pCreateInfo, const struct loader_layer_list *instance_layers) { VkResult err; + uint16_t layer_api_major_version; + uint16_t layer_api_minor_version; + uint32_t i; + struct loader_layer_properties *prop; assert(inst && "Cannot have null instance"); @@ -4566,6 +4557,22 @@ VkResult loader_enable_instance_layers(struct loader_instance *inst, const VkIns err = loader_add_layer_names_to_list(inst, &inst->app_activated_layer_list, &inst->expanded_activated_layer_list, pCreateInfo->enabledLayerCount, pCreateInfo->ppEnabledLayerNames, instance_layers); + for (i = 0; i < inst->expanded_activated_layer_list.count; i++) { + // Verify that the layer api version is at least that of the application's request, if not, throw a warning since + // undefined behavior could occur. + prop = inst->expanded_activated_layer_list.list + i; + layer_api_major_version = VK_VERSION_MAJOR(prop->info.specVersion); + layer_api_minor_version = VK_VERSION_MINOR(prop->info.specVersion); + if (inst->app_api_major_version > layer_api_major_version || + (inst->app_api_major_version == layer_api_major_version && inst->app_api_minor_version > layer_api_minor_version)) { + loader_log(inst, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0, + "loader_add_to_layer_list: Explicit layer %s is using an old API version %" PRIu16 ".%" PRIu16 + " versus application requested %" PRIu16 ".%" PRIu16, + prop->info.layerName, layer_api_major_version, layer_api_minor_version, inst->app_api_major_version, + inst->app_api_minor_version); + } + } + return err; } -- cgit v1.2.3