From 4be501f933856f43e8445619f894d1a85892333c Mon Sep 17 00:00:00 2001 From: Dave Houlton Date: Tue, 8 May 2018 14:58:01 -0600 Subject: layers: fix imageview 3D layout transition Fix an oversight when recording a 3D image subresource layout transition that is set by way of a 2D or 2D_ARRAY image view. Change-Id: Ifbf7645fb2705fef6f82030f4e3e1da0e9da2f2c --- layers/buffer_validation.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'layers/buffer_validation.cpp') diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp index dd44c7a5..217217cf 100644 --- a/layers/buffer_validation.cpp +++ b/layers/buffer_validation.cpp @@ -295,13 +295,23 @@ void SetImageLayout(layer_data *device_data, GLOBAL_CB_NODE *cb_node, const IMAG image_subresource_range.levelCount = 1; SetImageLayout(device_data, cb_node, image_state, image_subresource_range, layout); } + // Set image layout for all slices of an image view void SetImageViewLayout(layer_data *device_data, GLOBAL_CB_NODE *cb_node, VkImageView imageView, const VkImageLayout &layout) { auto view_state = GetImageViewState(device_data, imageView); assert(view_state); - SetImageLayout(device_data, cb_node, GetImageState(device_data, view_state->create_info.image), - view_state->create_info.subresourceRange, layout); + IMAGE_STATE *image_state = GetImageState(device_data, view_state->create_info.image); + VkImageSubresourceRange sub_range = view_state->create_info.subresourceRange; + + // When changing the layout of a 3D image subresource via a 2D or 2D_ARRRAY image view, all depth slices of + // the subresource mip level(s) are transitioned, ignoring any layers restriction in the subresource info. + if ((image_state->createInfo.imageType == VK_IMAGE_TYPE_3D) && (view_state->create_info.viewType != VK_IMAGE_VIEW_TYPE_3D)) { + sub_range.baseArrayLayer = 0; + sub_range.layerCount = image_state->createInfo.extent.depth; + } + + SetImageLayout(device_data, cb_node, image_state, sub_range, layout); } bool VerifyFramebufferAndRenderPassLayouts(layer_data *device_data, GLOBAL_CB_NODE *pCB, -- cgit v1.2.3