projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
glsl: Interface Block instances don't need linking validation
[mesa.git]
/
src
/
compiler
/
glsl
/
linker.cpp
diff --git
a/src/compiler/glsl/linker.cpp
b/src/compiler/glsl/linker.cpp
index f9c226a22c6978ae97cc3c18166251b3e07df0de..7bbffb7621fd1a88852d41f4776806e9f38cfc6e 100644
(file)
--- a/
src/compiler/glsl/linker.cpp
+++ b/
src/compiler/glsl/linker.cpp
@@
-885,6
+885,13
@@
cross_validate_globals(struct gl_shader_program *prog,
if (var->type->contains_subroutine())
continue;
if (var->type->contains_subroutine())
continue;
+ /* Don't cross validate interface instances. These are only relevant
+ * inside a shader. The cross validation is done at the Interface Block
+ * name level.
+ */
+ if (var->is_interface_instance())
+ continue;
+
/* Don't cross validate temporaries that are at global scope. These
* will eventually get pulled into the shaders 'main'.
*/
/* Don't cross validate temporaries that are at global scope. These
* will eventually get pulled into the shaders 'main'.
*/
@@
-897,11
+904,8
@@
cross_validate_globals(struct gl_shader_program *prog,
*/
ir_variable *const existing = variables->get_variable(var->name);
if (existing != NULL) {
*/
ir_variable *const existing = variables->get_variable(var->name);
if (existing != NULL) {
- /* Check if types match. Interface blocks have some special
- * rules so we handle those elsewhere.
- */
- if (var->type != existing->type &&
- !var->is_interface_instance()) {
+ /* Check if types match. */
+ if (var->type != existing->type) {
if (!validate_intrastage_arrays(prog, var, existing)) {
if (var->type->is_record() && existing->type->is_record()
&& existing->type->record_compare(var->type)) {
if (!validate_intrastage_arrays(prog, var, existing)) {
if (var->type->is_record() && existing->type->is_record()
&& existing->type->record_compare(var->type)) {