summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2006-09-20 22:40:34 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2006-09-20 22:40:34 +0000
commit3974cc8c09a00274f87c418cb295ed0cdd7c9d1e (patch)
tree680bc00df959e1a82d0438ad931da1ecd2347f60
parent3aea82b396387bf3835f91bcc9121e02274c4c04 (diff)
Deal with the overloading of _mesa_texstore_rgba, which is actually
used to store all sorts of formats. Software mesa fails the glean pixelFormats test, but it appears to be failing even with the swizzle code disabled??
-rw-r--r--src/mesa/main/texstore.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c
index f64642124d..8456273dbb 100644
--- a/src/mesa/main/texstore.c
+++ b/src/mesa/main/texstore.c
@@ -991,20 +991,46 @@ _mesa_texstore_rgba(TEXSTORE_PARAMS)
can_swizzle(baseInternalFormat) &&
can_swizzle(srcFormat)) {
- GLubyte dstmap[4];
+ const GLubyte *dstmap;
+ GLuint components;
/* dstmap - how to swizzle from RGBA to dst format:
*/
- dstmap[3] = 0;
- dstmap[2] = 1;
- dstmap[1] = 2;
- dstmap[0] = 3;
-
+ if (dstFormat == &_mesa_texformat_rgba) {
+ dstmap = mappings[IDX_RGBA].from_rgba;
+ components = 4;
+ }
+ else if (dstFormat == &_mesa_texformat_rgb) {
+ dstmap = mappings[IDX_RGB].from_rgba;
+ components = 3;
+ }
+ else if (dstFormat == &_mesa_texformat_alpha) {
+ dstmap = mappings[IDX_ALPHA].from_rgba;
+ components = 1;
+ }
+ else if (dstFormat == &_mesa_texformat_luminance) {
+ dstmap = mappings[IDX_LUMINANCE].from_rgba;
+ components = 1;
+ }
+ else if (dstFormat == &_mesa_texformat_luminance_alpha) {
+ dstmap = mappings[IDX_LUMINANCE_ALPHA].from_rgba;
+ components = 2;
+ }
+ else if (dstFormat == &_mesa_texformat_intensity) {
+ dstmap = mappings[IDX_INTENSITY].from_rgba;
+ components = 1;
+ }
+ else {
+ ASSERT(0);
+ dstmap = map_identity;
+ components = 4;
+ }
+
_mesa_swizzle_ubyte_image(ctx, dims,
srcFormat,
srcType,
baseInternalFormat,
- dstmap, 4,
+ dstmap, components,
dstAddr, dstXoffset, dstYoffset, dstZoffset,
dstRowStride, dstImageOffsets,
srcWidth, srcHeight, srcDepth, srcAddr,