st/mesa: init hash keys with memset(), not designated initializers
authorBrian Paul <brianp@vmware.com>
Fri, 8 Mar 2019 17:09:15 +0000 (10:09 -0700)
committerBrian Paul <brianp@vmware.com>
Fri, 8 Mar 2019 17:23:11 +0000 (10:23 -0700)
Since the compiler may not zero-out padding in the object.
Add a couple comments about this to prevent misunderstandings in
the future.

Fixes: 67d96816ff5 ("st/mesa: move, clean-up shader variant key decls/inits")
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/mesa/state_tracker/st_atom_shader.c
src/mesa/state_tracker/st_program.c

index ac7a1a5b64b7854ca67b8fc9163fac51e4d14c26..a4475e28df72022a0449cce49107c508c330f8e2 100644 (file)
@@ -112,7 +112,10 @@ st_update_fp( struct st_context *st )
        !stfp->variants->key.bitmap) {
       shader = stfp->variants->driver_shader;
    } else {
-      struct st_fp_variant_key key = {0};
+      struct st_fp_variant_key key;
+
+      /* use memset, not an initializer to be sure all memory is zeroed */
+      memset(&key, 0, sizeof(key));
 
       key.st = st->has_shareable_shaders ? NULL : st;
 
@@ -168,7 +171,9 @@ st_update_vp( struct st_context *st )
        stvp->variants->key.passthrough_edgeflags == st->vertdata_edgeflags) {
       st->vp_variant = stvp->variants;
    } else {
-      struct st_vp_variant_key key = {0};
+      struct st_vp_variant_key key;
+
+      memset(&key, 0, sizeof(key));
 
       key.st = st->has_shareable_shaders ? NULL : st;
 
index 5e43a2eaa458776fff2c6048c7d677e3dfdbfedb..7015e503d12839530a765fcebb7567783059694b 100644 (file)
@@ -1772,7 +1772,10 @@ st_get_cp_variant(struct st_context *st,
 {
    struct pipe_context *pipe = st->pipe;
    struct st_basic_variant *v;
-   struct st_basic_variant_key key = {0};
+   struct st_basic_variant_key key;
+
+   /* use memset, not an initializer to be sure all memory is zeroed */
+   memset(&key, 0, sizeof(key));
 
    key.st = st->has_shareable_shaders ? NULL : st;
 
@@ -1995,7 +1998,9 @@ st_precompile_shader_variant(struct st_context *st,
    switch (prog->Target) {
    case GL_VERTEX_PROGRAM_ARB: {
       struct st_vertex_program *p = (struct st_vertex_program *)prog;
-      struct st_vp_variant_key key = {0};
+      struct st_vp_variant_key key;
+
+      memset(&key, 0, sizeof(key));
 
       key.st = st->has_shareable_shaders ? NULL : st;
       st_get_vp_variant(st, p, &key);
@@ -2022,7 +2027,9 @@ st_precompile_shader_variant(struct st_context *st,
 
    case GL_FRAGMENT_PROGRAM_ARB: {
       struct st_fragment_program *p = (struct st_fragment_program *)prog;
-      struct st_fp_variant_key key = {0};
+      struct st_fp_variant_key key;
+
+      memset(&key, 0, sizeof(key));
 
       key.st = st->has_shareable_shaders ? NULL : st;
       st_get_fp_variant(st, p, &key);