diff options
| author | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-07-06 17:45:08 -0600 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-07-07 17:57:48 -0600 |
| commit | e1761cc6385ef0332e4d8d3259f7b9ee3af1171e (patch) | |
| tree | 800a443ba5afbe291e03fbf7650a2f48c500aad7 | |
| parent | 4e6f36945ac594bb08d3a2701316a5d4cbdf9af2 (diff) | |
| download | usermoji-e1761cc6385ef0332e4d8d3259f7b9ee3af1171e.tar.xz | |
loader: Validate global layers requested by app
| -rw-r--r-- | loader/loader.c | 22 | ||||
| -rw-r--r-- | loader/loader.h | 7 | ||||
| -rw-r--r-- | loader/trampoline.c | 10 |
3 files changed, 38 insertions, 1 deletions
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) { |
