From e1761cc6385ef0332e4d8d3259f7b9ee3af1171e Mon Sep 17 00:00:00 2001 From: Courtney Goeltzenleuchter Date: Mon, 6 Jul 2015 17:45:08 -0600 Subject: loader: Validate global layers requested by app --- loader/loader.c | 22 ++++++++++++++++++++++ loader/loader.h | 7 ++++++- loader/trampoline.c | 10 ++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/loader/loader.c b/loader/loader.c index 62584ac0..b8454575 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -2227,6 +2227,28 @@ static uint32_t loader_activate_device_layers( return dev->activated_layer_list.count; } +VkResult loader_validate_instance_layers( + const VkInstanceCreateInfo* pCreateInfo) +{ + struct loader_layer_properties *prop; + + for (uint32_t i = 0; i < pCreateInfo->layerCount; i++) { + prop = get_layer_property(pCreateInfo->ppEnabledLayerNames[i], + &loader.global_layer_list); + if (!prop) { + return VK_ERROR_INVALID_LAYER; + } + } + + return VK_SUCCESS; +} + +VkResult loader_validate_instance_extensions( + const VkInstanceCreateInfo* pCreateInfo) +{ + return VK_SUCCESS; +} + VkResult loader_CreateInstance( const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance) diff --git a/loader/loader.h b/loader/loader.h index a336238a..8982bf17 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -335,6 +335,12 @@ bool compare_vk_extension_properties( const VkExtensionProperties* op1, const VkExtensionProperties* op2); +VkResult loader_validate_instance_layers( + const VkInstanceCreateInfo* pCreateInfo); + +VkResult loader_validate_instance_extensions( + const VkInstanceCreateInfo* pCreateInfo); + /* instance layer chain termination entrypoint definitions */ VkResult loader_CreateInstance( const VkInstanceCreateInfo* pCreateInfo, @@ -415,7 +421,6 @@ void loader_add_to_layer_list( struct loader_layer_list *list, uint32_t prop_list_count, const struct loader_layer_properties *props); -bool loader_is_extension_scanned(const VkExtensionProperties *ext_prop); void loader_icd_scan(void); void loader_layer_scan(void); void loader_coalesce_extensions(void); diff --git a/loader/trampoline.c b/loader/trampoline.c index 0afa9e1d..b3df9bd3 100644 --- a/loader/trampoline.c +++ b/loader/trampoline.c @@ -53,6 +53,16 @@ LOADER_EXPORT VkResult VKAPI vkCreateInstance( /* merge any duplicate extensions */ loader_platform_thread_once(&once_exts, loader_coalesce_extensions); + res = loader_validate_instance_layers(pCreateInfo); + if (res != VK_SUCCESS) { + return res; + } + + res = loader_validate_instance_extensions(pCreateInfo); + if (res != VK_SUCCESS) { + return res; + } + if (pCreateInfo->pAllocCb && pCreateInfo->pAllocCb->pfnAlloc && pCreateInfo->pAllocCb->pfnFree) { -- cgit v1.2.3