util: use memset() to initialize surface, sampler_view templates
authorBrian Paul <brianp@vmware.com>
Tue, 10 Jan 2012 18:35:57 +0000 (11:35 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 10 Jan 2012 19:37:38 +0000 (12:37 -0700)
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.

v2: fix surf pointer mix-up: "&surf" -> "surf"

Jakob Bornecrantz <jakob@vmware.com>

src/gallium/auxiliary/util/u_sampler.c
src/gallium/auxiliary/util/u_surface.c

index bb26099b7e15febdb349ac1223abe3d62b3b5c90..227641bdafcfb2af0ce68d581b9d4fc19b699393 100644 (file)
 #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.
     */
 
index c7fbd3657f960c8abc42c84326ae7f449569db40..a541a38ffa1696d7586070fbb64db69b3701cd9b 100644 (file)
 #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,