From 017cd5dcc36816e7aef5a7810b8a79d5c8ef777d Mon Sep 17 00:00:00 2001 From: Alex Deucher Date: Tue, 24 May 2011 22:44:16 -0400 Subject: [PATCH] r600g: fix eg/cayman scissor workaround Signed-off-by: Alex Deucher --- src/gallium/drivers/r600/evergreen_state.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index adf9366..14860af 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -861,7 +861,7 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx, struct r600_pipe_state *rstate = CALLOC_STRUCT(r600_pipe_state); u32 shader_mask, tl, br, target_mask; enum radeon_family family; - int scissor_width, scissor_height; + int tl_x, tl_y, br_x, br_y; if (rstate == NULL) return; @@ -892,20 +892,22 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx, target_mask ^= 0xf << (i * 4); shader_mask |= 0xf << (i * 4); } - scissor_width = state->width; - scissor_height = state->height; + tl_x = 0; + tl_y = 0; + br_x = state->width; + br_y = state->height; /* EG hw workaround */ - if (scissor_width == 0) - scissor_width = 1; - if (scissor_height == 0) - scissor_height = 1; + if (br_x == 0) + tl_x = 1; + if (br_y == 0) + tl_y = 1; /* cayman hw workaround */ if (family == CHIP_CAYMAN) { - if (scissor_width == 1 && scissor_height == 1) - scissor_width = 2; + if (br_x == 1 && br_y == 1) + br_x = 2; } - tl = S_028240_TL_X(0) | S_028240_TL_Y(0); - br = S_028244_BR_X(scissor_width) | S_028244_BR_Y(scissor_height); + tl = S_028240_TL_X(tl_x) | S_028240_TL_Y(tl_y); + br = S_028244_BR_X(br_x) | S_028244_BR_Y(br_y); r600_pipe_state_add_reg(rstate, R_028240_PA_SC_GENERIC_SCISSOR_TL, tl, -- 2.7.4