diff options
| author | Tobin Ehlis <tobine@google.com> | 2016-06-22 09:06:48 -0600 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-06-23 13:49:43 -0600 |
| commit | b45b067793f44a51463f8a198884410f450804ef (patch) | |
| tree | 06219842156ae8fcc2c05dea900d9fa922fb0a88 /layers/core_validation.cpp | |
| parent | be2ddfb5349fcea5f9f0844eeade313037e08c35 (diff) | |
| download | usermoji-b45b067793f44a51463f8a198884410f450804ef.tar.xz | |
layers: Refactor CreateFramebuffer
Migrate validation code to PreCall* function.
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index bb793196..f343e31d 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -8250,21 +8250,32 @@ static bool ValidateAttachmentImageUsage(layer_data *dev_data, const VkFramebuff return skip_call; } +// Validate VkFramebufferCreateInfo state prior to calling down chain to create Framebuffer object +// Return true if an error is encountered and callback returns true to skip call down chain +// false indicates that call down chain should proceed +static bool PreCallValidateCreateFramebuffer(layer_data *dev_data, const VkFramebufferCreateInfo *pCreateInfo) { + // TODO : Verify that renderPass FB is created with is compatible with FB + bool skip_call = false; + skip_call |= ValidateAttachmentImageUsage(dev_data, pCreateInfo); + return skip_call; +} + VKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkFramebuffer *pFramebuffer) { - bool skip_call = false; - VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; - // TODO : Verify that renderPass FB is created with is compatible with FB layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); + std::unique_lock<std::mutex> lock(global_lock); + bool skip_call = PreCallValidateCreateFramebuffer(dev_data, pCreateInfo); + lock.unlock(); + + if (skip_call) + return VK_ERROR_VALIDATION_FAILED_EXT; + + VkResult result = dev_data->device_dispatch_table->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer); - skip_call |= ValidateAttachmentImageUsage(dev_data, pCreateInfo); - if (skip_call == false) { - result = dev_data->device_dispatch_table->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer); - } if (VK_SUCCESS == result) { // Shadow create info and store in map - std::lock_guard<std::mutex> lock(global_lock); + lock.lock(); dev_data->frameBufferMap.insert( std::make_pair(*pFramebuffer, unique_ptr<FRAMEBUFFER_NODE>(new FRAMEBUFFER_NODE( |
