radeonsi: use better DCC clear codes

Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
Marek Olšák
2018-10-29 20:46:48 -04:00
parent d059eae269
commit 832ab883e2
+21 -5
View File
@@ -34,6 +34,15 @@ enum {
SI_CLEAR_SURFACE = SI_SAVE_FRAMEBUFFER | SI_SAVE_FRAGMENT_STATE,
};
enum si_dcc_clear_code
{
DCC_CLEAR_COLOR_0000 = 0x00000000,
DCC_CLEAR_COLOR_0001 = 0x40404040,
DCC_CLEAR_COLOR_1110 = 0x80808080,
DCC_CLEAR_COLOR_1111 = 0xC0C0C0C0,
DCC_CLEAR_COLOR_REG = 0x20202020,
};
static void si_alloc_separate_cmask(struct si_screen *sscreen,
struct si_texture *tex)
{
@@ -133,7 +142,7 @@ static bool vi_get_fast_clear_parameters(enum pipe_format base_format,
return false;
*eliminate_needed = true;
*clear_value = 0x20202020U; /* use CB clear color registers */
*clear_value = DCC_CLEAR_COLOR_REG;
if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN)
return true; /* need ELIMINATE_FAST_CLEAR */
@@ -208,10 +217,17 @@ static bool vi_get_fast_clear_parameters(enum pipe_format base_format,
*/
*eliminate_needed = false;
if (color_value)
*clear_value |= 0x80808080U;
if (alpha_value)
*clear_value |= 0x40404040U;
if (color_value) {
if (alpha_value)
*clear_value = DCC_CLEAR_COLOR_1111;
else
*clear_value = DCC_CLEAR_COLOR_1110;
} else {
if (alpha_value)
*clear_value = DCC_CLEAR_COLOR_0001;
else
*clear_value = DCC_CLEAR_COLOR_0000;
}
return true;
}