From: Kenneth Graunke Date: Thu, 22 Jul 2010 23:40:35 +0000 (-0700) Subject: glsl2: Make ir_assignment derive from ir_instruction, not ir_rvalue. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3c033637de7def553559c11d037f2e8bbb750f77;p=mesa.git glsl2: Make ir_assignment derive from ir_instruction, not ir_rvalue. Assignments can only exist at the top level instruction stream; the residual value is handled by assigning the value to a temporary and returning an ir_dereference_variable of that temporary. --- diff --git a/src/glsl/ir.h b/src/glsl/ir.h index c73bf4ce8b2..3fd3a7660bc 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -506,7 +506,7 @@ public: }; -class ir_assignment : public ir_rvalue { +class ir_assignment : public ir_instruction { public: ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs, ir_rvalue *condition); diff --git a/src/glsl/ir_reader.cpp b/src/glsl/ir_reader.cpp index 2248e926d5d..14bd2d62fd7 100644 --- a/src/glsl/ir_reader.cpp +++ b/src/glsl/ir_reader.cpp @@ -357,6 +357,8 @@ read_instruction(_mesa_glsl_parse_state *st, s_expression *expr, ir_instruction *inst = NULL; if (strcmp(tag->value(), "declare") == 0) { inst = read_declaration(st, list); + } else if (strcmp(tag->value(), "assign") == 0) { + inst = read_assignment(st, list); } else if (strcmp(tag->value(), "if") == 0) { inst = read_if(st, list, loop_ctx); } else if (strcmp(tag->value(), "loop") == 0) { @@ -546,8 +548,6 @@ read_rvalue(_mesa_glsl_parse_state *st, s_expression *expr) return rvalue; else if (strcmp(tag->value(), "swiz") == 0) { rvalue = read_swizzle(st, list); - } else if (strcmp(tag->value(), "assign") == 0) { - rvalue = read_assignment(st, list); } else if (strcmp(tag->value(), "expression") == 0) { rvalue = read_expression(st, list); } else if (strcmp(tag->value(), "call") == 0) {