radv: update the FCE predicate for fast clears using CMASK
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 5 Jan 2021 14:10:14 +0000 (15:10 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 13 Jan 2021 11:24:30 +0000 (12:24 +0100)
Fast clearing with CMASK should always be eliminated.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8332>

src/amd/vulkan/radv_meta_clear.c

index decc5d4..0212327 100644 (file)
@@ -1678,10 +1678,10 @@ radv_fast_clear_color(struct radv_cmd_buffer *cmd_buffer,
        cmask_clear_value = radv_get_cmask_fast_clear_value(iview->image);
 
        /* clear cmask buffer */
+       bool need_decompress_pass = false;
        if (radv_dcc_enabled(iview->image, iview->base_mip)) {
                uint32_t reset_value;
                bool can_avoid_fast_clear_elim;
-               bool need_decompress_pass = false;
 
                vi_get_fast_clear_parameters(cmd_buffer->device,
                                             iview->image->vk_format,
@@ -1701,18 +1701,22 @@ radv_fast_clear_color(struct radv_cmd_buffer *cmd_buffer,
 
                flush_bits |= radv_clear_dcc(cmd_buffer, iview->image, &range,
                                             reset_value);
-
-               radv_update_fce_metadata(cmd_buffer, iview->image, &range,
-                                        need_decompress_pass);
        } else {
                flush_bits = radv_clear_cmask(cmd_buffer, iview->image,
                                              &range, cmask_clear_value);
+
+               /* Fast clearing with CMASK should always be eliminated. */
+               need_decompress_pass = true;
        }
 
        if (post_flush) {
                *post_flush |= flush_bits;
        }
 
+       /* Update the FCE predicate to perform a fast-clear eliminate. */
+       radv_update_fce_metadata(cmd_buffer, iview->image, &range,
+                                need_decompress_pass);
+
        radv_update_color_clear_metadata(cmd_buffer, iview, subpass_att,
                                         clear_color);
 }