From 214092da879252c3935eaee47b0b2ac42b682268 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Sun, 20 Feb 2022 00:00:48 +0200 Subject: [PATCH] anv: fix fast clear type value with external images Disable fast clear if not supported by the external modifier. v2: Set fast_clear value to NONE in case of import/export from/to external v3: Move logic next to existing acquire/release checks (Nanley) Signed-off-by: Lionel Landwerlin Cc: mesa-stable Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6056 Reviewed-by: Nanley Chery Part-of: --- src/intel/vulkan/genX_cmd_buffer.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index d48fa8f7fd9..6a9cac486d9 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -1423,14 +1423,22 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer, anv_layout_to_aux_usage(devinfo, image, aspect, 0, initial_layout); enum isl_aux_usage final_aux_usage = anv_layout_to_aux_usage(devinfo, image, aspect, 0, final_layout); + enum anv_fast_clear_type initial_fast_clear = + anv_layout_to_fast_clear_type(devinfo, image, aspect, initial_layout); + enum anv_fast_clear_type final_fast_clear = + anv_layout_to_fast_clear_type(devinfo, image, aspect, final_layout); /* We must override the anv_layout_to_* functions because they are unaware of * acquire/release direction. */ if (private_binding_acquire) { initial_aux_usage = isl_mod_info->aux_usage; + initial_fast_clear = isl_mod_info->supports_clear_color ? + initial_fast_clear : ANV_FAST_CLEAR_NONE; } else if (private_binding_release) { final_aux_usage = isl_mod_info->aux_usage; + final_fast_clear = isl_mod_info->supports_clear_color ? + final_fast_clear : ANV_FAST_CLEAR_NONE; } /* The current code assumes that there is no mixing of CCS_E and CCS_D. @@ -1453,10 +1461,6 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer, /* If the initial layout supports more fast clear than the final layout * then we need at least a partial resolve. */ - const enum anv_fast_clear_type initial_fast_clear = - anv_layout_to_fast_clear_type(devinfo, image, aspect, initial_layout); - const enum anv_fast_clear_type final_fast_clear = - anv_layout_to_fast_clear_type(devinfo, image, aspect, final_layout); if (final_fast_clear < initial_fast_clear) resolve_op = ISL_AUX_OP_PARTIAL_RESOLVE;