diff --git a/src/compiler/glsl/gl_nir_link_uniforms.c b/src/compiler/glsl/gl_nir_link_uniforms.c index aa77225600b..cc223b9fafb 100644 --- a/src/compiler/glsl/gl_nir_link_uniforms.c +++ b/src/compiler/glsl/gl_nir_link_uniforms.c @@ -211,6 +211,9 @@ nir_setup_uniform_remap_tables(const struct gl_constants *consts, for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; + if (uniform->hidden) + continue; + if (uniform->is_shader_storage || glsl_get_base_type(uniform->type) == GLSL_TYPE_SUBROUTINE) continue; @@ -240,6 +243,9 @@ nir_setup_uniform_remap_tables(const struct gl_constants *consts, for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; + if (uniform->hidden) + continue; + if (uniform->is_shader_storage || glsl_get_base_type(uniform->type) == GLSL_TYPE_SUBROUTINE) continue; @@ -383,6 +389,24 @@ nir_setup_uniform_remap_tables(const struct gl_constants *consts, p->sh.NumSubroutineUniformRemapTable += entries; } } + + /* assign storage to hidden uniforms */ + for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { + struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; + + if (!uniform->hidden || + glsl_get_base_type(uniform->type) == GLSL_TYPE_SUBROUTINE) + continue; + + const unsigned entries = + MAX2(1, prog->data->UniformStorage[i].array_elements); + + uniform->storage = &data[data_pos]; + + unsigned num_slots = glsl_get_component_slots(uniform->type); + for (unsigned k = 0; k < entries; k++) + data_pos += num_slots; + } } static void