[Mesa-dev] [PATCH 1/2] glsl/cs: Exclude gl_LocalInvocationIndex from builtin variable stripping

Jordan Justen jordan.l.justen at intel.com
Sun Aug 23 01:50:10 PDT 2015


We lower gl_LocalInvocationIndex based on the extension spec formula:

    gl_LocalInvocationIndex =
        gl_LocalInvocationID.z * gl_WorkGroupSize.x * gl_WorkGroupSize.y +
        gl_LocalInvocationID.y * gl_WorkGroupSize.x +
        gl_LocalInvocationID.x;

https://www.opengl.org/registry/specs/ARB/compute_shader.txt

We need to set this variable in main(), even if gl_LocalInvocationIndex
is not referenced by the shader. (It may be used by a linked shader.)
Therefore, we can't eliminate it as a dead variable.

Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
---
 git://people.freedesktop.org/~jljusten/mesa cs-local-index-v1
 http://patchwork.freedesktop.org/bundle/jljusten/cs-local-index-v1

 src/glsl/opt_dead_builtin_variables.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/glsl/opt_dead_builtin_variables.cpp b/src/glsl/opt_dead_builtin_variables.cpp
index 90b753e..03e5789 100644
--- a/src/glsl/opt_dead_builtin_variables.cpp
+++ b/src/glsl/opt_dead_builtin_variables.cpp
@@ -72,6 +72,13 @@ optimize_dead_builtin_variables(exec_list *instructions,
        *    gl_GlobalInvocationID =
        *       gl_WorkGroupID * gl_WorkGroupSize + gl_LocalInvocationID
        *
+       * Similarly, we initialize gl_LocalInvocationIndex in the main function:
+       *
+       *    gl_LocalInvocationIndex =
+       *       gl_LocalInvocationID.z * gl_WorkGroupSize.x * gl_WorkGroupSize.y +
+       *       gl_LocalInvocationID.y * gl_WorkGroupSize.x +
+       *       gl_LocalInvocationID.x;
+       *
        * Matrix uniforms with "Transpose" are not eliminated because there's
        * an optimization pass that can turn references to the regular matrix
        * into references to the transpose matrix.  Eliminating the transpose
@@ -87,6 +94,7 @@ optimize_dead_builtin_variables(exec_list *instructions,
           || strcmp(var->name, "gl_WorkGroupSize") == 0
           || strcmp(var->name, "gl_LocalInvocationID") == 0
           || strcmp(var->name, "gl_GlobalInvocationID") == 0
+          || strcmp(var->name, "gl_LocalInvocationIndex") == 0
           || strstr(var->name, "Transpose") != NULL)
          continue;
 
-- 
2.1.4



More information about the mesa-dev mailing list