glsl: allow redeclaration of TCS gl_out[]

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Chris Forbes 2014-09-12 21:27:26 +12:00 committed by Marek Olšák
parent 8cf72972ce
commit 19f46d0540

View file

@ -5892,16 +5892,28 @@ ast_interface_block::hir(exec_list *instructions,
if (ir_variable *earlier_gl_Position = if (ir_variable *earlier_gl_Position =
state->symbols->get_variable("gl_Position")) { state->symbols->get_variable("gl_Position")) {
earlier_per_vertex = earlier_gl_Position->get_interface_type(); earlier_per_vertex = earlier_gl_Position->get_interface_type();
} else if (ir_variable *earlier_gl_out =
state->symbols->get_variable("gl_out")) {
earlier_per_vertex = earlier_gl_out->get_interface_type();
} else { } else {
_mesa_glsl_error(&loc, state, _mesa_glsl_error(&loc, state,
"redeclaration of gl_PerVertex output not " "redeclaration of gl_PerVertex output not "
"allowed in the %s shader", "allowed in the %s shader",
_mesa_shader_stage_to_string(state->stage)); _mesa_shader_stage_to_string(state->stage));
} }
if (this->instance_name != NULL) { if (state->stage == MESA_SHADER_TESS_CTRL) {
_mesa_glsl_error(&loc, state, if (this->instance_name == NULL ||
"gl_PerVertex output may not be redeclared with " strcmp(this->instance_name, "gl_out") != 0 || this->array_specifier == NULL) {
"an instance name"); _mesa_glsl_error(&loc, state,
"gl_PerVertex output must be redeclared as "
"gl_out[]");
}
} else {
if (this->instance_name != NULL) {
_mesa_glsl_error(&loc, state,
"gl_PerVertex output may not be redeclared with "
"an instance name");
}
} }
break; break;
default: default: