I'll admit that I don't know that portion of the code all that well, but it looks sensible to me.
Reviewed-by: Jason Ekstrand <jason.ekstr...@intel.com> On Thu, Feb 26, 2015 at 3:55 PM, Kenneth Graunke <kenn...@whitecape.org> wrote: > _mesa_choose_tex_format (texformat.c) tries I8_SNORM, L8_SNORM, and > either L8A8_SNORM or A8L8_SNORM, none of which are supported by our > driver. Failing that, it falls back to RGBX for luminance, and RGBA > intensity and luminance alpha. So, we need to use swizzle overrrides > to obtain the correct values. > > Fixes Piglit's EXT_texture_snorm/fbo-blending-formats and > fbo-clear-formats on Gen6-8. > > v2: Rebase forward 3 years, don't require texformat.c changes. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 20 +++++++++++++++++++- > 1 file changed, 19 insertions(+), 1 deletion(-) > > Tue Jul 17 11:08:59 2012 -0700. > > I'm down to 135 branches...making progress... > > diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > index ec4dfdb..f479f44 100644 > --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > @@ -187,6 +187,8 @@ brw_get_texture_swizzle(const struct gl_context *ctx, > } > } > > + GLenum datatype = _mesa_get_format_datatype(img->TexFormat); > + > /* If the texture's format is alpha-only, force R, G, and B to > * 0.0. Similarly, if the texture's format has no alpha channel, > * force the alpha value read to 1.0. This allows for the > @@ -200,13 +202,29 @@ brw_get_texture_swizzle(const struct gl_context *ctx, > swizzles[2] = SWIZZLE_ZERO; > break; > case GL_LUMINANCE: > - if (t->_IsIntegerFormat) { > + if (t->_IsIntegerFormat || datatype == GL_SIGNED_NORMALIZED) { > swizzles[0] = SWIZZLE_X; > swizzles[1] = SWIZZLE_X; > swizzles[2] = SWIZZLE_X; > swizzles[3] = SWIZZLE_ONE; > } > break; > + case GL_LUMINANCE_ALPHA: > + if (datatype == GL_SIGNED_NORMALIZED) { > + swizzles[0] = SWIZZLE_X; > + swizzles[1] = SWIZZLE_X; > + swizzles[2] = SWIZZLE_X; > + swizzles[3] = SWIZZLE_W; > + } > + break; > + case GL_INTENSITY: > + if (datatype == GL_SIGNED_NORMALIZED) { > + swizzles[0] = SWIZZLE_X; > + swizzles[1] = SWIZZLE_X; > + swizzles[2] = SWIZZLE_X; > + swizzles[3] = SWIZZLE_X; > + } > + break; > case GL_RED: > case GL_RG: > case GL_RGB: > -- > 2.2.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev