[Mesa-dev] [PATCH 1/4] st/mesa: refactor gl_TexImage() code into prep_teximage()

Brian Paul brian.e.paul at gmail.com
Fri Dec 30 16:00:54 PST 2011


From: Brian Paul <brianp at vmware.com>

Preparation for st_TexImage() removal/refactoring.
---
 src/mesa/state_tracker/st_cb_texture.c |   55 ++++++++++++++++++++++----------
 1 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index e60c309..84931d6 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -495,6 +495,42 @@ st_AllocTextureImageBuffer(struct gl_context *ctx,
    }
 }
 
+
+/**
+ * Preparation prior to glTexImage.  Basically check the 'surface_based'
+ * field and switch to a "normal" tex image if necessary.
+ */
+static void
+prep_teximage(struct gl_context *ctx, struct gl_texture_image *texImage,
+              GLint internalFormat,
+              GLint width, GLint height, GLint depth, GLint border,
+              GLenum format, GLenum type)
+{
+   struct gl_texture_object *texObj = texImage->TexObject;
+   struct st_texture_object *stObj = st_texture_object(texObj);
+
+   /* switch to "normal" */
+   if (stObj->surface_based) {
+      const GLenum target = texObj->Target;
+      const GLuint level = texImage->Level;
+      gl_format texFormat;
+
+      _mesa_clear_texture_object(ctx, texObj);
+      pipe_resource_reference(&stObj->pt, NULL);
+
+      /* oops, need to init this image again */
+      texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
+                                              internalFormat, format, type);
+
+      _mesa_init_teximage_fields(ctx, target, texImage,
+                                 width, height, depth, border,
+                                 internalFormat, texFormat);
+
+      stObj->surface_based = GL_FALSE;
+   }
+}
+
+
 /**
  * Do glTexImage1/2/3D().
  */
@@ -522,23 +558,8 @@ st_TexImage(struct gl_context * ctx,
    DBG("%s target %s level %d %dx%dx%d border %d\n", __FUNCTION__,
        _mesa_lookup_enum_by_nr(target), level, width, height, depth, border);
 
-   /* switch to "normal" */
-   if (stObj->surface_based) {
-      gl_format texFormat;
-
-      _mesa_clear_texture_object(ctx, texObj);
-      pipe_resource_reference(&stObj->pt, NULL);
-
-      /* oops, need to init this image again */
-      texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
-                                              internalFormat, format, type);
-
-      _mesa_init_teximage_fields(ctx, target, texImage,
-                                 width, height, depth, border,
-                                 internalFormat, texFormat);
-
-      stObj->surface_based = GL_FALSE;
-   }
+   prep_teximage(ctx, texImage, internalFormat, width, height, depth, border,
+                 format, type);
 
    assert(texImage->Width == width);
    assert(texImage->Height == height);
-- 
1.7.1



More information about the mesa-dev mailing list