[Mesa-dev] [PATCH] i965: Respect GL_TEXTURE_SRGB_DECODE_EXT in GenerateMipmaps()

Tapani Pälli tapani.palli at intel.com
Tue Oct 30 06:09:56 UTC 2018


Reviewed-by: Tapani Pälli <tapani.palli at intel.com>

On 10/30/18 2:01 AM, Kenneth Graunke wrote:
> Apparently, we're supposed to look at the texture object's built-in
> sampler object's sRGB decode setting in order to decide whether to
> decode/downsample/re-encode, or simply downsample as-is.  Previously,
> I had always done the decoding/encoding.
> 
> Fixes SKQP's Skia_Unit_Tests.SRGBMipMaps test.
> ---
>   .../drivers/dri/i965/brw_generate_mipmap.c    | 19 ++++++++++++++++++-
>   1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_generate_mipmap.c b/src/mesa/drivers/dri/i965/brw_generate_mipmap.c
> index 32c2933f721..4125ae6e11c 100644
> --- a/src/mesa/drivers/dri/i965/brw_generate_mipmap.c
> +++ b/src/mesa/drivers/dri/i965/brw_generate_mipmap.c
> @@ -105,6 +105,23 @@ brw_generate_mipmap(struct gl_context *ctx, GLenum target,
>         last_layer = base_size->array_len - 1;
>      }
>   
> +   /* The GL_EXT_texture_sRGB_decode extension's issues section says:
> +    *
> +    *    "10) How is mipmap generation of sRGB textures affected by the
> +    *     TEXTURE_SRGB_DECODE_EXT parameter?
> +    *
> +    *     RESOLVED:  When the TEXTURE_SRGB_DECODE parameter is DECODE_EXT
> +    *     for an sRGB texture, mipmap generation should decode sRGB texels
> +    *     to a linear RGB color space, perform downsampling, then encode
> +    *     back to an sRGB color space.  (Issue 24 in the EXT_texture_sRGB
> +    *     specification provides a rationale for why.)  When the parameter
> +    *     is SKIP_DECODE_EXT instead, mipmap generation skips the encode
> +    *     and decode steps during mipmap generation.  By skipping the
> +    *     encode and decode steps, sRGB mipmap generation should match
> +    *     the mipmap generation for a non-sRGB texture."
> +    */
> +   bool do_srgb = tex_obj->Sampler.sRGBDecode == GL_DECODE_EXT;
> +
>      for (unsigned dst_level = base_level + 1;
>           dst_level <= last_level;
>           dst_level++) {
> @@ -121,7 +138,7 @@ brw_generate_mipmap(struct gl_context *ctx, GLenum target,
>                                    minify(base_size->width, dst_level),
>                                    minify(base_size->height, dst_level),
>                                    GL_LINEAR, false, false,
> -                                 true, true);
> +                                 do_srgb, do_srgb);
>         }
>      }
>   }
> 


More information about the mesa-dev mailing list