From 219cefe24f757e3b8df4052ae76d132e8956bee6 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Fri, 10 Jan 2020 14:44:07 +1100 Subject: glsl: move add_parameter() earlier in nir link uniforms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We will use add_parameter() in more of the helper functions in the following patches. Reviewed-by: Alejandro PiƱeiro Part-of: --- src/compiler/glsl/gl_nir_link_uniforms.c | 108 +++++++++++++++---------------- 1 file changed, 54 insertions(+), 54 deletions(-) (limited to 'src') diff --git a/src/compiler/glsl/gl_nir_link_uniforms.c b/src/compiler/glsl/gl_nir_link_uniforms.c index de3e75015a1..f311ebcf1ff 100644 --- a/src/compiler/glsl/gl_nir_link_uniforms.c +++ b/src/compiler/glsl/gl_nir_link_uniforms.c @@ -189,6 +189,60 @@ struct nir_link_uniforms_state { struct type_tree_entry *current_type; }; +static void +add_parameter(struct gl_uniform_storage *uniform, + struct gl_context *ctx, + struct gl_shader_program *prog, + const struct glsl_type *type, + struct nir_link_uniforms_state *state) +{ + if (!state->params || uniform->is_shader_storage || glsl_contains_opaque(type)) + return; + + unsigned num_params = glsl_get_aoa_size(type); + num_params = MAX2(num_params, 1); + num_params *= glsl_get_matrix_columns(glsl_without_array(type)); + + bool is_dual_slot = glsl_type_is_dual_slot(glsl_without_array(type)); + if (is_dual_slot) + num_params *= 2; + + struct gl_program_parameter_list *params = state->params; + int base_index = params->NumParameters; + _mesa_reserve_parameter_storage(params, num_params); + + if (ctx->Const.PackedDriverUniformStorage) { + for (unsigned i = 0; i < num_params; i++) { + unsigned dmul = glsl_type_is_64bit(glsl_without_array(type)) ? 2 : 1; + unsigned comps = glsl_get_vector_elements(glsl_without_array(type)) * dmul; + if (is_dual_slot) { + if (i & 0x1) + comps -= 4; + else + comps = 4; + } + + _mesa_add_parameter(params, PROGRAM_UNIFORM, NULL, comps, + glsl_get_gl_type(type), NULL, NULL, false); + } + } else { + for (unsigned i = 0; i < num_params; i++) { + _mesa_add_parameter(params, PROGRAM_UNIFORM, NULL, 4, + glsl_get_gl_type(type), NULL, NULL, true); + } + } + + /* Each Parameter will hold the index to the backing uniform storage. + * This avoids relying on names to match parameters and uniform + * storages. + */ + for (unsigned i = 0; i < num_params; i++) { + struct gl_program_parameter *param = ¶ms->Parameters[base_index + i]; + param->UniformStorageIndex = uniform - prog->data->UniformStorage; + param->MainUniformStorageIndex = state->current_var->data.location; + } +} + /** * Finds, returns, and updates the stage info for any uniform in UniformStorage * defined by @var. In general this is done using the explicit location, @@ -346,60 +400,6 @@ get_next_index(struct nir_link_uniforms_state *state, return index; } -static void -add_parameter(struct gl_uniform_storage *uniform, - struct gl_context *ctx, - struct gl_shader_program *prog, - const struct glsl_type *type, - struct nir_link_uniforms_state *state) -{ - if (!state->params || uniform->is_shader_storage || glsl_contains_opaque(type)) - return; - - unsigned num_params = glsl_get_aoa_size(type); - num_params = MAX2(num_params, 1); - num_params *= glsl_get_matrix_columns(glsl_without_array(type)); - - bool is_dual_slot = glsl_type_is_dual_slot(glsl_without_array(type)); - if (is_dual_slot) - num_params *= 2; - - struct gl_program_parameter_list *params = state->params; - int base_index = params->NumParameters; - _mesa_reserve_parameter_storage(params, num_params); - - if (ctx->Const.PackedDriverUniformStorage) { - for (unsigned i = 0; i < num_params; i++) { - unsigned dmul = glsl_type_is_64bit(glsl_without_array(type)) ? 2 : 1; - unsigned comps = glsl_get_vector_elements(glsl_without_array(type)) * dmul; - if (is_dual_slot) { - if (i & 0x1) - comps -= 4; - else - comps = 4; - } - - _mesa_add_parameter(params, PROGRAM_UNIFORM, NULL, comps, - glsl_get_gl_type(type), NULL, NULL, false); - } - } else { - for (unsigned i = 0; i < num_params; i++) { - _mesa_add_parameter(params, PROGRAM_UNIFORM, NULL, 4, - glsl_get_gl_type(type), NULL, NULL, true); - } - } - - /* Each Parameter will hold the index to the backing uniform storage. - * This avoids relying on names to match parameters and uniform - * storages. - */ - for (unsigned i = 0; i < num_params; i++) { - struct gl_program_parameter *param = ¶ms->Parameters[base_index + i]; - param->UniformStorageIndex = uniform - prog->data->UniformStorage; - param->MainUniformStorageIndex = state->current_var->data.location; - } -} - /** * Creates the neccessary entries in UniformStorage for the uniform. Returns * the number of locations used or -1 on failure. -- cgit v1.2.3