radv: Never allow fast clears on DCC images that are not compressed.
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7004>
This commit is contained in:
parent
da36577558
commit
88f392f6f8
|
@ -1622,7 +1622,7 @@ radv_emit_fb_color_state(struct radv_cmd_buffer *cmd_buffer,
|
|||
cb_color_info &= C_028C70_DCC_ENABLE;
|
||||
}
|
||||
|
||||
if (!radv_layout_can_fast_clear(image, layout, in_render_loop,
|
||||
if (!radv_layout_can_fast_clear(cmd_buffer->device, image, layout, in_render_loop,
|
||||
radv_image_queue_family_mask(image,
|
||||
cmd_buffer->queue_family_index,
|
||||
cmd_buffer->queue_family_index))) {
|
||||
|
@ -6159,7 +6159,7 @@ static void radv_init_color_image_metadata(struct radv_cmd_buffer *cmd_buffer,
|
|||
* layout).
|
||||
*/
|
||||
if (radv_image_has_fmask(image) &&
|
||||
radv_layout_can_fast_clear(image, dst_layout,
|
||||
radv_layout_can_fast_clear(cmd_buffer->device, image, dst_layout,
|
||||
dst_render_loop, dst_queue_mask)) {
|
||||
value = 0xccccccccu;
|
||||
}
|
||||
|
@ -6221,15 +6221,19 @@ static void radv_handle_color_image_transition(struct radv_cmd_buffer *cmd_buffe
|
|||
} else if (radv_layout_dcc_compressed(cmd_buffer->device, image, src_layout, src_render_loop, src_queue_mask) &&
|
||||
!radv_layout_dcc_compressed(cmd_buffer->device, image, dst_layout, dst_render_loop, dst_queue_mask)) {
|
||||
radv_decompress_dcc(cmd_buffer, image, range);
|
||||
} else if (radv_layout_can_fast_clear(image, src_layout, src_render_loop, src_queue_mask) &&
|
||||
!radv_layout_can_fast_clear(image, dst_layout, dst_render_loop, dst_queue_mask)) {
|
||||
} else if (radv_layout_can_fast_clear(cmd_buffer->device, image, src_layout,
|
||||
src_render_loop, src_queue_mask) &&
|
||||
!radv_layout_can_fast_clear(cmd_buffer->device, image, dst_layout,
|
||||
dst_render_loop, dst_queue_mask)) {
|
||||
radv_fast_clear_flush_image_inplace(cmd_buffer, image, range);
|
||||
}
|
||||
} else if (radv_image_has_cmask(image) || radv_image_has_fmask(image)) {
|
||||
bool fce_eliminate = false, fmask_expand = false;
|
||||
|
||||
if (radv_layout_can_fast_clear(image, src_layout, src_render_loop, src_queue_mask) &&
|
||||
!radv_layout_can_fast_clear(image, dst_layout, dst_render_loop, dst_queue_mask)) {
|
||||
if (radv_layout_can_fast_clear(cmd_buffer->device, image, src_layout,
|
||||
src_render_loop, src_queue_mask) &&
|
||||
!radv_layout_can_fast_clear(cmd_buffer->device, image, dst_layout,
|
||||
dst_render_loop, dst_queue_mask)) {
|
||||
fce_eliminate = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -1779,11 +1779,16 @@ bool radv_layout_is_htile_compressed(const struct radv_image *image,
|
|||
queue_mask == (1u << RADV_QUEUE_GENERAL)));
|
||||
}
|
||||
|
||||
bool radv_layout_can_fast_clear(const struct radv_image *image,
|
||||
bool radv_layout_can_fast_clear(const struct radv_device *device,
|
||||
const struct radv_image *image,
|
||||
VkImageLayout layout,
|
||||
bool in_render_loop,
|
||||
unsigned queue_mask)
|
||||
{
|
||||
if (radv_image_has_dcc(image) &&
|
||||
!radv_layout_dcc_compressed(device, image, layout, in_render_loop, queue_mask))
|
||||
return false;
|
||||
|
||||
return layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL &&
|
||||
queue_mask == (1u << RADV_QUEUE_GENERAL);
|
||||
}
|
||||
|
|
|
@ -1630,7 +1630,7 @@ radv_can_fast_clear_color(struct radv_cmd_buffer *cmd_buffer,
|
|||
if (!radv_image_view_can_fast_clear(cmd_buffer->device, iview))
|
||||
return false;
|
||||
|
||||
if (!radv_layout_can_fast_clear(iview->image, image_layout, in_render_loop,
|
||||
if (!radv_layout_can_fast_clear(cmd_buffer->device, iview->image, image_layout, in_render_loop,
|
||||
radv_image_queue_family_mask(iview->image,
|
||||
cmd_buffer->queue_family_index,
|
||||
cmd_buffer->queue_family_index)))
|
||||
|
|
|
@ -1927,7 +1927,8 @@ bool radv_layout_is_htile_compressed(const struct radv_image *image,
|
|||
bool in_render_loop,
|
||||
unsigned queue_mask);
|
||||
|
||||
bool radv_layout_can_fast_clear(const struct radv_image *image,
|
||||
bool radv_layout_can_fast_clear(const struct radv_device *device,
|
||||
const struct radv_image *image,
|
||||
VkImageLayout layout,
|
||||
bool in_render_loop,
|
||||
unsigned queue_mask);
|
||||
|
|
Loading…
Reference in New Issue