[Mesa-dev] [PATCH 2/2] i965/formats: Update the RGB_DXT1 mappings

Nanley Chery nanleychery at gmail.com
Fri May 12 20:31:56 UTC 2017


On Fri, May 12, 2017 at 08:39:40AM -0700, Kenneth Graunke wrote:
> On Thursday, May 11, 2017 4:46:27 PM PDT Nanley Chery wrote:
> > The DXT1_RGB* format does not provide the correct behavior for OpenGL in
> > the case where color_0 <= color_1. BC1_RGB_UNORM with a alpha set to 1
> > provides the behavior which matches the spec.
> > 
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100925
> > Cc: <mesa-stable at lists.freedesktop.org>
> > Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
> > ---
> >  src/mesa/drivers/dri/i965/brw_surface_formats.c | 15 ++-------------
> >  1 file changed, 2 insertions(+), 13 deletions(-)
> 
> Two things I was worried about:
> 
> 1. Where's the swizzling code in this patch?
> 
>   ->  it turns out that we already swizzle A -> 1 when the mesa format
>       does not have alpha, but the hardware format does.  So, it's
>       already there, we don't need any new code :)
> 
> 2. Will it impact performance?
> 
>   ->  Might be nice to check...but the compressed data is the same size
>       for both formats, so it's just how it interprets it...doubtful.
> 
>       This will cause recompiles on Ivybridge and older hardware, due
>       to the implicit texture swizzling.  Sad, but not sure we can do
>       anything about it.  Could change the default to RGB1 if that's
>       better...
> 

Oh, I didn't know about about those recompiles. I'm not sure how they
work.

> It might be nice to copy more of the findings you posted in bugzilla
> into the commit messages - people are more likely to find your commit
> message when blaming this code than to look at the bug.
> 

I added more detail to the commit messages and will send out a v2.

> It looks like Windows does this same workaround on Gen7.5+.  I'm not
> clear what they do on Gen7-.
> 
> Great find!  Both are:
> Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
> 

Thank you!

> > diff --git a/src/mesa/drivers/dri/i965/brw_surface_formats.c b/src/mesa/drivers/dri/i965/brw_surface_formats.c
> > index 7b17e11125..b176a21c22 100644
> > --- a/src/mesa/drivers/dri/i965/brw_surface_formats.c
> > +++ b/src/mesa/drivers/dri/i965/brw_surface_formats.c
> > @@ -94,14 +94,14 @@ brw_isl_format_for_mesa_format(mesa_format mesa_format)
> >        [MESA_FORMAT_L_SRGB8] = ISL_FORMAT_L8_UNORM_SRGB,
> >        [MESA_FORMAT_L8A8_SRGB] = ISL_FORMAT_L8A8_UNORM_SRGB,
> >        [MESA_FORMAT_A8L8_SRGB] = 0,
> > -      [MESA_FORMAT_SRGB_DXT1] = ISL_FORMAT_DXT1_RGB_SRGB,
> > +      [MESA_FORMAT_SRGB_DXT1] = ISL_FORMAT_BC1_UNORM_SRGB,
> >        [MESA_FORMAT_SRGBA_DXT1] = ISL_FORMAT_BC1_UNORM_SRGB,
> >        [MESA_FORMAT_SRGBA_DXT3] = ISL_FORMAT_BC2_UNORM_SRGB,
> >        [MESA_FORMAT_SRGBA_DXT5] = ISL_FORMAT_BC3_UNORM_SRGB,
> >  
> >        [MESA_FORMAT_RGB_FXT1] = ISL_FORMAT_FXT1,
> >        [MESA_FORMAT_RGBA_FXT1] = ISL_FORMAT_FXT1,
> > -      [MESA_FORMAT_RGB_DXT1] = ISL_FORMAT_DXT1_RGB,
> > +      [MESA_FORMAT_RGB_DXT1] = ISL_FORMAT_BC1_UNORM,
> >        [MESA_FORMAT_RGBA_DXT1] = ISL_FORMAT_BC1_UNORM,
> >        [MESA_FORMAT_RGBA_DXT3] = ISL_FORMAT_BC2_UNORM,
> >        [MESA_FORMAT_RGBA_DXT5] = ISL_FORMAT_BC3_UNORM,
> > @@ -541,17 +541,6 @@ translate_tex_format(struct brw_context *brw,
> >         */
> >        return ISL_FORMAT_R32G32B32A32_FLOAT;
> >  
> > -   case MESA_FORMAT_SRGB_DXT1:
> > -      if (brw->gen == 4 && !brw->is_g4x) {
> > -         /* Work around missing SRGB DXT1 support on original gen4 by just
> > -          * skipping SRGB decode.  It's not worth not supporting sRGB in
> > -          * general to prevent this.
> > -          */
> > -         WARN_ONCE(true, "Demoting sRGB DXT1 texture to non-sRGB\n");
> > -         mesa_format = MESA_FORMAT_RGB_DXT1;
> > -      }
> > -      return brw_isl_format_for_mesa_format(mesa_format);
> > -
> >     case MESA_FORMAT_RGBA_ASTC_4x4:
> >     case MESA_FORMAT_RGBA_ASTC_5x4:
> >     case MESA_FORMAT_RGBA_ASTC_5x5:
> > 
> 
> Nice to be rid of this!  Using an RGBA format and setting alpha to 1 is
> a lot better than not doing sRGB decode.

Agreed.


More information about the mesa-dev mailing list