summaryrefslogtreecommitdiff
path: root/src/mesa/main/texstore.c
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 /src/mesa/main/texstore.c
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??
Diffstat (limited to 'src/mesa/main/texstore.c')
-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,