radv: do not use CP predication for DCC decompressions
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 16 Aug 2018 16:56:22 +0000 (18:56 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 20 Aug 2018 09:54:37 +0000 (11:54 +0200)
This fixes a regression with some Unity demos. Not sure
what the root cause of the problem is, especially because
the driver doesn't perform any fast color clears. So, it
shouldn't be needed to decompress DCC. RadeonSI says that
the decompression is relatively cheap if the surface has
been decompressed already.

One possible improvement is to two use predicates, one for
DCC and one for FCE that could be cleared when DCC, FMASK
or CMASK are performed by the driver. That might skip some
unnecessary decompression passes (not DCC though).

Fixes: ff7daadca1 ("radv: enable/disable predication for the DCC decompression pass")
CC: 18.2 <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107563
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_meta_fast_clear.c

index f469a9ee8f8e57cf7c6c91085a1b892092be74ac..b4cc900028e41ac34c5593500237004bc1b316cb 100644 (file)
@@ -628,7 +628,7 @@ radv_emit_color_decompress(struct radv_cmd_buffer *cmd_buffer,
                pipeline = cmd_buffer->device->meta_state.fast_clear_flush.cmask_eliminate_pipeline;
        }
 
-       if (radv_image_has_dcc(image)) {
+       if (!decompress_dcc && radv_image_has_dcc(image)) {
                old_predicating = cmd_buffer->state.predicating;
 
                radv_emit_set_predication_state_from_image(cmd_buffer, image, true);
@@ -696,7 +696,7 @@ radv_emit_color_decompress(struct radv_cmd_buffer *cmd_buffer,
                                        &cmd_buffer->pool->alloc);
 
        }
-       if (radv_image_has_dcc(image)) {
+       if (!decompress_dcc && radv_image_has_dcc(image)) {
                cmd_buffer->state.predicating = old_predicating;
 
                radv_emit_set_predication_state_from_image(cmd_buffer, image, false);