From: Dave Airlie Date: Tue, 17 May 2016 00:31:29 +0000 (+1000) Subject: glsl/linker: attempt to match anonymous structures at link X-Git-Tag: android-x86-6.0-r1~902 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=61b67892522c89800541ed4f266ab88e5f1db620;p=android-x86%2Fexternal-mesa.git glsl/linker: attempt to match anonymous structures at link This is my attempt at fixing at least one of the UE4 bugs with GL4.3. If we are doing intrastage matching and hit anonymous structs, then we should do a record comparison instead of using the names. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95005 Reviewed-by: Ian Romanick Signed-off-by: Dave Airlie --- diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index 59ce1a2d285..1782a967ebf 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -226,15 +226,21 @@ cross_validate_types_and_qualifiers(struct gl_shader_program *prog, * fragment language." */ if (!output->type->is_array() || !is_gl_identifier(output->name)) { - 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; + bool anon_matches = output->type->is_anonymous() && + type_to_match->is_anonymous() && + type_to_match->record_compare(output->type); + + 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; + } } }