From 40a08e0d6a57cc79ee72a62aeedec20cae774ed5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Thu, 7 Aug 2014 11:14:35 +0300 Subject: [PATCH] i915: Use L8A8 instead of I8 to simulate A8 on gen2 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Ville Syrjälä --- 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 58d3356d6e4..b1414c7005b 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 8811e8d4e6d..42ea54e087d 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 832e66128d8..ec16af9d2a1 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); -- 2.30.2