summaryrefslogtreecommitdiff
path: root/src/mesa/swrast
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2009-10-28 19:46:26 -0600
committerBrian Paul <brianp@vmware.com>2009-10-28 19:46:28 -0600
commit086f9fc0e2aef27f54eda87c733685500555bf20 (patch)
tree156f25c0a8950039ff57ee1fdbcd9539e40b0205 /src/mesa/swrast
parent88bb4b593576a2977b2fe36794bd4d3dbc72063e (diff)
swrast: fix RGB, RGBA texturing code
Fix backward component ordering for RGB textures. Only optimize RGBA texture case if running little endian. This restriction could be lifted with a little work.
Diffstat (limited to 'src/mesa/swrast')
-rw-r--r--src/mesa/swrast/s_triangle.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c
index f417578d89..5ecc7692c5 100644
--- a/src/mesa/swrast/s_triangle.c
+++ b/src/mesa/swrast/s_triangle.c
@@ -159,9 +159,9 @@ _swrast_culltriangle( GLcontext *ctx,
GLint t = FixedToInt(span.intTex[1]) & tmask; \
GLint pos = (t << twidth_log2) + s; \
pos = pos + pos + pos; /* multiply by 3 */ \
- rgb[i][RCOMP] = texture[pos]; \
+ rgb[i][RCOMP] = texture[pos+2]; \
rgb[i][GCOMP] = texture[pos+1]; \
- rgb[i][BCOMP] = texture[pos+2]; \
+ rgb[i][BCOMP] = texture[pos+0]; \
span.intTex[0] += span.intTexStep[0]; \
span.intTex[1] += span.intTexStep[1]; \
} \
@@ -215,9 +215,9 @@ _swrast_culltriangle( GLcontext *ctx,
GLint t = FixedToInt(span.intTex[1]) & tmask; \
GLint pos = (t << twidth_log2) + s; \
pos = pos + pos + pos; /* multiply by 3 */ \
- rgb[i][RCOMP] = texture[pos]; \
+ rgb[i][RCOMP] = texture[pos+2]; \
rgb[i][GCOMP] = texture[pos+1]; \
- rgb[i][BCOMP] = texture[pos+2]; \
+ rgb[i][BCOMP] = texture[pos+0]; \
zRow[i] = z; \
span.array->mask[i] = 1; \
} \
@@ -1101,7 +1101,13 @@ _swrast_choose_triangle( GLcontext *ctx )
#if CHAN_BITS != 8
USE(general_triangle);
#else
- USE(affine_textured_triangle);
+ if (format == MESA_FORMAT_RGBA8888 && !_mesa_little_endian())
+ /* We only handle RGBA8888 correctly on little endian
+ * in the optimized code above.
+ */
+ USE(general_triangle);
+ else
+ USE(affine_textured_triangle);
#endif
}
}