nv50,nvc0: zero out program struct on program_destroy
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Wed, 11 Jan 2012 17:50:15 +0000 (18:50 +0100)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Wed, 11 Jan 2012 19:26:47 +0000 (20:26 +0100)
Prevent any state from carrying over to a new translation in cases
where we assume that data is still zero from initial calloc (these
would require us to do individual zeroing before translation which
would be more code).

src/gallium/drivers/nv50/nv50_program.c
src/gallium/drivers/nvc0/nvc0_program.c

index c8b708c02b4e7042a11042a2c3765b38ba958beb..c141a91eec23fb333e71e6506e753aaf228ad6fc 100644 (file)
@@ -677,6 +677,9 @@ out:
 void
 nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p)
 {
+   const struct pipe_shader_state pipe = p->pipe;
+   const ubyte type = p->type;
+
    if (p->res)
       nouveau_resource_free(&p->res);
 
@@ -686,5 +689,8 @@ nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p)
    if (p->fixups)
       FREE(p->fixups);
 
-   p->translated = FALSE;
+   memset(p, 0, sizeof(*p));
+
+   p->pipe = pipe;
+   p->type = type;
 }
index 42cd21d95677461d3c4612694a72101e247d9820..813008cd537d4e263b5e9e3ad278d1d53a2c1875 100644 (file)
@@ -711,6 +711,9 @@ nvc0_program_library_upload(struct nvc0_context *nvc0)
 void
 nvc0_program_destroy(struct nvc0_context *nvc0, struct nvc0_program *prog)
 {
+   const struct pipe_shader_state pipe = prog->pipe;
+   const ubyte type = prog->type;
+
    if (prog->res)
       nouveau_resource_free(&prog->res);
 
@@ -726,7 +729,8 @@ nvc0_program_destroy(struct nvc0_context *nvc0, struct nvc0_program *prog)
       FREE(prog->tfb);
    }
 
-   memset(prog->hdr, 0, sizeof(prog->hdr));
+   memset(prog, 0, sizeof(*prog));
 
-   prog->translated = FALSE;
+   prog->pipe = pipe;
+   prog->type = type;
 }