diff options
| author | Jon Ashburn <jon@lunarg.com> | 2015-11-17 17:35:40 -0700 |
|---|---|---|
| committer | Jon Ashburn <jon@lunarg.com> | 2015-11-18 17:05:38 -0700 |
| commit | 7dd84581607249f9dd6c30b1a511c3be946a73e7 (patch) | |
| tree | e9547e44628379fb35f2d3a911b692069030de53 | |
| parent | 01261e73d94be281a6b8bc73e088333841fb83d6 (diff) | |
| download | usermoji-7dd84581607249f9dd6c30b1a511c3be946a73e7.tar.xz | |
loader: Add parsing of api_version in ICD JSON
bugzilla #15057 part one
Also make this version for Intel sample driver be v210.
| -rw-r--r-- | loader/loader.c | 24 | ||||
| -rw-r--r-- | loader/loader.h | 2 |
2 files changed, 19 insertions, 7 deletions
diff --git a/loader/loader.c b/loader/loader.c index f1a8556a..7bbcf87a 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -1124,7 +1124,8 @@ static void loader_scanned_icd_init(const struct loader_instance *inst, static void loader_scanned_icd_add( const struct loader_instance *inst, struct loader_icd_libs *icd_libs, - const char *filename) + const char *filename, + uint32_t api_version) { loader_platform_dl_handle handle; PFN_vkCreateInstance fp_create_inst; @@ -1169,6 +1170,7 @@ static void loader_scanned_icd_add( new_node = &(icd_libs->list[icd_libs->count]); new_node->handle = handle; + new_node->api_version = api_version; new_node->GetInstanceProcAddr = fp_get_proc_addr; new_node->CreateInstance = fp_create_inst; new_node->EnumerateInstanceExtensionProperties = fp_get_global_ext_props; @@ -1897,7 +1899,7 @@ void loader_icd_scan( json = loader_get_json(file_str); if (!json) continue; - cJSON *item; + cJSON *item, *itemICD; item = cJSON_GetObjectItem(json, "file_format_version"); if (item == NULL) { loader_platform_thread_unlock_mutex(&loader_json_lock); @@ -1909,9 +1911,9 @@ void loader_icd_scan( if (strcmp(file_vers, "\"1.0.0\"") != 0) loader_log(VK_DBG_REPORT_WARN_BIT, 0, "Unexpected manifest file version (expected 1.0.0), may cause errors"); loader_tls_heap_free(file_vers); - item = cJSON_GetObjectItem(json, "ICD"); - if (item != NULL) { - item = cJSON_GetObjectItem(item, "library_path"); + itemICD = cJSON_GetObjectItem(json, "ICD"); + if (itemICD != NULL) { + item = cJSON_GetObjectItem(itemICD, "library_path"); if (item != NULL) { char *temp= cJSON_Print(item); if (!temp || strlen(temp) == 0) { @@ -1946,8 +1948,18 @@ void loader_icd_scan( // a filename which is assumed in a system directory loader_get_fullpath(library_path, DEFAULT_VK_DRIVERS_PATH, sizeof(fullpath), fullpath); } - loader_scanned_icd_add(inst, icds, fullpath); + + uint32_t vers = 0; + item = cJSON_GetObjectItem(itemICD, "api_version"); + if (item != NULL) { + temp= cJSON_Print(item); + vers = loader_make_version(temp); + loader_tls_heap_free(temp); + } + loader_scanned_icd_add(inst, icds, fullpath, vers); } + else + loader_log(VK_DBG_REPORT_WARN_BIT, 0, "Can't find \"library_path\" object in ICD JSON file %s, skipping", file_str); } else loader_log(VK_DBG_REPORT_WARN_BIT, 0, "Can't find \"ICD\" object in ICD JSON file %s, skipping", file_str); diff --git a/loader/loader.h b/loader/loader.h index c9cf11a2..d184e165 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -235,7 +235,7 @@ struct loader_struct { struct loader_scanned_icds { char *lib_name; loader_platform_dl_handle handle; - + uint32_t api_version; PFN_vkGetInstanceProcAddr GetInstanceProcAddr; PFN_vkCreateInstance CreateInstance; PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; |
