i915: Use L8A8 instead of I8 to simulate A8 on gen2
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 7 Aug 2014 08:14:35 +0000 (11:14 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 13 Nov 2014 17:13:27 +0000 (19:13 +0200)
Gen2 doesn't support the A8 texture format. Currently the driver
substitutes it with I8, but that results in incorrect RGB values.
Use A8L8 instead. We end up wasting a bit of memory, but at least
we should get the correct results.

v2: Handle the fallback in _mesa_choose_tex_format() and also
    do it for all alpha formats that currently accept A8

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=72819
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=80050
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=38873
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
src/mesa/drivers/dri/i915/i830_texstate.c
src/mesa/drivers/dri/i915/i915_context.c
src/mesa/main/texformat.c

index 58d3356d6e427d7c16601165346e39c2282b2de5..b1414c7005bfe89d86f2ef1354be8556cedc1089 100644 (file)
@@ -47,8 +47,6 @@ translate_texture_format(GLuint mesa_format)
       return MAPSURF_8BIT | MT_8BIT_L8;
    case MESA_FORMAT_I_UNORM8:
       return MAPSURF_8BIT | MT_8BIT_I8;
-   case MESA_FORMAT_A_UNORM8:
-      return MAPSURF_8BIT | MT_8BIT_I8; /* Kludge! */
    case MESA_FORMAT_L8A8_UNORM:
       return MAPSURF_16BIT | MT_16BIT_AY88;
    case MESA_FORMAT_B5G6R5_UNORM:
index 8811e8d4e6d50109a7a24438f0dee8874baf9025..42ea54e087dc28cb6a73675905f1a1a41de09289 100644 (file)
@@ -109,7 +109,8 @@ intel_init_texture_formats(struct gl_context *ctx)
    ctx->TextureFormatSupported[MESA_FORMAT_B5G5R5A1_UNORM] = true;
    ctx->TextureFormatSupported[MESA_FORMAT_B5G6R5_UNORM] = true;
    ctx->TextureFormatSupported[MESA_FORMAT_L_UNORM8] = true;
-   ctx->TextureFormatSupported[MESA_FORMAT_A_UNORM8] = true;
+   if (intel->gen == 3)
+      ctx->TextureFormatSupported[MESA_FORMAT_A_UNORM8] = true;
    ctx->TextureFormatSupported[MESA_FORMAT_I_UNORM8] = true;
    ctx->TextureFormatSupported[MESA_FORMAT_L8A8_UNORM] = true;
 
index 832e66128d81de3eb326de4f54f236fd1609ffd5..ec16af9d2a19a3c2f43fa5b1c70b52768ece9d8c 100644 (file)
@@ -155,12 +155,14 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
    case GL_ALPHA4:
    case GL_ALPHA8:
       RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8);
+      RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
       break;
 
    case GL_ALPHA12:
    case GL_ALPHA16:
       RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM16);
       RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8);
+      RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
       break;
 
    /* Luminance formats */
@@ -224,6 +226,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
 
    case GL_COMPRESSED_ALPHA_ARB:
       RETURN_IF_SUPPORTED(MESA_FORMAT_A_UNORM8);
+      RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
       break;
    case GL_COMPRESSED_LUMINANCE_ARB:
       RETURN_IF_SUPPORTED(MESA_FORMAT_L_UNORM8);