mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 12:28:07 +02:00
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 <ian.d.romanick@intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
4dfa89e33c
commit
61b6789252
1 changed files with 15 additions and 9 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue