aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2015-11-17 17:35:40 -0700
committerJon Ashburn <jon@lunarg.com>2015-11-18 17:05:38 -0700
commit7dd84581607249f9dd6c30b1a511c3be946a73e7 (patch)
treee9547e44628379fb35f2d3a911b692069030de53
parent01261e73d94be281a6b8bc73e088333841fb83d6 (diff)
downloadusermoji-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.c24
-rw-r--r--loader/loader.h2
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;