[Mesa-dev] [PATCH 1/2] util: use memset() to initialize surface, sampler_view templates

Brian Paul brianp at vmware.com
Tue Jan 10 10:41:32 PST 2012


These initialization functions weren't initializing all the fields so
some had undefined values.  The callers of these functions sometimes use
a structure assignment to initialize new objects from these templates
so we'd just propagate the undefined values.  That made for some confusing
info when debugging, plus it could lead to bugs.
---
 src/gallium/auxiliary/util/u_sampler.c |    6 ++++++
 src/gallium/auxiliary/util/u_surface.c |   17 ++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_sampler.c b/src/gallium/auxiliary/util/u_sampler.c
index bb26099..227641b 100644
--- a/src/gallium/auxiliary/util/u_sampler.c
+++ b/src/gallium/auxiliary/util/u_sampler.c
@@ -30,12 +30,18 @@
 #include "u_sampler.h"
 
 
+/**
+ * Initialize a pipe_sampler_view.  'view' is considered to have
+ * uninitialized contents.
+ */
 static void
 default_template(struct pipe_sampler_view *view,
                  const struct pipe_resource *texture,
                  enum pipe_format format,
                  unsigned expand_green_blue)
 {
+   memset(view, 0, sizeof(*view));
+
    /* XXX: Check if format is compatible with texture->format.
     */
 
diff --git a/src/gallium/auxiliary/util/u_surface.c b/src/gallium/auxiliary/util/u_surface.c
index c7fbd36..6cbab65 100644
--- a/src/gallium/auxiliary/util/u_surface.c
+++ b/src/gallium/auxiliary/util/u_surface.c
@@ -42,17 +42,21 @@
 #include "util/u_surface.h"
 #include "util/u_pack_color.h"
 
+
+/**
+ * Initialize a pipe_surface object.  'view' is considered to have
+ * uninitialized contents.
+ */
 void
-u_surface_default_template(struct pipe_surface *view,
+u_surface_default_template(struct pipe_surface *surf,
                            const struct pipe_resource *texture,
                            unsigned bind)
 {
-   view->format = texture->format;
-   view->u.tex.level = 0;
-   view->u.tex.first_layer = 0;
-   view->u.tex.last_layer = 0;
+   memset(&surf, 0, sizeof(*surf));
+
+   surf->format = texture->format;
    /* XXX should filter out all non-rt/ds bind flags ? */
-   view->usage = bind;
+   surf->usage = bind;
 }
 
 /**
@@ -108,7 +112,6 @@ util_create_rgba_surface(struct pipe_context *pipe,
       return FALSE;
 
    /* create surface */
-   memset(&surf_templ, 0, sizeof(surf_templ));
    u_surface_default_template(&surf_templ, *textureOut, bind);
    /* create surface / view into texture */
    *surfaceOut = pipe->create_surface(pipe,
-- 
1.7.3.4



More information about the mesa-dev mailing list