radeonsi: set CB_DISABLE if the color mask is 0
authorMarek Olšák <marek.olsak@amd.com>
Tue, 17 Dec 2013 12:27:56 +0000 (13:27 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 18 Dec 2013 00:20:11 +0000 (01:20 +0100)
Also needed for the DB in-place decompression according to hw docs.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
src/gallium/drivers/radeonsi/si_state.c

index 5c185382261f1752b7f3b0fec801313bb788616d..5274effbb682a04cc1f2bbc38418bc9996173117 100644 (file)
@@ -252,20 +252,18 @@ static void *si_create_blend_state_mode(struct pipe_context *ctx,
        struct si_state_blend *blend = CALLOC_STRUCT(si_state_blend);
        struct si_pm4_state *pm4 = &blend->pm4;
 
-       uint32_t color_control;
+       uint32_t color_control = 0;
 
        if (blend == NULL)
                return NULL;
 
        blend->alpha_to_one = state->alpha_to_one;
 
-       color_control = S_028808_MODE(mode);
        if (state->logicop_enable) {
                color_control |= S_028808_ROP3(state->logicop_func | (state->logicop_func << 4));
        } else {
                color_control |= S_028808_ROP3(0xcc);
        }
-       si_pm4_set_reg(pm4, R_028808_CB_COLOR_CONTROL, color_control);
 
        si_pm4_set_reg(pm4, R_028B70_DB_ALPHA_TO_MASK,
                       S_028B70_ALPHA_TO_MASK_ENABLE(state->alpha_to_coverage) |
@@ -310,6 +308,13 @@ static void *si_create_blend_state_mode(struct pipe_context *ctx,
                si_pm4_set_reg(pm4, R_028780_CB_BLEND0_CONTROL + i * 4, blend_cntl);
        }
 
+       if (blend->cb_target_mask) {
+               color_control |= S_028808_MODE(mode);
+       } else {
+               color_control |= S_028808_MODE(V_028808_CB_DISABLE);
+       }
+       si_pm4_set_reg(pm4, R_028808_CB_COLOR_CONTROL, color_control);
+
        return blend;
 }