util: use memset() to initialize surface, sampler_view templates

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>
This commit is contained in:
Brian Paul
2012-01-10 11:35:57 -07:00
parent 6bf5daf331
commit 2e87660ca6
2 changed files with 16 additions and 7 deletions
+6
View File
@@ -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.
*/
+10 -7
View File
@@ -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,