Mesa (master): i915: Use L8A8 instead of I8 to simulate A8 on gen2

Ville Syrjala vsyrjala at kemper.freedesktop.org
Thu Nov 13 17:15:43 UTC 2014


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

Author: Ville Syrjälä <ville.syrjala at linux.intel.com>
Date:   Thu Aug  7 11:14:35 2014 +0300

i915: Use L8A8 instead of I8 to simulate A8 on gen2

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 at anholt.net>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

---

 src/mesa/drivers/dri/i915/i830_texstate.c |    2 --
 src/mesa/drivers/dri/i915/i915_context.c  |    3 ++-
 src/mesa/main/texformat.c                 |    3 +++
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i915/i830_texstate.c b/src/mesa/drivers/dri/i915/i830_texstate.c
index 58d3356..b1414c7 100644
--- a/src/mesa/drivers/dri/i915/i830_texstate.c
+++ b/src/mesa/drivers/dri/i915/i830_texstate.c
@@ -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:
diff --git a/src/mesa/drivers/dri/i915/i915_context.c b/src/mesa/drivers/dri/i915/i915_context.c
index 8811e8d..42ea54e 100644
--- a/src/mesa/drivers/dri/i915/i915_context.c
+++ b/src/mesa/drivers/dri/i915/i915_context.c
@@ -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;
 
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
index 832e661..ec16af9 100644
--- a/src/mesa/main/texformat.c
+++ b/src/mesa/main/texformat.c
@@ -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);




More information about the mesa-commit mailing list