aboutsummaryrefslogtreecommitdiff
path: root/layers/buffer_validation.cpp
diff options
context:
space:
mode:
authorDave Houlton <daveh@lunarg.com>2018-05-08 14:58:01 -0600
committerDave Houlton <daveh@lunarg.com>2018-05-11 10:55:16 -0600
commit4be501f933856f43e8445619f894d1a85892333c (patch)
tree0a9316b8d373065827f6c5165c1952aa8122d875 /layers/buffer_validation.cpp
parentc2810b24a959f6007992671964114b20cf825efe (diff)
downloadusermoji-4be501f933856f43e8445619f894d1a85892333c.tar.xz
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
Diffstat (limited to 'layers/buffer_validation.cpp')
-rw-r--r--layers/buffer_validation.cpp14
1 files changed, 12 insertions, 2 deletions
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,