ir_to_mesa: Support user-defined varyings using the linker's locations.

Fixes glsl-reload-source.
This commit is contained in:
Eric Anholt
2010-06-28 14:47:43 -07:00
parent ad8ad338f4
commit f9ffccb06b

View File

@@ -929,15 +929,29 @@ ir_to_mesa_visitor::visit(ir_dereference_variable *ir)
!(var_in ^ in))
break;
}
if (i == ARRAY_SIZE(builtin_var_to_mesa_reg)) {
printf("Failed to find builtin for %s variable %s\n",
var_in ? "in" : "out",
ir->var->name);
abort();
if (i != ARRAY_SIZE(builtin_var_to_mesa_reg)) {
entry = new(mem_ctx) temp_entry(ir->var,
builtin_var_to_mesa_reg[i].file,
builtin_var_to_mesa_reg[i].index);
break;
}
entry = new(mem_ctx) temp_entry(ir->var,
builtin_var_to_mesa_reg[i].file,
builtin_var_to_mesa_reg[i].index);
/* If no builtin, then it's a user-generated varying
* (FINISHME: or a function argument!)
*/
/* The linker-assigned location is VERT_RESULT_* or FRAG_ATTRIB*
*/
assert(ir->var->location != -1);
if (var_in) {
entry = new(mem_ctx) temp_entry(ir->var,
PROGRAM_INPUT,
ir->var->location);
} else {
entry = new(mem_ctx) temp_entry(ir->var,
PROGRAM_OUTPUT,
ir->var->location);
}
break;
case ir_var_auto:
entry = new(mem_ctx) temp_entry(ir->var, PROGRAM_TEMPORARY,