diff options
| author | Tobin Ehlis <tobine@google.com> | 2016-10-25 09:36:53 -0600 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-10-25 21:01:49 -0600 |
| commit | 82177dbd6a4da311c2447a51414f31145d3e2fc0 (patch) | |
| tree | a1a9fc7f7edd02ae849187b6ac2a6870dd04c388 /layers/core_validation.cpp | |
| parent | 532eb6def55bd1247ef3d2be71bc846610501d4b (diff) | |
| download | usermoji-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.cpp | 29 |
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; } |
