Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/Vulkan-Loader.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Giessen <charles@lunarg.com>2022-08-09 03:18:02 +0300
committerCharles Giessen <charles@lunarg.com>2022-08-09 03:18:02 +0300
commit97cc17d13189a9b9a9863498e263882b0c6a6124 (patch)
treee81de54e56f4bea4d742732dea6f1df0386262ea
parenta0ab2f162ef2df46fc94ba39ae62e78e680a884d (diff)
Separate Major.minor version checks from Full version checksmajor_minor_version_check_fixes
loader_make_Version previously would decode the major, minor, and patch info out of version data. This results in erroneous version checks that took into account patch version when they shouldn't of. The loader_make_full_version function is introduced for code that wishes to get the full major.minor.patch version and uses of loader_make_version that need the full version have been replaced.
-rw-r--r--loader/loader.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/loader/loader.c b/loader/loader.c
index b74ec4cb6..406f65623 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -98,10 +98,20 @@ static struct loader_icd_tramp_list scanned_icds;
LOADER_PLATFORM_THREAD_ONCE_DECLARATION(once_init);
+// Creates loader_api_version struct that contains the major and minor fields, setting patch to 0
loader_api_version loader_make_version(uint32_t version) {
loader_api_version out_version;
out_version.major = VK_API_VERSION_MAJOR(version);
out_version.minor = VK_API_VERSION_MINOR(version);
+ out_version.patch = 0;
+ return out_version;
+}
+
+// Creates loader_api_version struct containing the major, minor, and patch fields
+loader_api_version loader_make_full_version(uint32_t version) {
+ loader_api_version out_version;
+ out_version.major = VK_API_VERSION_MAJOR(version);
+ out_version.minor = VK_API_VERSION_MINOR(version);
out_version.patch = VK_API_VERSION_PATCH(version);
return out_version;
}
@@ -963,8 +973,8 @@ static void loader_add_implicit_layer(const struct loader_instance *inst, const
loader_api_version prop_version = loader_make_version(prop->info.specVersion);
if (!loader_check_version_meets_required(inst->app_api_version, prop_version)) {
loader_log(inst, VULKAN_LOADER_INFO_BIT, 0,
- "loader_add_implicit_layer: Disabling implicit layer %s for using an old API version %d.%d versus "
- "application requested %d.%d",
+ "loader_add_implicit_layer: Disabling implicit layer %s for using an old API version %u.%u versus "
+ "application requested %u.%u",
prop->info.layerName, prop_version.major, prop_version.minor, inst->app_api_version.major,
inst->app_api_version.minor);
enable = false;
@@ -1509,7 +1519,7 @@ void loader_initialize(void) {
windows_initialization();
#endif
- loader_api_version version = loader_make_version(VK_HEADER_VERSION_COMPLETE);
+ loader_api_version version = loader_make_full_version(VK_HEADER_VERSION_COMPLETE);
loader_log(NULL, VULKAN_LOADER_INFO_BIT, 0, "Vulkan Loader Version %d.%d.%d", version.major, version.minor, version.patch);
#if defined(GIT_BRANCH_NAME) && defined(GIT_TAG_INFO)
@@ -2584,7 +2594,7 @@ static VkResult loader_add_layer_properties(const struct loader_instance *inst,
}
loader_log(inst, VULKAN_LOADER_INFO_BIT, 0, "Found manifest file %s (file version %s)", filename, file_vers);
// Get the major/minor/and patch as integers for easier comparison
- json_version = loader_make_version(loader_parse_version_string(file_vers));
+ json_version = loader_make_full_version(loader_parse_version_string(file_vers));
if (!is_valid_layer_json_version(&json_version)) {
loader_log(inst, VULKAN_LOADER_INFO_BIT | VULKAN_LOADER_LAYER_BIT, 0,
@@ -3456,7 +3466,7 @@ VkResult loader_icd_scan(const struct loader_instance *inst, struct loader_icd_t
loader_log(inst, VULKAN_LOADER_DRIVER_BIT, 0, "Found ICD manifest file %s, version %s", file_str, file_vers);
// Get the version of the driver manifest
- json_file_version = loader_make_version(loader_parse_version_string(file_vers));
+ json_file_version = loader_make_full_version(loader_parse_version_string(file_vers));
// Loader only knows versions 1.0.0 and 1.0.1, anything above it is unknown
if (loader_check_version_meets_required(loader_combine_version(1, 0, 2), json_file_version)) {
@@ -4216,11 +4226,11 @@ VkResult loader_enable_instance_layers(struct loader_instance *inst, const VkIns
struct loader_layer_properties *prop = inst->expanded_activated_layer_list.list + i;
loader_api_version prop_spec_version = loader_make_version(prop->info.specVersion);
if (!loader_check_version_meets_required(inst->app_api_version, prop_spec_version)) {
- loader_log(inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 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, prop_spec_version.major, prop_spec_version.minor, inst->app_api_version.major,
- inst->app_api_version.minor);
+ loader_log(
+ inst, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0,
+ "loader_add_to_layer_list: Explicit layer %s is using an old API version %u.%u versus application requested %u.%u",
+ prop->info.layerName, prop_spec_version.major, prop_spec_version.minor, inst->app_api_version.major,
+ inst->app_api_version.minor);
}
}