[Mesa-dev] [PATCH 07/10] glsl: Consolidate gl_VertexIDMESA -> gl_VertexID query hacks.

Kenneth Graunke kenneth at whitecape.org
Thu Mar 31 18:53:40 UTC 2016


A program will either have gl_VertexID or gl_VertexIDMESA (the lowered
zero-based version), not both.  Just spoof it in the resource list so
the hacks are done in a single place.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
 src/compiler/glsl/linker.cpp   | 12 ++++++++++--
 src/mesa/main/shader_query.cpp | 17 -----------------
 2 files changed, 10 insertions(+), 19 deletions(-)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 7d6c60a..e0aa557 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -3503,12 +3503,20 @@ create_shader_variable(struct gl_shader_program *shProg, const ir_variable *in)
    if (!out)
       return NULL;
 
-   out->type = in->type;
-   out->name = ralloc_strdup(shProg, in->name);
+   /* Since gl_VertexID may be lowered to gl_VertexIDMESA, but applications
+    * expect to see gl_VertexID in the program resource list.  Pretend.
+    */
+   if (in->data.mode == ir_var_system_value &&
+       in->data.location == SYSTEM_VALUE_VERTEX_ID_ZERO_BASE) {
+      out->name = ralloc_strdup(shProg, "gl_VertexID");
+   } else {
+      out->name = ralloc_strdup(shProg, in->name);
+   }
 
    if (!out->name)
       return NULL;
 
+   out->type = in->type;
    out->location = in->data.location;
    out->index = in->data.index;
    out->patch = in->data.patch;
diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
index e85e81d..caff79f 100644
--- a/src/mesa/main/shader_query.cpp
+++ b/src/mesa/main/shader_query.cpp
@@ -164,15 +164,6 @@ _mesa_GetActiveAttrib(GLuint program, GLuint desired_index,
 
    const char *var_name = var->name;
 
-   /* Since gl_VertexID may be lowered to gl_VertexIDMESA, we need to
-    * consider gl_VertexIDMESA as gl_VertexID for purposes of checking
-    * active attributes.
-    */
-   if (var->mode == ir_var_system_value &&
-       var->location == SYSTEM_VALUE_VERTEX_ID_ZERO_BASE) {
-      var_name = "gl_VertexID";
-   }
-
    _mesa_copy_string(name, maxLength, length, var_name);
 
    if (size)
@@ -421,7 +412,6 @@ _mesa_GetFragDataLocation(GLuint program, const GLchar *name)
 const char*
 _mesa_program_resource_name(struct gl_program_resource *res)
 {
-   const gl_shader_variable *var;
    switch (res->Type) {
    case GL_UNIFORM_BLOCK:
    case GL_SHADER_STORAGE_BLOCK:
@@ -429,13 +419,6 @@ _mesa_program_resource_name(struct gl_program_resource *res)
    case GL_TRANSFORM_FEEDBACK_VARYING:
       return RESOURCE_XFV(res)->Name;
    case GL_PROGRAM_INPUT:
-      var = RESOURCE_VAR(res);
-      /* Special case gl_VertexIDMESA -> gl_VertexID. */
-      if (var->mode == ir_var_system_value &&
-          var->location == SYSTEM_VALUE_VERTEX_ID_ZERO_BASE) {
-         return "gl_VertexID";
-      }
-   /* fallthrough */
    case GL_PROGRAM_OUTPUT:
       return RESOURCE_VAR(res)->name;
    case GL_UNIFORM:
-- 
2.7.4



More information about the mesa-dev mailing list