From bc9fdf492563939209b0758819caea3302c9c2cb Mon Sep 17 00:00:00 2001 From: Lenny Komow Date: Tue, 13 Feb 2018 15:58:47 -0700 Subject: loader: Extend pre-instance intercepts for 1.1 Add the ability to intercept vkEnumerateInstanceVersion through the pre-instance intercept mechanism --- loader/loader.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'loader/loader.c') 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); + } } } @@ -6094,6 +6107,14 @@ VkStringErrorFlags vk_string_validate(const int max_length, const char *utf8) { return result; } +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) { -- cgit v1.2.3