[Mesa-dev] [PATCH] st/mesa: simplify the update_single_texture() function

Marek Olšák maraeo at gmail.com
Fri Feb 1 17:54:43 PST 2013


Nice.

Reviewed-by: Marek Olšák <maraeo at gmail.com>

Marek

On Sat, Feb 2, 2013 at 2:07 AM, Brian Paul <brianp at vmware.com> wrote:
> In particular, rework the sRGB/linear format selection code.
> There's no reason to mess with the Mesa format.
> Just do everything in terms of the gallium pipe_format.
> ---
>  src/mesa/state_tracker/st_atom_texture.c |   35 ++++++------------------------
>  1 files changed, 7 insertions(+), 28 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
> index 4b43b2a..28327bc 100644
> --- a/src/mesa/state_tracker/st_atom_texture.c
> +++ b/src/mesa/state_tracker/st_atom_texture.c
> @@ -214,7 +214,7 @@ update_single_texture(struct st_context *st,
>     const struct gl_sampler_object *samp;
>     struct gl_texture_object *texObj;
>     struct st_texture_object *stObj;
> -   enum pipe_format st_view_format;
> +   enum pipe_format view_format;
>     GLboolean retval;
>
>     samp = _mesa_get_samplerobj(ctx, texUnit);
> @@ -234,32 +234,11 @@ update_single_texture(struct st_context *st,
>     }
>
>     /* Determine the format of the texture sampler view */
> -   st_view_format = stObj->pt->format;
> -
> -   {
> -      gl_format texFormat;
> -      enum pipe_format firstImageFormat;
> -
> -      if (texObj->Target == GL_TEXTURE_BUFFER) {
> -         texFormat = stObj->base._BufferObjectFormat;
> -      } else {
> -         const struct st_texture_image *firstImage =
> -            st_texture_image(stObj->base.Image[0][stObj->base.BaseLevel]);
> -         texFormat = firstImage->base.TexFormat;
> -      }
> -      firstImageFormat = st_mesa_format_to_pipe_format(texFormat);
> -      if ((samp->sRGBDecode == GL_SKIP_DECODE_EXT) &&
> -         (_mesa_get_format_color_encoding(texFormat) == GL_SRGB)) {
> -         /* Don't do sRGB->RGB conversion.  Interpret the texture data as
> -          * linear values.
> -          */
> -        const gl_format linearFormat =
> -           _mesa_get_srgb_format_linear(texFormat);
> -        firstImageFormat = st_mesa_format_to_pipe_format(linearFormat);
> -      }
> +   view_format = stObj->pt->format;
>
> -      if (firstImageFormat != stObj->pt->format)
> -        st_view_format = firstImageFormat;
> +   /* If sRGB decoding is off, use the linear format */
> +   if (samp->sRGBDecode == GL_SKIP_DECODE_EXT) {
> +      view_format = util_format_linear(view_format);
>     }
>
>     /* if sampler view has changed dereference it */
> @@ -267,7 +246,7 @@ update_single_texture(struct st_context *st,
>        if (check_sampler_swizzle(stObj->sampler_view,
>                                 stObj->base._Swizzle,
>                                 stObj->base.DepthMode) ||
> -         (st_view_format != stObj->sampler_view->format) ||
> +         (view_format != stObj->sampler_view->format) ||
>           stObj->base.BaseLevel != stObj->sampler_view->u.tex.first_level) {
>          pipe_sampler_view_reference(&stObj->sampler_view, NULL);
>        }
> @@ -275,7 +254,7 @@ update_single_texture(struct st_context *st,
>
>     *sampler_view = st_get_texture_sampler_view_from_stobj(stObj, pipe,
>                                                           samp,
> -                                                         st_view_format);
> +                                                         view_format);
>     return GL_TRUE;
>  }
>
> --
> 1.7.3.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list