aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCourtney Goeltzenleuchter <courtney@LunarG.com>2015-07-06 17:45:08 -0600
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-07-07 17:57:48 -0600
commite1761cc6385ef0332e4d8d3259f7b9ee3af1171e (patch)
tree800a443ba5afbe291e03fbf7650a2f48c500aad7
parent4e6f36945ac594bb08d3a2701316a5d4cbdf9af2 (diff)
downloadusermoji-e1761cc6385ef0332e4d8d3259f7b9ee3af1171e.tar.xz
loader: Validate global layers requested by app
-rw-r--r--loader/loader.c22
-rw-r--r--loader/loader.h7
-rw-r--r--loader/trampoline.c10
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) {