glsl: only add outward facing varyings to resourse list for SSO

An SSO program can have multiple stages and we only want to add the externally
facing varyings. The current code was adding both the packed inputs and outputs
for the first and last stage of each program.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
This commit is contained in:
Timothy Arceri 2015-12-24 09:50:59 +11:00
parent 4d2a7f5111
commit 0508d9504a

View file

@ -3433,7 +3433,7 @@ add_interface_variables(struct gl_shader_program *shProg,
}
static bool
add_packed_varyings(struct gl_shader_program *shProg, int stage)
add_packed_varyings(struct gl_shader_program *shProg, int stage, GLenum type)
{
struct gl_shader *sh = shProg->_LinkedShaders[stage];
GLenum iface;
@ -3454,10 +3454,13 @@ add_packed_varyings(struct gl_shader_program *shProg, int stage)
default:
unreachable("unexpected type");
}
if (!add_program_resource(shProg, iface, var,
build_stageref(shProg, var->name,
var->data.mode)))
return false;
if (type == iface) {
if (!add_program_resource(shProg, iface, var,
build_stageref(shProg, var->name,
var->data.mode)))
return false;
}
}
}
return true;
@ -3724,9 +3727,9 @@ build_program_resource_list(struct gl_shader_program *shProg)
/* Program interface needs to expose varyings in case of SSO. */
if (shProg->SeparateShader) {
if (!add_packed_varyings(shProg, input_stage))
if (!add_packed_varyings(shProg, input_stage, GL_PROGRAM_INPUT))
return;
if (!add_packed_varyings(shProg, output_stage))
if (!add_packed_varyings(shProg, output_stage, GL_PROGRAM_OUTPUT))
return;
}