[Mesa-dev] [PATCH] st/glsl: make sure to propagate initialisers to driver storage

Tapani Pälli tapani.palli at intel.com
Mon Jun 3 06:58:04 UTC 2019


Verified to fix the test as initializers get propagated;

Reviewed-by: Tapani Pälli <tapani.palli at intel.com>

On 5/29/19 6:13 AM, Timothy Arceri wrote:
> This essentially reverts 20234cfe3a20.
> 
> Fixes piglit test:
> tests/spec/arb_get_program_binary/execution/uniform-after-restore.shader_test
> 
> Fixes: 20234cfe3a20 "st/mesa: don't propagate uniforms when restoring from cache"
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110784
> ---
>   src/mesa/program/ir_to_mesa.cpp            | 41 ++++++++++------------
>   src/mesa/program/ir_to_mesa.h              |  3 +-
>   src/mesa/state_tracker/st_glsl_to_nir.cpp  |  2 +-
>   src/mesa/state_tracker/st_glsl_to_tgsi.cpp |  2 +-
>   src/mesa/state_tracker/st_shader_cache.c   |  2 +-
>   5 files changed, 23 insertions(+), 27 deletions(-)
> 
> diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
> index f875c00238f..005b855230b 100644
> --- a/src/mesa/program/ir_to_mesa.cpp
> +++ b/src/mesa/program/ir_to_mesa.cpp
> @@ -2506,8 +2506,7 @@ _mesa_generate_parameters_list_for_uniforms(struct gl_context *ctx,
>   void
>   _mesa_associate_uniform_storage(struct gl_context *ctx,
>                                   struct gl_shader_program *shader_program,
> -                                struct gl_program *prog,
> -                                bool propagate_to_storage)
> +                                struct gl_program *prog)
>   {
>      struct gl_program_parameter_list *params = prog->Parameters;
>      gl_shader_stage shader_type = prog->info.stage;
> @@ -2633,26 +2632,24 @@ _mesa_associate_uniform_storage(struct gl_context *ctx,
>             * data from the linker's backing store.  This will cause values from
>             * initializers in the source code to be copied over.
>             */
> -         if (propagate_to_storage) {
> -            unsigned array_elements = MAX2(1, storage->array_elements);
> -            if (ctx->Const.PackedDriverUniformStorage && !prog->is_arb_asm &&
> -                (storage->is_bindless || !storage->type->contains_opaque())) {
> -               const int dmul = storage->type->is_64bit() ? 2 : 1;
> -               const unsigned components =
> -                  storage->type->vector_elements *
> -                  storage->type->matrix_columns;
> -
> -               for (unsigned s = 0; s < storage->num_driver_storage; s++) {
> -                  gl_constant_value *uni_storage = (gl_constant_value *)
> -                     storage->driver_storage[s].data;
> -                  memcpy(uni_storage, storage->storage,
> -                         sizeof(storage->storage[0]) * components *
> -                         array_elements * dmul);
> -               }
> -            } else {
> -               _mesa_propagate_uniforms_to_driver_storage(storage, 0,
> -                                                          array_elements);
> +         unsigned array_elements = MAX2(1, storage->array_elements);
> +         if (ctx->Const.PackedDriverUniformStorage && !prog->is_arb_asm &&
> +             (storage->is_bindless || !storage->type->contains_opaque())) {
> +            const int dmul = storage->type->is_64bit() ? 2 : 1;
> +            const unsigned components =
> +               storage->type->vector_elements *
> +               storage->type->matrix_columns;
> +
> +            for (unsigned s = 0; s < storage->num_driver_storage; s++) {
> +               gl_constant_value *uni_storage = (gl_constant_value *)
> +                  storage->driver_storage[s].data;
> +               memcpy(uni_storage, storage->storage,
> +                      sizeof(storage->storage[0]) * components *
> +                      array_elements * dmul);
>               }
> +         } else {
> +            _mesa_propagate_uniforms_to_driver_storage(storage, 0,
> +                                                       array_elements);
>            }
>   
>   	      last_location = location;
> @@ -3011,7 +3008,7 @@ get_mesa_program(struct gl_context *ctx,
>       * prog->ParameterValues to get reallocated (e.g., anything that adds a
>       * program constant) has to happen before creating this linkage.
>       */
> -   _mesa_associate_uniform_storage(ctx, shader_program, prog, true);
> +   _mesa_associate_uniform_storage(ctx, shader_program, prog);
>      if (!shader_program->data->LinkStatus) {
>         goto fail_exit;
>      }
> diff --git a/src/mesa/program/ir_to_mesa.h b/src/mesa/program/ir_to_mesa.h
> index f5665e6316e..33eb801bae8 100644
> --- a/src/mesa/program/ir_to_mesa.h
> +++ b/src/mesa/program/ir_to_mesa.h
> @@ -50,8 +50,7 @@ _mesa_generate_parameters_list_for_uniforms(struct gl_context *ctx,
>   void
>   _mesa_associate_uniform_storage(struct gl_context *ctx,
>                                   struct gl_shader_program *shader_program,
> -                                struct gl_program *prog,
> -                                bool propagate_to_storage);
> +                                struct gl_program *prog);
>   
>   #ifdef __cplusplus
>   }
> diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
> index 11fc03baf86..b40cb9223df 100644
> --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
> @@ -524,7 +524,7 @@ st_glsl_to_nir_post_opts(struct st_context *st, struct gl_program *prog,
>       * prog->ParameterValues to get reallocated (e.g., anything that adds a
>       * program constant) has to happen before creating this linkage.
>       */
> -   _mesa_associate_uniform_storage(st->ctx, shader_program, prog, true);
> +   _mesa_associate_uniform_storage(st->ctx, shader_program, prog);
>   
>      st_set_prog_affected_state_flags(prog);
>   
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index f2344703d71..18a5571aaa8 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -7247,7 +7247,7 @@ get_mesa_program_tgsi(struct gl_context *ctx,
>       * prog->ParameterValues to get reallocated (e.g., anything that adds a
>       * program constant) has to happen before creating this linkage.
>       */
> -   _mesa_associate_uniform_storage(ctx, shader_program, prog, true);
> +   _mesa_associate_uniform_storage(ctx, shader_program, prog);
>      if (!shader_program->data->LinkStatus) {
>         free_glsl_to_tgsi_visitor(v);
>         _mesa_reference_program(ctx, &shader->Program, NULL);
> diff --git a/src/mesa/state_tracker/st_shader_cache.c b/src/mesa/state_tracker/st_shader_cache.c
> index b18829754cb..ae1602310db 100644
> --- a/src/mesa/state_tracker/st_shader_cache.c
> +++ b/src/mesa/state_tracker/st_shader_cache.c
> @@ -366,7 +366,7 @@ st_deserialise_ir_program(struct gl_context *ctx,
>      }
>   
>      st_set_prog_affected_state_flags(prog);
> -   _mesa_associate_uniform_storage(ctx, shProg, prog, false);
> +   _mesa_associate_uniform_storage(ctx, shProg, prog);
>   
>      /* Create Gallium shaders now instead of on demand. */
>      if (ST_DEBUG & DEBUG_PRECOMPILE ||
> 


More information about the mesa-dev mailing list