summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2016-03-29 13:32:32 -0700
committerKenneth Graunke <[email protected]>2016-04-01 22:05:20 -0700
commit9fe211bec4533bd5cebeb61b38343ae9c174abb7 (patch)
tree137e2789ea22ec11ec223f4026d695db7a834618 /src/compiler/glsl
parent013f25c3b3aa676cbd580fc070454d74db27a400 (diff)
glsl: Consolidate gl_VertexIDMESA -> gl_VertexID query hacks.
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 <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src/compiler/glsl')
-rw-r--r--src/compiler/glsl/linker.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 064e7f5ca21..c0d310746f3 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;