summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2016-05-17 11:29:40 +1000
committerTimothy Arceri <[email protected]>2016-05-17 15:06:12 +1000
commit6d5f7557fb45d56e38f7e19060e05de4c77a9ee5 (patch)
treec412841082d91dabb1e0d6b58d7c7baca4cedb0a
parentaae0865dc0134bdfb4a4fe05b2bcdbee9fc0a0ff (diff)
glsl: fix location and component packing validation on patches
These varyings have a separate location domain from per-vertex varyings and need to be handled separately. Reviewed-by: Dave Airlie <[email protected]>
-rw-r--r--src/compiler/glsl/link_varyings.cpp3
-rw-r--r--src/compiler/shader_enums.h1
2 files changed, 3 insertions, 1 deletions
diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp
index 003b9d46abc..572aba9e8b3 100644
--- a/src/compiler/glsl/link_varyings.cpp
+++ b/src/compiler/glsl/link_varyings.cpp
@@ -350,7 +350,8 @@ cross_validate_outputs_to_inputs(struct gl_shader_program *prog,
gl_shader *producer, gl_shader *consumer)
{
glsl_symbol_table parameters;
- ir_variable *explicit_locations[MAX_VARYING][4] = { {NULL, NULL} };
+ ir_variable *explicit_locations[MAX_VARYINGS_INCL_PATCH][4] =
+ { {NULL, NULL} };
/* Find all shader outputs in the "producer" stage.
*/
diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h
index e93345d973d..df3124eb6b3 100644
--- a/src/compiler/shader_enums.h
+++ b/src/compiler/shader_enums.h
@@ -255,6 +255,7 @@ typedef enum
#define VARYING_SLOT_MAX (VARYING_SLOT_VAR0 + MAX_VARYING)
#define VARYING_SLOT_PATCH0 (VARYING_SLOT_MAX)
#define VARYING_SLOT_TESS_MAX (VARYING_SLOT_PATCH0 + MAX_VARYING)
+#define MAX_VARYINGS_INCL_PATCH (VARYING_SLOT_TESS_MAX - VARYING_SLOT_VAR0)
const char *gl_varying_slot_name(gl_varying_slot slot);