diff options
| author | Dave Houlton <daveh@lunarg.com> | 2018-05-08 14:58:01 -0600 |
|---|---|---|
| committer | Dave Houlton <daveh@lunarg.com> | 2018-05-11 10:55:16 -0600 |
| commit | 4be501f933856f43e8445619f894d1a85892333c (patch) | |
| tree | 0a9316b8d373065827f6c5165c1952aa8122d875 /layers/buffer_validation.cpp | |
| parent | c2810b24a959f6007992671964114b20cf825efe (diff) | |
| download | usermoji-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.cpp | 14 |
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, |
