diff options
author | Marek Olšák <[email protected]> | 2013-12-17 13:27:56 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2013-12-18 01:20:11 +0100 |
commit | 37c24e6d867606e176a5164fc7ef1857862e76f8 (patch) | |
tree | ffbb31569e4ffd0f407b89b7e89a8f2d85bf8d88 /src/gallium/drivers/radeonsi/si_state.c | |
parent | 3352ff97c29a4ff3de594504886765a603899739 (diff) |
radeonsi: set CB_DISABLE if the color mask is 0
Also needed for the DB in-place decompression according to hw docs.
Reviewed-by: Alex Deucher <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_state.c')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_state.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 5c185382261..5274effbb68 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -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; } |