glsl/linker: Include the interface name for input and output blocks

On my oes_shader_io_blocks branch, this fixes 71
dEQP-GLES31.functional.program_interface_query.* tests.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
Ian Romanick
2016-05-13 17:45:49 -07:00
parent 7c11589eb4
commit 11096ecc39

View File

@@ -3654,6 +3654,21 @@ add_shader_variable(struct gl_shader_program *shProg, unsigned stage_mask,
}
default: {
/* Issue #16 of the ARB_program_interface_query spec says:
*
* "* If a variable is a member of an interface block without an
* instance name, it is enumerated using just the variable name.
*
* * If a variable is a member of an interface block with an instance
* name, it is enumerated as "BlockName.Member", where "BlockName" is
* the name of the interface block (not the instance name) and
* "Member" is the name of the variable."
*/
const char *prefixed_name = var->data.from_named_ifc_block
? ralloc_asprintf(shProg, "%s.%s", var->get_interface_type()->name,
name)
: name;
/* The ARB_program_interface_query spec says:
*
* "For an active variable declared as a single instance of a basic
@@ -3661,7 +3676,7 @@ add_shader_variable(struct gl_shader_program *shProg, unsigned stage_mask,
* from the shader source."
*/
gl_shader_variable *sha_v =
create_shader_variable(shProg, var, name, type,
create_shader_variable(shProg, var, prefixed_name, type,
use_implicit_location, location);
if (!sha_v)
return false;