Mesa (mesa_7_7_branch): swrast: fix left side clipping

Brian Paul brianp at kemper.freedesktop.org
Thu Feb 18 16:39:53 UTC 2010


Module: Mesa
Branch: mesa_7_7_branch
Commit: 7c34c237a2f6732b2c013543523617e375c1f534
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7c34c237a2f6732b2c013543523617e375c1f534

Author: Brian Paul <brianp at vmware.com>
Date:   Thu Feb 18 09:37:55 2010 -0700

swrast: fix left side clipping

Fixes bug 26623.  Original patch was submitted by Mathias Frohlich
and modified by Brian.

---

 src/mesa/swrast/s_span.c |   39 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index 07248c7..e772c60 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -784,14 +784,47 @@ clip_span( GLcontext *ctx, SWspan *span )
           * For arrays of values, shift them left.
           */
          for (i = 0; i < FRAG_ATTRIB_MAX; i++) {
+            if (span->interpMask & (1 << i)) {
+               GLuint j;
+               for (j = 0; j < 4; j++) {
+                  span->attrStart[i][j] += leftClip * span->attrStepX[i][j];
+               }
+            }
+         }
+
+         span->red += leftClip * span->redStep;
+         span->green += leftClip * span->greenStep;
+         span->blue += leftClip * span->blueStep;
+         span->alpha += leftClip * span->alphaStep;
+         span->index += leftClip * span->indexStep;
+         span->z += leftClip * span->zStep;
+         span->intTex[0] += leftClip * span->intTexStep[0];
+         span->intTex[1] += leftClip * span->intTexStep[1];
+
+#define SHIFT_ARRAY(ARRAY, SHIFT, LEN) \
+         memcpy(ARRAY, ARRAY + (SHIFT), (LEN) * sizeof(ARRAY[0]))
+
+         for (i = 0; i < FRAG_ATTRIB_MAX; i++) {
             if (span->arrayAttribs & (1 << i)) {
                /* shift array elements left by 'leftClip' */
-               _mesa_memcpy(span->array->attribs[i],
-                            span->array->attribs[i] + leftClip,
-                            (n - leftClip) * 4 * sizeof(GLfloat));
+               SHIFT_ARRAY(span->array->attribs[i], leftClip, n - leftClip);
             }
          }
 
+         SHIFT_ARRAY(span->array->mask, leftClip, n - leftClip);
+         SHIFT_ARRAY(span->array->rgba8, leftClip, n - leftClip);
+         SHIFT_ARRAY(span->array->rgba16, leftClip, n - leftClip);
+         SHIFT_ARRAY(span->array->x, leftClip, n - leftClip);
+         SHIFT_ARRAY(span->array->y, leftClip, n - leftClip);
+         SHIFT_ARRAY(span->array->z, leftClip, n - leftClip);
+         SHIFT_ARRAY(span->array->index, leftClip, n - leftClip);
+         for (i = 0; i < MAX_TEXTURE_COORD_UNITS; i++) {
+            SHIFT_ARRAY(span->array->lambda[i], leftClip, n - leftClip);
+         }
+         SHIFT_ARRAY(span->array->coverage, leftClip, n - leftClip);
+
+#undef SHIFT_ARRAY
+
          span->leftClip = leftClip;
          span->x = xmin;
          span->end -= leftClip;




More information about the mesa-commit mailing list