swrast: be a bit smarter in clip_span()
authorBrian Paul <brianp@vmware.com>
Thu, 13 Oct 2011 23:16:17 +0000 (17:16 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 13 Oct 2011 23:16:19 +0000 (17:16 -0600)
If no pixels pass the clip test, return false.

src/mesa/swrast/s_span.c

index 1aa20f9d771997576d207ea402fd23a834d91a51..e517c9ae14681740c08ec5da63f139798d386b7b 100644 (file)
@@ -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 */