[Mesa-dev] [PATCH] st/mesa: move, clean-up shader variant key decls/inits

Roland Scheidegger sroland at vmware.com
Fri Mar 8 16:53:24 UTC 2019


Am 07.03.19 um 17:20 schrieb Brian Paul:
> Move the variant key declarations inside the scope they're used.
> Use designated initializers instead of memset() calls.
I don't think this will always work as intended, since there's
non-explicit padding bits in the key, and AFAIK even with c11 compilers
are not required to set such padding to zero too.

Roland



> ---
>  src/mesa/state_tracker/st_atom_shader.c | 8 ++++----
>  src/mesa/state_tracker/st_program.c     | 9 +++------
>  2 files changed, 7 insertions(+), 10 deletions(-)
> 
> diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c
> index c6faa3f..ac7a1a5 100644
> --- a/src/mesa/state_tracker/st_atom_shader.c
> +++ b/src/mesa/state_tracker/st_atom_shader.c
> @@ -97,7 +97,6 @@ void
>  st_update_fp( struct st_context *st )
>  {
>     struct st_fragment_program *stfp;
> -   struct st_fp_variant_key key;
>  
>     assert(st->ctx->FragmentProgram._Current);
>     stfp = st_fragment_program(st->ctx->FragmentProgram._Current);
> @@ -113,7 +112,8 @@ st_update_fp( struct st_context *st )
>         !stfp->variants->key.bitmap) {
>        shader = stfp->variants->driver_shader;
>     } else {
> -      memset(&key, 0, sizeof(key));
> +      struct st_fp_variant_key key = {0};
> +
>        key.st = st->has_shareable_shaders ? NULL : st;
>  
>        /* _NEW_FRAG_CLAMP */
> @@ -155,7 +155,6 @@ void
>  st_update_vp( struct st_context *st )
>  {
>     struct st_vertex_program *stvp;
> -   struct st_vp_variant_key key;
>  
>     /* find active shader and params -- Should be covered by
>      * ST_NEW_VERTEX_PROGRAM
> @@ -169,7 +168,8 @@ st_update_vp( struct st_context *st )
>         stvp->variants->key.passthrough_edgeflags == st->vertdata_edgeflags) {
>        st->vp_variant = stvp->variants;
>     } else {
> -      memset(&key, 0, sizeof key);
> +      struct st_vp_variant_key key = {0};
> +
>        key.st = st->has_shareable_shaders ? NULL : st;
>  
>        /* When this is true, we will add an extra input to the vertex
> diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
> index c2daa4d..5e43a2e 100644
> --- a/src/mesa/state_tracker/st_program.c
> +++ b/src/mesa/state_tracker/st_program.c
> @@ -1772,9 +1772,8 @@ 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;
> +   struct st_basic_variant_key key = {0};
>  
> -   memset(&key, 0, sizeof(key));
>     key.st = st->has_shareable_shaders ? NULL : st;
>  
>     /* Search for existing variant */
> @@ -1996,9 +1995,8 @@ 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;
> +      struct st_vp_variant_key key = {0};
>  
> -      memset(&key, 0, sizeof(key));
>        key.st = st->has_shareable_shaders ? NULL : st;
>        st_get_vp_variant(st, p, &key);
>        break;
> @@ -2024,9 +2022,8 @@ 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;
> +      struct st_fp_variant_key key = {0};
>  
> -      memset(&key, 0, sizeof(key));
>        key.st = st->has_shareable_shaders ? NULL : st;
>        st_get_fp_variant(st, p, &key);
>        break;
> 



More information about the mesa-dev mailing list