On 06/09/2014 07:48 AM, Robert Bragg wrote: > This makes sure to use a no-op swizzle while iteratively rendering each > level of a mipmap otherwise we may loose components and effectively > apply the swizzle twice by the time these levels are sampled.
Right... the swizzle state shouldn't affect mipmap generation at all. One minor nit below, but otherwise Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> I second Chris's request for a piglit test. It should be pretty easy to clone one of the existing tests/fbo/fbo-generatemipmap-*.c tests and modify it to test this case. > --- > src/mesa/drivers/common/meta_generate_mipmap.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/src/mesa/drivers/common/meta_generate_mipmap.c > b/src/mesa/drivers/common/meta_generate_mipmap.c > index d12806c..4b1718d 100644 > --- a/src/mesa/drivers/common/meta_generate_mipmap.c > +++ b/src/mesa/drivers/common/meta_generate_mipmap.c > @@ -43,6 +43,7 @@ > #include "main/varray.h" > #include "main/viewport.h" > #include "drivers/common/meta.h" > +#include "program/prog_instruction.h" > > > /** > @@ -168,6 +169,8 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum > target, > GLenum faceTarget; > GLuint dstLevel; > GLuint samplerSave; > + GLint swizzle[4]; > + GLboolean swizzleSaved = GL_FALSE; > > if (fallback_required(ctx, target, texObj)) { > _mesa_generate_mipmap(ctx, target, texObj); > @@ -231,6 +234,13 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum > target, > > _mesa_TexParameteri(target, GL_GENERATE_MIPMAP, GL_FALSE); > > + if (texObj->_Swizzle != SWIZZLE_NOOP) { > + static const GLint swizzleNoop[4] = { GL_RED, GL_GREEN, GL_BLUE, > GL_ALPHA }; > + memcpy(swizzle, texObj->Swizzle, sizeof(swizzle)); > + swizzleSaved = GL_TRUE; > + _mesa_TexParameteriv(target, GL_TEXTURE_SWIZZLE_RGBA, swizzleNoop); > + } > + > /* Silence valgrind warnings about reading uninitialized stack. */ > memset(verts, 0, sizeof(verts)); > > @@ -347,4 +357,6 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum > target, > _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, maxLevelSave); > if (genMipmapSave) > _mesa_TexParameteri(target, GL_GENERATE_MIPMAP, genMipmapSave); > + if (swizzleSaved) > + _mesa_TexParameteriv(target, GL_TEXTURE_SWIZZLE_RGBA, swizzle); > } > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev