aboutsummaryrefslogtreecommitdiff
path: root/loader/loader.c
diff options
context:
space:
mode:
authorLenny Komow <lenny@lunarg.com>2018-02-13 15:58:47 -0700
committerMike Schuchardt <mikes@lunarg.com>2018-03-09 13:54:31 -0700
commitbc9fdf492563939209b0758819caea3302c9c2cb (patch)
tree3b5954fdd0f53f9a37ca93506d9fa7120f0864c3 /loader/loader.c
parent4c88179f99a2f6e6acd9b5574dd6fb22cde9037f (diff)
downloadusermoji-bc9fdf492563939209b0758819caea3302c9c2cb.tar.xz
loader: Extend pre-instance intercepts for 1.1
Add the ability to intercept vkEnumerateInstanceVersion through the pre-instance intercept mechanism
Diffstat (limited to 'loader/loader.c')
-rw-r--r--loader/loader.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/loader/loader.c b/loader/loader.c
index ff777d5a..0b88f661 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -98,6 +98,10 @@ loader_platform_thread_mutex loader_json_lock;
LOADER_PLATFORM_THREAD_ONCE_DECLARATION(once_init);
+// This loader supports Vulkan API version 1.1
+uint32_t loader_major_version = 1;
+uint32_t loader_minor_version = 1;
+
void *loader_instance_heap_alloc(const struct loader_instance *instance, size_t size, VkSystemAllocationScope alloc_scope) {
void *pMemory = NULL;
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
@@ -2864,6 +2868,15 @@ static VkResult loader_read_json_layer(const struct loader_instance *inst, struc
props->pre_instance_functions.enumerate_instance_layer_properties[len] = '\0';
cJSON_Free(inst_layer_name);
}
+
+ cJSON *inst_version_json = cJSON_GetObjectItem(pre_instance, "vkEnumerateInstanceVersion");
+ if (inst_version_json) {
+ char *inst_version_name = cJSON_Print(inst_version_json);
+ size_t len = strlen(inst_version_name) >= MAX_STRING_SIZE ? MAX_STRING_SIZE - 3 : strlen(inst_version_name) - 2;
+ strncpy(props->pre_instance_functions.enumerate_instance_version, inst_version_name + 1, len);
+ props->pre_instance_functions.enumerate_instance_version[len] = '\0';
+ cJSON_Free(inst_version_name);
+ }
}
}
@@ -6095,6 +6108,14 @@ VkStringErrorFlags vk_string_validate(const int max_length, const char *utf8) {
}
VKAPI_ATTR VkResult VKAPI_CALL
+terminator_EnumerateInstanceVersion(const VkEnumerateInstanceVersionChain *chain, uint32_t* pApiVersion) {
+ // NOTE: The Vulkan WG doesn't want us checking pApiVersion for NULL, but instead
+ // prefers us crashing.
+ *pApiVersion = VK_MAKE_VERSION(loader_major_version, loader_minor_version, 0);
+ return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL
terminator_EnumerateInstanceExtensionProperties(const VkEnumerateInstanceExtensionPropertiesChain *chain, const char *pLayerName,
uint32_t *pPropertyCount, VkExtensionProperties *pProperties) {
struct loader_extension_list *global_ext_list = NULL;