summaryrefslogtreecommitdiffstats
path: root/src/mesa/swrast
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/swrast')
-rw-r--r--src/mesa/swrast/s_tritemp.h131
1 files changed, 67 insertions, 64 deletions
diff --git a/src/mesa/swrast/s_tritemp.h b/src/mesa/swrast/s_tritemp.h
index 74dc13e2997..bb76408081d 100644
--- a/src/mesa/swrast/s_tritemp.h
+++ b/src/mesa/swrast/s_tritemp.h
@@ -912,15 +912,15 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
#ifdef INTERP_FOG
dfogInner = dfogOuter + span.dfogdx;
#endif
-#if defined(INTERP_RGB)
+#ifdef INTERP_RGB
fdrInner = fdrOuter + span.redStep;
fdgInner = fdgOuter + span.greenStep;
fdbInner = fdbOuter + span.blueStep;
#endif
-#if defined(INTERP_ALPHA)
+#ifdef INTERP_ALPHA
fdaInner = fdaOuter + span.alphaStep;
#endif
-#if defined(INTERP_SPEC)
+#ifdef INTERP_SPEC
dsrInner = dsrOuter + span.specRedStep;
dsgInner = dsgOuter + span.specGreenStep;
dsbInner = dsbOuter + span.specBlueStep;
@@ -962,15 +962,15 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
#ifdef INTERP_FOG
span.fog = fogLeft;
#endif
-#if defined(INTERP_RGB)
+#ifdef INTERP_RGB
span.red = rLeft;
span.green = gLeft;
span.blue = bLeft;
#endif
-#if defined(INTERP_ALPHA)
+#ifdef INTERP_ALPHA
span.alpha = aLeft;
#endif
-#if defined(INTERP_SPEC)
+#ifdef INTERP_SPEC
span.specRed = srLeft;
span.specGreen = sgLeft;
span.specBlue = sbLeft;
@@ -992,68 +992,71 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
)
#endif
+ if (span.end > 1) {
+ /* Under rare circumstances, we might have to fudge the
+ * colors. XXX does this really happen anymore???
+ */
+ const GLint len = span.end - 1;
+ (void) len;
#ifdef INTERP_RGB
- {
- /* need this to accomodate round-off errors */
- const GLint len = right - span.x - 1;
- GLfixed ffrend = span.red + len * span.redStep;
- GLfixed ffgend = span.green + len * span.greenStep;
- GLfixed ffbend = span.blue + len * span.blueStep;
- if (ffrend < 0) {
- span.red -= ffrend;
- if (span.red < 0)
- span.red = 0;
- }
- if (ffgend < 0) {
- span.green -= ffgend;
- if (span.green < 0)
- span.green = 0;
- }
- if (ffbend < 0) {
- span.blue -= ffbend;
- if (span.blue < 0)
- span.blue = 0;
+ {
+ GLfixed ffrend = span.red + len * span.redStep;
+ GLfixed ffgend = span.green + len * span.greenStep;
+ GLfixed ffbend = span.blue + len * span.blueStep;
+ if (ffrend < 0) {
+ span.red -= ffrend;
+ if (span.red < 0)
+ span.red = 0;
+ }
+ if (ffgend < 0) {
+ span.green -= ffgend;
+ if (span.green < 0)
+ span.green = 0;
+ }
+ if (ffbend < 0) {
+ span.blue -= ffbend;
+ if (span.blue < 0)
+ span.blue = 0;
+ }
}
- }
#endif
#ifdef INTERP_ALPHA
- {
- const GLint len = right - span.x - 1;
- GLfixed ffaend = span.alpha + len * span.alphaStep;
- if (ffaend < 0) {
- span.alpha -= ffaend;
- if (span.alpha < 0)
- span.alpha = 0;
+ {
+ GLfixed ffaend = span.alpha + len * span.alphaStep;
+ if (ffaend < 0) {
+ span.alpha -= ffaend;
+ if (span.alpha < 0)
+ span.alpha = 0;
+ }
}
- }
#endif
#ifdef INTERP_SPEC
- {
- /* need this to accomodate round-off errors */
- const GLint len = right - span.x - 1;
- GLfixed ffsrend = span.specRed + len * span.specRedStep;
- GLfixed ffsgend = span.specGreen + len * span.specGreenStep;
- GLfixed ffsbend = span.specBlue + len * span.specBlueStep;
- if (ffsrend < 0) {
- span.specRed -= ffsrend;
- if (span.specRed < 0)
- span.specRed = 0;
- }
- if (ffsgend < 0) {
- span.specGreen -= ffsgend;
- if (span.specGreen < 0)
- span.specGreen = 0;
+ {
+ GLfixed ffsrend = span.specRed + len * span.specRedStep;
+ GLfixed ffsgend = span.specGreen + len * span.specGreenStep;
+ GLfixed ffsbend = span.specBlue + len * span.specBlueStep;
+ if (ffsrend < 0) {
+ span.specRed -= ffsrend;
+ if (span.specRed < 0)
+ span.specRed = 0;
+ }
+ if (ffsgend < 0) {
+ span.specGreen -= ffsgend;
+ if (span.specGreen < 0)
+ span.specGreen = 0;
+ }
+ if (ffsbend < 0) {
+ span.specBlue -= ffsbend;
+ if (span.specBlue < 0)
+ span.specBlue = 0;
+ }
}
- if (ffsbend < 0) {
- span.specBlue -= ffsbend;
- if (span.specBlue < 0)
- span.specBlue = 0;
- }
- }
#endif
#ifdef INTERP_INDEX
- if (span.index < 0) span.index = 0;
+ if (span.index < 0)
+ span.index = 0;
#endif
+ } /* span.end > 1 */
/* This is where we actually generate fragments */
if (span.end > 0) {
@@ -1066,7 +1069,7 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
* pixel-center x coordinate so that it stays
* on or inside the major edge.
*/
- (span.y)++;
+ span.y++;
lines--;
fxLeftEdge += fdxLeftEdge;
@@ -1091,15 +1094,15 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
#ifdef INTERP_FOG
fogLeft += dfogOuter;
#endif
-#if defined(INTERP_RGB)
+#ifdef INTERP_RGB
rLeft += fdrOuter;
gLeft += fdgOuter;
bLeft += fdbOuter;
#endif
-#if defined(INTERP_ALPHA)
+#ifdef INTERP_ALPHA
aLeft += fdaOuter;
#endif
-#if defined(INTERP_SPEC)
+#ifdef INTERP_SPEC
srLeft += dsrOuter;
sgLeft += dsgOuter;
sbLeft += dsbOuter;
@@ -1136,15 +1139,15 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
#ifdef INTERP_FOG
fogLeft += dfogInner;
#endif
-#if defined(INTERP_RGB)
+#ifdef INTERP_RGB
rLeft += fdrInner;
gLeft += fdgInner;
bLeft += fdbInner;
#endif
-#if defined(INTERP_ALPHA)
+#ifdef INTERP_ALPHA
aLeft += fdaInner;
#endif
-#if defined(INTERP_SPEC)
+#ifdef INTERP_SPEC
srLeft += dsrInner;
sgLeft += dsgInner;
sbLeft += dsbInner;