-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 07/29/2011 12:48 PM, Eric Anholt wrote: > Fixes a regression in codegen quality for ff_fragment_shader > conversion to GLSL -- glean texCombine produces 7.5% fewer Mesa IR > instructions. > --- > src/mesa/program/ir_to_mesa.cpp | 28 ++++++++++++++++++++++++---- > 1 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp > index 8b4a535..f82b048 100644 > --- a/src/mesa/program/ir_to_mesa.cpp > +++ b/src/mesa/program/ir_to_mesa.cpp > @@ -925,13 +925,33 @@ ir_to_mesa_visitor::try_emit_sat(ir_expression *ir) > if (!sat_src) > return false; > > + ir_to_mesa_instruction *new_inst; > +
Why not move this declaration down to the one place new_inst is set? > sat_src->accept(this); > src_reg src = this->result; > > - this->result = get_temp(ir->type); > - ir_to_mesa_instruction *inst; > - inst = emit(ir, OPCODE_MOV, dst_reg(this->result), src); > - inst->saturate = true; > + /* If we generated an expression instruction into a temporary in > + * processing the saturate's operand, apply the saturate to that > + * instruction. Otherwise, generate a MOV to do the saturate. > + * > + * Note that we have to be careful to only do this optimization if > + * the instruction in question was in generating src->result -- for > + * example, ir_dereference_array would generate a MUL to create the > + * reladdr and return us a src reg using that reladdr, and that MUL > + * not the thing we're trying to saturate. The "and that MUL.." bit doesn't parse for me. > + */ > + ir_expression *sat_src_expr = sat_src->as_expression(); > + new_inst = (ir_to_mesa_instruction *)this->instructions.get_tail(); > + if (sat_src_expr && (sat_src_expr->operation == ir_binop_mul || > + sat_src_expr->operation == ir_binop_add || > + sat_src_expr->operation == ir_binop_dot)) { > + new_inst->saturate = true; > + } else { > + this->result = get_temp(ir->type); > + ir_to_mesa_instruction *inst; > + inst = emit(ir, OPCODE_MOV, dst_reg(this->result), src); > + inst->saturate = true; > + } > > return true; > } -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ iEYEARECAAYFAk4253EACgkQX1gOwKyEAw+v8wCdEYODs+zLOoHkv1H1xmoU3UMX NPkAoIXJCEAbKy/6F9lZFwvrArwVMHCc =DJ3g -----END PGP SIGNATURE----- _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev