Module: Mesa
Branch: staging/20.2
Commit: aedd29141ac2de776c41fd356f6e7cf747f0f0fa
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=aedd29141ac2de776c41fd356f6e7cf747f0f0fa

Author: Timothy Arceri <[email protected]>
Date:   Thu Oct  1 20:23:28 2020 +1000

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: 664e4a610dc8 ("glsl/nir: Fill in the Parameters in NIR linker")

Reviewed-by: Alejandro Piñeiro <[email protected]>
Tested-by: Marek Olšák <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6958>
(cherry picked from commit 038fcbcaed31b97f8f477f2496f8cf0a809b1892)

---

 .pick_status.json                        | 2 +-
 src/compiler/glsl/gl_nir_link_uniforms.c | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/.pick_status.json b/.pick_status.json
index b584e0c60ff..fc6bb3ef6cc 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -796,7 +796,7 @@
         "description": "glsl: don't duplicate state vars as uniforms in the 
NIR linker",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": "664e4a610dc8c0f2adc50de645a07cf4e2b622fd"
     },
diff --git a/src/compiler/glsl/gl_nir_link_uniforms.c 
b/src/compiler/glsl/gl_nir_link_uniforms.c
index 05b70a96507..656b42b601b 100644
--- a/src/compiler/glsl/gl_nir_link_uniforms.c
+++ b/src/compiler/glsl/gl_nir_link_uniforms.c
@@ -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;

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to