Skip to content

Commit eed7882

Browse files
llandwerlin-intelMarge Bot
authored andcommitted
anv: ensure consistent layout transitions in render passes
Signed-off-by: Lionel Landwerlin <[email protected]> Reviewed-by: Ivan Briano <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23523>
1 parent 76cf391 commit eed7882

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

src/intel/vulkan/genX_cmd_buffer.c

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3531,20 +3531,38 @@ cmd_buffer_barrier(struct anv_cmd_buffer *cmd_buffer,
35313531
const uint32_t level_count =
35323532
vk_image_subresource_level_count(&image->vk, range);
35333533

3534+
VkImageLayout old_layout = img_barrier->oldLayout;
3535+
VkImageLayout new_layout = img_barrier->newLayout;
3536+
3537+
/* If we're inside a render pass, the runtime might have converted some
3538+
* layouts from GENERAL to FEEDBACK_LOOP. Check if that's the case and
3539+
* reconvert back to the original layout so that application barriers
3540+
* within renderpass are operating with consistent layouts.
3541+
*/
3542+
if (!cmd_buffer->vk.runtime_rp_barrier &&
3543+
cmd_buffer->vk.render_pass != NULL) {
3544+
VkImageLayout subpass_att_layout, subpass_stencil_att_layout;
3545+
3546+
vk_command_buffer_get_attachment_layout(
3547+
&cmd_buffer->vk, &image->vk,
3548+
&subpass_att_layout, &subpass_stencil_att_layout);
3549+
3550+
old_layout = subpass_att_layout;
3551+
new_layout = subpass_att_layout;
3552+
}
3553+
35343554
if (range->aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) {
35353555
transition_depth_buffer(cmd_buffer, image,
35363556
base_layer, layer_count,
3537-
img_barrier->oldLayout,
3538-
img_barrier->newLayout,
3557+
old_layout, new_layout,
35393558
false /* will_full_fast_clear */);
35403559
}
35413560

35423561
if (range->aspectMask & VK_IMAGE_ASPECT_STENCIL_BIT) {
35433562
transition_stencil_buffer(cmd_buffer, image,
35443563
range->baseMipLevel, level_count,
35453564
base_layer, layer_count,
3546-
img_barrier->oldLayout,
3547-
img_barrier->newLayout,
3565+
old_layout, new_layout,
35483566
false /* will_full_fast_clear */);
35493567
}
35503568

@@ -3555,8 +3573,7 @@ cmd_buffer_barrier(struct anv_cmd_buffer *cmd_buffer,
35553573
transition_color_buffer(cmd_buffer, image, 1UL << aspect_bit,
35563574
range->baseMipLevel, level_count,
35573575
base_layer, layer_count,
3558-
img_barrier->oldLayout,
3559-
img_barrier->newLayout,
3576+
old_layout, new_layout,
35603577
img_barrier->srcQueueFamilyIndex,
35613578
img_barrier->dstQueueFamilyIndex,
35623579
false /* will_full_fast_clear */);

0 commit comments

Comments
 (0)