aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2017-05-15 08:30:51 +0200
committerNicolai Hähnle <[email protected]>2017-06-13 09:35:48 +0200
commitd21a35d63caafe4042da0abd29a43a24b64fa6c1 (patch)
tree919ce4d8ba2e7d37b4939b0ae2fe4347276b14a9
parentf97c92ae11916cc7984144c0e13a66854b10b5c1 (diff)
glsl: simplify varying matching
Unnamed struct types are now equal if they have the same field. Reviewed-by: Timothy Arceri <[email protected]>
-rw-r--r--src/compiler/glsl/link_varyings.cpp41
1 files changed, 9 insertions, 32 deletions
diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp
index 910e2eda82b..de3754c423a 100644
--- a/src/compiler/glsl/link_varyings.cpp
+++ b/src/compiler/glsl/link_varyings.cpp
@@ -184,25 +184,6 @@ process_xfb_layout_qualifiers(void *mem_ctx, const gl_linked_shader *sh,
return has_xfb_qualifiers;
}
-static bool
-anonymous_struct_type_matches(const glsl_type *output_type,
- const glsl_type *to_match)
-{
- while (output_type->is_array() && to_match->is_array()) {
- /* if the lengths at each level don't match fail. */
- if (output_type->length != to_match->length)
- return false;
- output_type = output_type->fields.array;
- to_match = to_match->fields.array;
- }
-
- if (output_type->is_array() || to_match->is_array())
- return false;
- return output_type->is_anonymous() &&
- to_match->is_anonymous() &&
- to_match->record_compare(output_type);
-}
-
/**
* Validate the types and qualifiers of an output from one stage against the
* matching input to another stage.
@@ -247,19 +228,15 @@ cross_validate_types_and_qualifiers(struct gl_shader_program *prog,
* fragment language."
*/
if (!output->type->is_array() || !is_gl_identifier(output->name)) {
- bool anon_matches = anonymous_struct_type_matches(output->type, type_to_match);
-
- if (!anon_matches) {
- linker_error(prog,
- "%s shader output `%s' declared as type `%s', "
- "but %s shader input declared as type `%s'\n",
- _mesa_shader_stage_to_string(producer_stage),
- output->name,
- output->type->name,
- _mesa_shader_stage_to_string(consumer_stage),
- input->type->name);
- return;
- }
+ linker_error(prog,
+ "%s shader output `%s' declared as type `%s', "
+ "but %s shader input declared as type `%s'\n",
+ _mesa_shader_stage_to_string(producer_stage),
+ output->name,
+ output->type->name,
+ _mesa_shader_stage_to_string(consumer_stage),
+ input->type->name);
+ return;
}
}