ir_to_mesa, glsl_to_tgsi: Remove try_emit_saturate

Now that saturate is implemented natively as instruction,
we can cut down on unneeded functionality.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
This commit is contained in:
Abdiel Janulgue 2014-06-16 12:28:44 -07:00
parent 7841a246b9
commit b2c0c35907
2 changed files with 0 additions and 99 deletions

View File

@ -311,7 +311,6 @@ public:
int mul_operand);
bool try_emit_mad_for_and_not(ir_expression *ir,
int mul_operand);
bool try_emit_sat(ir_expression *ir);
void emit_swz(ir_expression *ir);
@ -866,50 +865,6 @@ ir_to_mesa_visitor::try_emit_mad_for_and_not(ir_expression *ir, int try_operand)
return true;
}
bool
ir_to_mesa_visitor::try_emit_sat(ir_expression *ir)
{
/* Saturates were only introduced to vertex programs in
* NV_vertex_program3, so don't give them to drivers in the VP.
*/
if (this->prog->Target == GL_VERTEX_PROGRAM_ARB)
return false;
ir_rvalue *sat_src = ir->as_rvalue_to_saturate();
if (!sat_src)
return false;
sat_src->accept(this);
src_reg src = this->result;
/* 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 what generated src->result. For
* example, ir_dereference_array might generate a MUL instruction
* to create the reladdr, and return us a src reg using that
* reladdr. That MUL result is not the value we're trying to
* saturate.
*/
ir_expression *sat_src_expr = sat_src->as_expression();
ir_to_mesa_instruction *new_inst;
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;
}
void
ir_to_mesa_visitor::reladdr_to_temp(ir_instruction *ir,
src_reg *reg, int *num_reladdr)
@ -1072,9 +1027,6 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
return;
}
if (try_emit_sat(ir))
return;
if (ir->operation == ir_quadop_vector) {
this->emit_swz(ir);
return;

View File

@ -446,7 +446,6 @@ public:
int mul_operand);
bool try_emit_mad_for_and_not(ir_expression *ir,
int mul_operand);
bool try_emit_sat(ir_expression *ir);
void emit_swz(ir_expression *ir);
@ -1270,53 +1269,6 @@ glsl_to_tgsi_visitor::try_emit_mad_for_and_not(ir_expression *ir, int try_operan
return true;
}
bool
glsl_to_tgsi_visitor::try_emit_sat(ir_expression *ir)
{
/* Emit saturates in the vertex shader only if SM 3.0 is supported.
*/
if (this->prog->Target == GL_VERTEX_PROGRAM_ARB &&
!st_context(this->ctx)->has_shader_model3) {
return false;
}
ir_rvalue *sat_src = ir->as_rvalue_to_saturate();
if (!sat_src)
return false;
sat_src->accept(this);
st_src_reg src = this->result;
/* 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 what generated src->result. For
* example, ir_dereference_array might generate a MUL instruction
* to create the reladdr, and return us a src reg using that
* reladdr. That MUL result is not the value we're trying to
* saturate.
*/
ir_expression *sat_src_expr = sat_src->as_expression();
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)) {
glsl_to_tgsi_instruction *new_inst;
new_inst = (glsl_to_tgsi_instruction *)this->instructions.get_tail();
new_inst->saturate = true;
} else {
this->result = get_temp(ir->type);
st_dst_reg result_dst = st_dst_reg(this->result);
result_dst.writemask = (1 << ir->type->vector_elements) - 1;
glsl_to_tgsi_instruction *inst;
inst = emit(ir, TGSI_OPCODE_MOV, result_dst, src);
inst->saturate = true;
}
return true;
}
void
glsl_to_tgsi_visitor::reladdr_to_temp(ir_instruction *ir,
st_src_reg *reg, int *num_reladdr)
@ -1363,9 +1315,6 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
return;
}
if (try_emit_sat(ir))
return;
if (ir->operation == ir_quadop_vector)
assert(!"ir_quadop_vector should have been lowered");