@@ -3531,20 +3531,38 @@ cmd_buffer_barrier(struct anv_cmd_buffer *cmd_buffer,
3531
3531
const uint32_t level_count =
3532
3532
vk_image_subresource_level_count (& image -> vk , range );
3533
3533
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
+
3534
3554
if (range -> aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT ) {
3535
3555
transition_depth_buffer (cmd_buffer , image ,
3536
3556
base_layer , layer_count ,
3537
- img_barrier -> oldLayout ,
3538
- img_barrier -> newLayout ,
3557
+ old_layout , new_layout ,
3539
3558
false /* will_full_fast_clear */ );
3540
3559
}
3541
3560
3542
3561
if (range -> aspectMask & VK_IMAGE_ASPECT_STENCIL_BIT ) {
3543
3562
transition_stencil_buffer (cmd_buffer , image ,
3544
3563
range -> baseMipLevel , level_count ,
3545
3564
base_layer , layer_count ,
3546
- img_barrier -> oldLayout ,
3547
- img_barrier -> newLayout ,
3565
+ old_layout , new_layout ,
3548
3566
false /* will_full_fast_clear */ );
3549
3567
}
3550
3568
@@ -3555,8 +3573,7 @@ cmd_buffer_barrier(struct anv_cmd_buffer *cmd_buffer,
3555
3573
transition_color_buffer (cmd_buffer , image , 1UL << aspect_bit ,
3556
3574
range -> baseMipLevel , level_count ,
3557
3575
base_layer , layer_count ,
3558
- img_barrier -> oldLayout ,
3559
- img_barrier -> newLayout ,
3576
+ old_layout , new_layout ,
3560
3577
img_barrier -> srcQueueFamilyIndex ,
3561
3578
img_barrier -> dstQueueFamilyIndex ,
3562
3579
false /* will_full_fast_clear */ );
0 commit comments