From 3974cc8c09a00274f87c418cb295ed0cdd7c9d1e Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Wed, 20 Sep 2006 22:40:34 +0000 Subject: 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?? --- src/mesa/main/texstore.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'src/mesa/main/texstore.c') 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, -- cgit v1.2.3