aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorTobin Ehlis <tobine@google.com>2016-10-25 09:36:53 -0600
committerTobin Ehlis <tobine@google.com>2016-10-25 21:01:49 -0600
commit82177dbd6a4da311c2447a51414f31145d3e2fc0 (patch)
treea1a9fc7f7edd02ae849187b6ac2a6870dd04c388 /layers/core_validation.cpp
parent532eb6def55bd1247ef3d2be71bc846610501d4b (diff)
downloadusermoji-82177dbd6a4da311c2447a51414f31145d3e2fc0.tar.xz
layers:Refactor CreateDescriptorSetLayout
Update CreateDescriptorSetLayout() to use Pre/Post pattern and split out validation of createInfo for the layout to occur before the creation of the layout.
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 71d140ba..c2b78c08 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -6715,17 +6715,32 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateSampler(VkDevice device, const VkSamplerCre
return result;
}
+static bool PreCallValidateCreateDescriptorSetLayout(layer_data *dev_data, const VkDescriptorSetLayoutCreateInfo *create_info) {
+ if (dev_data->instance_data->disabled.create_descriptor_set_layout)
+ return false;
+ return cvdescriptorset::DescriptorSetLayout::ValidateCreateInfo(dev_data->report_data, create_info);
+}
+
+static void PostCallRecordCreateDescriptorSetLayout(layer_data *dev_data, const VkDescriptorSetLayoutCreateInfo *create_info,
+ VkDescriptorSetLayout set_layout) {
+ // TODOSC : Capture layout bindings set
+ dev_data->descriptorSetLayoutMap[set_layout] = new cvdescriptorset::DescriptorSetLayout(create_info, set_layout);
+}
+
VKAPI_ATTR VkResult VKAPI_CALL
CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo,
const VkAllocationCallbacks *pAllocator, VkDescriptorSetLayout *pSetLayout) {
layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
- // TODO: Need to validate create state prior to calling down the chain
- VkResult result = dev_data->dispatch_table.CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
- if (VK_SUCCESS == result) {
- // TODOSC : Capture layout bindings set
- std::lock_guard<std::mutex> lock(global_lock);
- dev_data->descriptorSetLayoutMap[*pSetLayout] =
- new cvdescriptorset::DescriptorSetLayout(dev_data->report_data, pCreateInfo, *pSetLayout);
+ VkResult result = VK_ERROR_VALIDATION_FAILED_EXT;
+ std::unique_lock<std::mutex> lock(global_lock);
+ bool skip = PreCallValidateCreateDescriptorSetLayout(dev_data, pCreateInfo);
+ if (!skip) {
+ lock.unlock();
+ result = dev_data->dispatch_table.CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
+ if (VK_SUCCESS == result) {
+ lock.lock();
+ PostCallRecordCreateDescriptorSetLayout(dev_data, pCreateInfo, *pSetLayout);
+ }
}
return result;
}