Mesa (master): glsl: split gl_CurrentAttribFragMESA into elements

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jan 21 22:16:31 UTC 2021


Module: Mesa
Branch: master
Commit: 0c77190b312a495b010302b3fe9a097ddf8a7b30
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0c77190b312a495b010302b3fe9a097ddf8a7b30

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Dec  5 09:17:17 2020 -0500

glsl: split gl_CurrentAttribFragMESA into elements

This reduces the constant buffer size by eliminating unused elements
because it's no longer a uniform array that the compiler can't split.

This looks silly, but there is no other way because all elements must be
globally declared, which means they can't be generated by a loop.

Reviewed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8183>

---

 src/compiler/glsl/builtin_variables.cpp | 82 +++++++++++++++++++++++++++++++--
 src/mesa/main/ff_fragment_shader.cpp    | 11 ++---
 2 files changed, 82 insertions(+), 11 deletions(-)

diff --git a/src/compiler/glsl/builtin_variables.cpp b/src/compiler/glsl/builtin_variables.cpp
index d84cc66b992..2df045eb345 100644
--- a/src/compiler/glsl/builtin_variables.cpp
+++ b/src/compiler/glsl/builtin_variables.cpp
@@ -184,9 +184,43 @@ static const struct gl_builtin_uniform_element gl_FogParamsOptimizedMESA_element
    {NULL, {STATE_FOG_PARAMS_OPTIMIZED}, SWIZZLE_XYZW},
 };
 
-static const struct gl_builtin_uniform_element gl_CurrentAttribFragMESA_elements[] = {
-   {NULL, {STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED, 0}, SWIZZLE_XYZW},
-};
+#define ATTRIB(i) \
+   static const struct gl_builtin_uniform_element gl_CurrentAttribFrag##i##MESA_elements[] = { \
+      {NULL, {STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED, i}, SWIZZLE_XYZW}, \
+   };
+
+ATTRIB(0)
+ATTRIB(1)
+ATTRIB(2)
+ATTRIB(3)
+ATTRIB(4)
+ATTRIB(5)
+ATTRIB(6)
+ATTRIB(7)
+ATTRIB(8)
+ATTRIB(9)
+ATTRIB(10)
+ATTRIB(11)
+ATTRIB(12)
+ATTRIB(13)
+ATTRIB(14)
+ATTRIB(15)
+ATTRIB(16)
+ATTRIB(17)
+ATTRIB(18)
+ATTRIB(19)
+ATTRIB(20)
+ATTRIB(21)
+ATTRIB(22)
+ATTRIB(23)
+ATTRIB(24)
+ATTRIB(25)
+ATTRIB(26)
+ATTRIB(27)
+ATTRIB(28)
+ATTRIB(29)
+ATTRIB(30)
+ATTRIB(31)
 
 #define MATRIX(name, statevar)				\
    static const struct gl_builtin_uniform_element name ## _elements[] = { \
@@ -277,7 +311,39 @@ static const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = {
    STATEVAR(gl_NormalScale),
 
    STATEVAR(gl_FogParamsOptimizedMESA),
-   STATEVAR(gl_CurrentAttribFragMESA),
+
+   STATEVAR(gl_CurrentAttribFrag0MESA),
+   STATEVAR(gl_CurrentAttribFrag1MESA),
+   STATEVAR(gl_CurrentAttribFrag2MESA),
+   STATEVAR(gl_CurrentAttribFrag3MESA),
+   STATEVAR(gl_CurrentAttribFrag4MESA),
+   STATEVAR(gl_CurrentAttribFrag5MESA),
+   STATEVAR(gl_CurrentAttribFrag6MESA),
+   STATEVAR(gl_CurrentAttribFrag7MESA),
+   STATEVAR(gl_CurrentAttribFrag8MESA),
+   STATEVAR(gl_CurrentAttribFrag9MESA),
+   STATEVAR(gl_CurrentAttribFrag10MESA),
+   STATEVAR(gl_CurrentAttribFrag11MESA),
+   STATEVAR(gl_CurrentAttribFrag12MESA),
+   STATEVAR(gl_CurrentAttribFrag13MESA),
+   STATEVAR(gl_CurrentAttribFrag14MESA),
+   STATEVAR(gl_CurrentAttribFrag15MESA),
+   STATEVAR(gl_CurrentAttribFrag16MESA),
+   STATEVAR(gl_CurrentAttribFrag17MESA),
+   STATEVAR(gl_CurrentAttribFrag18MESA),
+   STATEVAR(gl_CurrentAttribFrag19MESA),
+   STATEVAR(gl_CurrentAttribFrag20MESA),
+   STATEVAR(gl_CurrentAttribFrag21MESA),
+   STATEVAR(gl_CurrentAttribFrag22MESA),
+   STATEVAR(gl_CurrentAttribFrag23MESA),
+   STATEVAR(gl_CurrentAttribFrag24MESA),
+   STATEVAR(gl_CurrentAttribFrag25MESA),
+   STATEVAR(gl_CurrentAttribFrag26MESA),
+   STATEVAR(gl_CurrentAttribFrag27MESA),
+   STATEVAR(gl_CurrentAttribFrag28MESA),
+   STATEVAR(gl_CurrentAttribFrag29MESA),
+   STATEVAR(gl_CurrentAttribFrag30MESA),
+   STATEVAR(gl_CurrentAttribFrag31MESA),
 
    {NULL, NULL, 0}
 };
@@ -960,7 +1026,13 @@ builtin_variable_generator::generate_uniforms()
        state->OES_sample_variables_enable)
       add_uniform(int_t, GLSL_PRECISION_LOW, "gl_NumSamples");
    add_uniform(type("gl_DepthRangeParameters"), "gl_DepthRange");
-   add_uniform(array(vec4_t, VARYING_SLOT_MAX), "gl_CurrentAttribFragMESA");
+
+   for (unsigned i = 0; i < VARYING_SLOT_VAR0; i++) {
+      char name[128];
+
+      snprintf(name, sizeof(name), "gl_CurrentAttribFrag%uMESA", i);
+      add_uniform(vec4_t, name);
+   }
 
    if (compatibility) {
       add_uniform(mat4_t, "gl_ModelViewMatrix");
diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp
index 94ed943ab77..420163b3e99 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -363,14 +363,13 @@ static ir_rvalue *
 get_current_attrib(texenv_fragment_program *p, GLuint attrib)
 {
    ir_variable *current;
-   ir_rvalue *val;
+   char name[128];
+
+   snprintf(name, sizeof(name), "gl_CurrentAttribFrag%uMESA", attrib);
 
-   current = p->shader->symbols->get_variable("gl_CurrentAttribFragMESA");
+   current = p->shader->symbols->get_variable(name);
    assert(current);
-   current->data.max_array_access = MAX2(current->data.max_array_access, (int)attrib);
-   val = new(p->mem_ctx) ir_dereference_variable(current);
-   ir_rvalue *index = new(p->mem_ctx) ir_constant(attrib);
-   return new(p->mem_ctx) ir_dereference_array(val, index);
+   return new(p->mem_ctx) ir_dereference_variable(current);
 }
 
 static ir_rvalue *



More information about the mesa-commit mailing list