i965: Explicitely handle swizzles for MESA_FORMAT_R_SRGB8
authorGert Wollny <gert.wollny@collabora.com>
Thu, 22 Nov 2018 18:00:02 +0000 (19:00 +0100)
committerGert Wollny <gw.fossdev@gmail.com>
Wed, 28 Nov 2018 09:07:02 +0000 (10:07 +0100)
The format is emulated by using ISL_FORMAT_L8_SRGB, therefore we need to
force swizzles for the GBA channels. However, doing this only based on the
data type GL_RED breaks other formats, therefore, test specifically for the
format.

Fixes: c5363869d4971780401b21bb75083ef2518c12be
  i965: Force zero swizzles for unused components in GL_RED and GL_RG
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
src/mesa/drivers/dri/i965/brw_wm_surface_state.c

index 018bae98e8804baa97270755c59eef527bd80e8b..4daa0e2add1380cae252098d67c8d262af7bbbbd 100644 (file)
@@ -420,11 +420,15 @@ brw_get_texture_swizzle(const struct gl_context *ctx,
       }
       break;
    case GL_RED:
-      swizzles[1] = SWIZZLE_ZERO;
+      if (img->TexFormat == MESA_FORMAT_R_SRGB8) {
+         swizzles[0] = SWIZZLE_X;
+         swizzles[1] = SWIZZLE_ZERO;
+         swizzles[2] = SWIZZLE_ZERO;
+         swizzles[3] = SWIZZLE_ONE;
+         break;
+      }
       /* fallthrough */
    case GL_RG:
-      swizzles[2] = SWIZZLE_ZERO;
-      /* fallthrough */
    case GL_RGB:
       if (_mesa_get_format_bits(img->TexFormat, GL_ALPHA_BITS) > 0 ||
           img->TexFormat == MESA_FORMAT_RGB_DXT1 ||