radv: initialize with expanded cmask if the destination layout needs it

If radv_layout_can_fast_clear() is false, 028C70_COMPRESSION is unset when
the image is rendered to and CMASK isn't updated. This appears to cause
FMASK to be ignored and the 0th sample to always be used.

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3449
Fixes: 7b21ce401f
   ('radv: disable FMASK compression when drawing with GENERAL layout')

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6745>
(cherry picked from commit 85cc2950a0)
This commit is contained in:
Rhys Perry 2020-09-15 19:55:47 +01:00 committed by Eric Engestrom
parent c0d443656f
commit d226595210
2 changed files with 11 additions and 3 deletions

View file

@ -22,7 +22,7 @@
"description": "radv: initialize with expanded cmask if the destination layout needs it",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": "7b21ce401f7e81deca5ab6a4353b1369d059bcee"
},

View file

@ -5517,8 +5517,16 @@ static void radv_init_color_image_metadata(struct radv_cmd_buffer *cmd_buffer,
if (radv_image_has_cmask(image)) {
uint32_t value = 0xffffffffu; /* Fully expanded mode. */
/* TODO: clarify this. */
if (radv_image_has_fmask(image)) {
/* TODO: clarify why 0xccccccccu is used. */
/* If CMASK isn't updated with the new layout, we should use the
* fully expanded mode so that the image is read correctly if
* CMASK is used (such as when transitioning to a compressed
* layout).
*/
if (radv_image_has_fmask(image) &&
radv_layout_can_fast_clear(image, dst_layout,
dst_render_loop, dst_queue_mask)) {
value = 0xccccccccu;
}