We will have already loaded the uniforms when the parameter list was restored from cache. Reviewed-by: Marek Olšák <marek.olsak@amd.com>tags/17.1-branchpoint
| @@ -2532,7 +2532,8 @@ _mesa_generate_parameters_list_for_uniforms(struct gl_shader_program | |||
| void | |||
| _mesa_associate_uniform_storage(struct gl_context *ctx, | |||
| struct gl_shader_program *shader_program, | |||
| struct gl_program_parameter_list *params) | |||
| struct gl_program_parameter_list *params, | |||
| bool propagate_to_storage) | |||
| { | |||
| /* After adding each uniform to the parameter list, connect the storage for | |||
| * the parameter with the tracking structure used by the API for the | |||
| @@ -2622,9 +2623,11 @@ _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. | |||
| */ | |||
| _mesa_propagate_uniforms_to_driver_storage(storage, | |||
| 0, | |||
| MAX2(1, storage->array_elements)); | |||
| if (propagate_to_storage) { | |||
| unsigned array_elements = MAX2(1, storage->array_elements); | |||
| _mesa_propagate_uniforms_to_driver_storage(storage, 0, | |||
| array_elements); | |||
| } | |||
| last_location = location; | |||
| } | |||
| @@ -2984,7 +2987,8 @@ 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->Parameters); | |||
| _mesa_associate_uniform_storage(ctx, shader_program, prog->Parameters, | |||
| true); | |||
| if (!shader_program->data->LinkStatus) { | |||
| goto fail_exit; | |||
| } | |||
| @@ -45,7 +45,8 @@ _mesa_generate_parameters_list_for_uniforms(struct gl_shader_program | |||
| void | |||
| _mesa_associate_uniform_storage(struct gl_context *ctx, | |||
| struct gl_shader_program *shader_program, | |||
| struct gl_program_parameter_list *params); | |||
| struct gl_program_parameter_list *params, | |||
| bool propagate_to_storage); | |||
| #ifdef __cplusplus | |||
| } | |||
| @@ -426,7 +426,8 @@ st_nir_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->Parameters); | |||
| _mesa_associate_uniform_storage(ctx, shader_program, prog->Parameters, | |||
| true); | |||
| struct st_vertex_program *stvp; | |||
| struct st_fragment_program *stfp; | |||
| @@ -6770,7 +6770,8 @@ 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->Parameters); | |||
| _mesa_associate_uniform_storage(ctx, shader_program, prog->Parameters, | |||
| true); | |||
| if (!shader_program->data->LinkStatus) { | |||
| free_glsl_to_tgsi_visitor(v); | |||
| _mesa_reference_program(ctx, &shader->Program, NULL); | |||
| @@ -379,7 +379,8 @@ st_load_tgsi_from_disk_cache(struct gl_context *ctx, | |||
| } | |||
| st_set_prog_affected_state_flags(glprog); | |||
| _mesa_associate_uniform_storage(ctx, prog, glprog->Parameters); | |||
| _mesa_associate_uniform_storage(ctx, prog, glprog->Parameters, | |||
| false); | |||
| free(buffer); | |||
| } else { | |||