aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-01-11 12:09:31 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-01-11 15:27:45 -0700
commite73c7e31fdaab817d29c8546b541a45e287b90a9 (patch)
tree2d2e2afdc1043bf9045777f51bd932dffeb70d5f /layers/core_validation.cpp
parentea5d4dfb890bf65b0305718f37aad37ec8113a6b (diff)
downloadusermoji-e73c7e31fdaab817d29c8546b541a45e287b90a9.tar.xz
layers: Refactor CreateSwapChain for recording
Added a PostCallRecord function for this API. Change-Id: I6f9e67ea5fbcf1ee4f54043c5269ad282339a9db
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 69783093..e4f51595 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -12062,18 +12062,9 @@ static bool PreCallValidateCreateSwapchainKHR(layer_data *dev_data, VkSwapchainC
return false;
}
-VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo,
- const VkAllocationCallbacks *pAllocator,
- VkSwapchainKHR *pSwapchain) {
- layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
- auto surface_state = getSurfaceState(dev_data->instance_data, pCreateInfo->surface);
- auto old_swapchain_state = getSwapchainNode(dev_data, pCreateInfo->oldSwapchain);
-
- if (PreCallValidateCreateSwapchainKHR(dev_data, pCreateInfo, surface_state, old_swapchain_state))
- return VK_ERROR_VALIDATION_FAILED_EXT;
-
- VkResult result = dev_data->dispatch_table.CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
-
+static void PostCallRecordCreateSwapchainKHR(layer_data *dev_data, VkResult result, const VkSwapchainCreateInfoKHR *pCreateInfo,
+ VkSwapchainKHR *pSwapchain, SURFACE_STATE *surface_state,
+ SWAPCHAIN_NODE *old_swapchain_state) {
if (VK_SUCCESS == result) {
std::lock_guard<std::mutex> lock(global_lock);
auto swapchain_state = unique_ptr<SWAPCHAIN_NODE>(new SWAPCHAIN_NODE(pCreateInfo, *pSwapchain));
@@ -12082,12 +12073,27 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(VkDevice device, const VkSwapc
} else {
surface_state->swapchain = nullptr;
}
-
// Spec requires that even if CreateSwapchainKHR fails, oldSwapchain behaves as replaced.
if (old_swapchain_state) {
old_swapchain_state->replaced = true;
}
surface_state->old_swapchain = old_swapchain_state;
+ return;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo,
+ const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain) {
+ layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
+ auto surface_state = getSurfaceState(dev_data->instance_data, pCreateInfo->surface);
+ auto old_swapchain_state = getSwapchainNode(dev_data, pCreateInfo->oldSwapchain);
+
+ if (PreCallValidateCreateSwapchainKHR(dev_data, pCreateInfo, surface_state, old_swapchain_state)) {
+ return VK_ERROR_VALIDATION_FAILED_EXT;
+ }
+
+ VkResult result = dev_data->dispatch_table.CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
+
+ PostCallRecordCreateSwapchainKHR(dev_data, result, pCreateInfo, pSwapchain, surface_state, old_swapchain_state);
return result;
}