r300g: fix zero-area scissor

This commit is contained in:
Marek Olšák 2010-01-17 23:13:51 +01:00 committed by Corbin Simpson
parent b7a002df1e
commit 9f8ec53312

View file

@ -686,6 +686,22 @@ void r300_emit_scissor_state(struct r300_context* r300, void* state)
maxy = MIN2(maxy, scissor->maxy);
}
/* Special case for zero-area scissor.
*
* We can't allow the variables maxx and maxy to be zero because they are
* subtracted from later in the code, which would cause emitting ~0 and
* making the kernel checker angry.
*
* Let's consider we change maxx and maxy to 1, which is effectively
* a one-pixel area. We must then change minx and miny to a number which is
* greater than 1 to get the zero area back. */
if (!maxx || !maxy) {
minx = 2;
miny = 2;
maxx = 1;
maxy = 1;
}
if (r300screen->caps->is_r500) {
top_left =
(minx << R300_SCISSORS_X_SHIFT) |