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

Brian Paul brianp at vmware.com
Fri Feb 1 17:07:59 PST 2013


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



More information about the mesa-dev mailing list