glsl: don't duplicate state vars as uniforms in the NIR linker

The linker was adding all state vars as uniforms, doubling the storage size
for shaders using only builtin uniforms, which increased CPU overhead for
constant buffer uploads.

When this code was originally ported from the GLSL IR linker we forgot
to exclude builtins because the check was not done in the
add_uniform_to_shader class but rather a check was done when passing
variables to this class for processing.

Fixes: 664e4a610d ("glsl/nir: Fill in the Parameters in NIR linker")

Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Tested-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6958>
This commit is contained in:
Timothy Arceri 2020-10-01 20:23:28 +10:00 committed by Marge Bot
parent 535fd6d45e
commit 038fcbcaed
1 changed files with 6 additions and 0 deletions

View File

@ -637,6 +637,12 @@ add_parameter(struct gl_uniform_storage *uniform,
const struct glsl_type *type,
struct nir_link_uniforms_state *state)
{
/* Builtin uniforms are backed by PROGRAM_STATE_VAR, so don't add them as
* uniforms.
*/
if (uniform->builtin)
return;
if (!state->params || uniform->is_shader_storage ||
(glsl_contains_opaque(type) && !state->current_var->data.bindless))
return;