Mesa (master): i965: Fix I/L/LA SNORM formats.

Kenneth Graunke kwg at kemper.freedesktop.org
Fri Feb 27 19:38:39 UTC 2015


Module: Mesa
Branch: master
Commit: 53295bebc883c5b90b4b3a2612d7cacabc94fd1b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=53295bebc883c5b90b4b3a2612d7cacabc94fd1b

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Thu Feb 26 14:29:25 2015 -0800

i965: Fix I/L/LA SNORM formats.

_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.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>
Reviewed-by: Chris Forbes <chrisf at ijw.co.nz>

---

 src/mesa/drivers/dri/i965/brw_wm_surface_state.c |   20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

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:




More information about the mesa-commit mailing list