From f9ffccb06bcc90c862f20f8849b824022fbeebbf Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 28 Jun 2010 14:47:43 -0700 Subject: ir_to_mesa: Support user-defined varyings using the linker's locations. Fixes glsl-reload-source. --- src/mesa/shader/ir_to_mesa.cpp | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp index d371e35f9c..0f035b9e0e 100644 --- a/src/mesa/shader/ir_to_mesa.cpp +++ b/src/mesa/shader/ir_to_mesa.cpp @@ -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, -- cgit v1.2.3