r300-gallium: Properly offset scissors.
As per r300_reg, classic Mesa, and xf86-video-ati.
This commit is contained in:
parent
adb40a94b0
commit
04fe31cd5e
|
@ -515,12 +515,22 @@ static void r300_set_scissor_state(struct pipe_context* pipe,
|
||||||
struct r300_context* r300 = r300_context(pipe);
|
struct r300_context* r300 = r300_context(pipe);
|
||||||
draw_flush(r300->draw);
|
draw_flush(r300->draw);
|
||||||
|
|
||||||
r300->scissor_state->scissor_top_left =
|
if (r300_screen(r300->context.screen)->caps->is_r500) {
|
||||||
(state->minx << R300_SCISSORS_X_SHIFT) |
|
r300->scissor_state->scissor_top_left =
|
||||||
(state->miny << R300_SCISSORS_Y_SHIFT);
|
(state->minx << R300_SCISSORS_X_SHIFT) |
|
||||||
r300->scissor_state->scissor_bottom_right =
|
(state->miny << R300_SCISSORS_Y_SHIFT);
|
||||||
(state->maxx << R300_SCISSORS_X_SHIFT) |
|
r300->scissor_state->scissor_bottom_right =
|
||||||
(state->maxy << R300_SCISSORS_Y_SHIFT);
|
(state->maxx << R300_SCISSORS_X_SHIFT) |
|
||||||
|
(state->maxy << R300_SCISSORS_Y_SHIFT);
|
||||||
|
} else {
|
||||||
|
/* Offset of 1440 in non-R500 chipsets. */
|
||||||
|
r300->scissor_state->scissor_top_left =
|
||||||
|
((state->minx + 1440) << R300_SCISSORS_X_SHIFT) |
|
||||||
|
((state->miny + 1440) << R300_SCISSORS_Y_SHIFT);
|
||||||
|
r300->scissor_state->scissor_bottom_right =
|
||||||
|
((state->maxx + 1440) << R300_SCISSORS_X_SHIFT) |
|
||||||
|
((state->maxy + 1440) << R300_SCISSORS_Y_SHIFT);
|
||||||
|
}
|
||||||
|
|
||||||
r300->dirty_state |= R300_NEW_SCISSOR;
|
r300->dirty_state |= R300_NEW_SCISSOR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,8 +80,16 @@ static void r300_surface_fill(struct pipe_context* pipe,
|
||||||
|
|
||||||
/* Pixel scissors */
|
/* Pixel scissors */
|
||||||
OUT_CS_REG_SEQ(R300_SC_SCISSORS_TL, 2);
|
OUT_CS_REG_SEQ(R300_SC_SCISSORS_TL, 2);
|
||||||
OUT_CS((x << R300_SCISSORS_X_SHIFT) | (y << R300_SCISSORS_Y_SHIFT));
|
if (caps->is_r500) {
|
||||||
OUT_CS((w << R300_SCISSORS_X_SHIFT) | (h << R300_SCISSORS_Y_SHIFT));
|
OUT_CS((x << R300_SCISSORS_X_SHIFT) | (y << R300_SCISSORS_Y_SHIFT));
|
||||||
|
OUT_CS((w << R300_SCISSORS_X_SHIFT) | (h << R300_SCISSORS_Y_SHIFT));
|
||||||
|
} else {
|
||||||
|
/* Non-R500 chipsets have an offset of 1440 in their scissors. */
|
||||||
|
OUT_CS(((x + 1440) << R300_SCISSORS_X_SHIFT) |
|
||||||
|
((y + 1440) << R300_SCISSORS_Y_SHIFT));
|
||||||
|
OUT_CS(((w + 1440) << R300_SCISSORS_X_SHIFT) |
|
||||||
|
((h + 1440) << R300_SCISSORS_Y_SHIFT));
|
||||||
|
}
|
||||||
|
|
||||||
/* The size of the point we're about to draw, in sixths of pixels */
|
/* The size of the point we're about to draw, in sixths of pixels */
|
||||||
OUT_CS_REG(R300_GA_POINT_SIZE,
|
OUT_CS_REG(R300_GA_POINT_SIZE,
|
||||||
|
|
Loading…
Reference in New Issue