summaryrefslogtreecommitdiffstats
path: root/src/mesa/swrast/s_span.c
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2011-10-13 17:16:17 -0600
committerBrian Paul <[email protected]>2011-10-13 17:16:19 -0600
commit718cbe4ba95439c074144ea2ce06ebf0915a660c (patch)
treeea368da51fd8b42c25e52f45d2ae94e07c498be8 /src/mesa/swrast/s_span.c
parentbc4ef33108331db69ddfdbdd71546f4cb49ed809 (diff)
swrast: be a bit smarter in clip_span()
If no pixels pass the clip test, return false.
Diffstat (limited to 'src/mesa/swrast/s_span.c')
-rw-r--r--src/mesa/swrast/s_span.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index 1aa20f9d771..e517c9ae146 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -707,11 +707,13 @@ clip_span( struct gl_context *ctx, SWspan *span )
const GLint n = span->end;
GLubyte *mask = span->array->mask;
GLint i;
+ GLuint passed = 0;
if (span->arrayMask & SPAN_MASK) {
/* note: using & intead of && to reduce branches */
for (i = 0; i < n; i++) {
mask[i] &= (x[i] >= xmin) & (x[i] < xmax)
& (y[i] >= ymin) & (y[i] < ymax);
+ passed += mask[i];
}
}
else {
@@ -719,9 +721,10 @@ clip_span( struct gl_context *ctx, SWspan *span )
for (i = 0; i < n; i++) {
mask[i] = (x[i] >= xmin) & (x[i] < xmax)
& (y[i] >= ymin) & (y[i] < ymax);
+ passed += mask[i];
}
}
- return GL_TRUE; /* some pixels visible */
+ return passed > 0;
}
else {
/* horizontal span of pixels */