mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 15:50:11 +01:00
anv: ensure consistent layout transitions in render passes
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Ivan Briano <ivan.briano@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23523>
This commit is contained in:
parent
76cf391255
commit
eed788213b
1 changed files with 23 additions and 6 deletions
|
|
@ -3531,11 +3531,30 @@ cmd_buffer_barrier(struct anv_cmd_buffer *cmd_buffer,
|
||||||
const uint32_t level_count =
|
const uint32_t level_count =
|
||||||
vk_image_subresource_level_count(&image->vk, range);
|
vk_image_subresource_level_count(&image->vk, range);
|
||||||
|
|
||||||
|
VkImageLayout old_layout = img_barrier->oldLayout;
|
||||||
|
VkImageLayout new_layout = img_barrier->newLayout;
|
||||||
|
|
||||||
|
/* If we're inside a render pass, the runtime might have converted some
|
||||||
|
* layouts from GENERAL to FEEDBACK_LOOP. Check if that's the case and
|
||||||
|
* reconvert back to the original layout so that application barriers
|
||||||
|
* within renderpass are operating with consistent layouts.
|
||||||
|
*/
|
||||||
|
if (!cmd_buffer->vk.runtime_rp_barrier &&
|
||||||
|
cmd_buffer->vk.render_pass != NULL) {
|
||||||
|
VkImageLayout subpass_att_layout, subpass_stencil_att_layout;
|
||||||
|
|
||||||
|
vk_command_buffer_get_attachment_layout(
|
||||||
|
&cmd_buffer->vk, &image->vk,
|
||||||
|
&subpass_att_layout, &subpass_stencil_att_layout);
|
||||||
|
|
||||||
|
old_layout = subpass_att_layout;
|
||||||
|
new_layout = subpass_att_layout;
|
||||||
|
}
|
||||||
|
|
||||||
if (range->aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) {
|
if (range->aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) {
|
||||||
transition_depth_buffer(cmd_buffer, image,
|
transition_depth_buffer(cmd_buffer, image,
|
||||||
base_layer, layer_count,
|
base_layer, layer_count,
|
||||||
img_barrier->oldLayout,
|
old_layout, new_layout,
|
||||||
img_barrier->newLayout,
|
|
||||||
false /* will_full_fast_clear */);
|
false /* will_full_fast_clear */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3543,8 +3562,7 @@ cmd_buffer_barrier(struct anv_cmd_buffer *cmd_buffer,
|
||||||
transition_stencil_buffer(cmd_buffer, image,
|
transition_stencil_buffer(cmd_buffer, image,
|
||||||
range->baseMipLevel, level_count,
|
range->baseMipLevel, level_count,
|
||||||
base_layer, layer_count,
|
base_layer, layer_count,
|
||||||
img_barrier->oldLayout,
|
old_layout, new_layout,
|
||||||
img_barrier->newLayout,
|
|
||||||
false /* will_full_fast_clear */);
|
false /* will_full_fast_clear */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3555,8 +3573,7 @@ cmd_buffer_barrier(struct anv_cmd_buffer *cmd_buffer,
|
||||||
transition_color_buffer(cmd_buffer, image, 1UL << aspect_bit,
|
transition_color_buffer(cmd_buffer, image, 1UL << aspect_bit,
|
||||||
range->baseMipLevel, level_count,
|
range->baseMipLevel, level_count,
|
||||||
base_layer, layer_count,
|
base_layer, layer_count,
|
||||||
img_barrier->oldLayout,
|
old_layout, new_layout,
|
||||||
img_barrier->newLayout,
|
|
||||||
img_barrier->srcQueueFamilyIndex,
|
img_barrier->srcQueueFamilyIndex,
|
||||||
img_barrier->dstQueueFamilyIndex,
|
img_barrier->dstQueueFamilyIndex,
|
||||||
false /* will_full_fast_clear */);
|
false /* will_full_fast_clear */);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue