glsl: Remove now useless dot optimization on basis vect
The optimization in commit d056863b covers these cases, which were the
first optimizations I added to the GLSL compiler.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -46,11 +46,6 @@ bool ir_rvalue::is_negative_one() const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ir_rvalue::is_basis() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify the swizzle make to move one component to another
|
||||
*
|
||||
@@ -1190,49 +1185,6 @@ ir_constant::is_negative_one() const
|
||||
return is_value(-1.0, -1);
|
||||
}
|
||||
|
||||
bool
|
||||
ir_constant::is_basis() const
|
||||
{
|
||||
if (!this->type->is_scalar() && !this->type->is_vector())
|
||||
return false;
|
||||
|
||||
if (this->type->is_boolean())
|
||||
return false;
|
||||
|
||||
unsigned ones = 0;
|
||||
for (unsigned c = 0; c < this->type->vector_elements; c++) {
|
||||
switch (this->type->base_type) {
|
||||
case GLSL_TYPE_FLOAT:
|
||||
if (this->value.f[c] == 1.0)
|
||||
ones++;
|
||||
else if (this->value.f[c] != 0.0)
|
||||
return false;
|
||||
break;
|
||||
case GLSL_TYPE_INT:
|
||||
if (this->value.i[c] == 1)
|
||||
ones++;
|
||||
else if (this->value.i[c] != 0)
|
||||
return false;
|
||||
break;
|
||||
case GLSL_TYPE_UINT:
|
||||
if (int(this->value.u[c]) == 1)
|
||||
ones++;
|
||||
else if (int(this->value.u[c]) != 0)
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
/* The only other base types are structures, arrays, samplers, and
|
||||
* booleans. Samplers cannot be constants, and the others should
|
||||
* have been filtered out above.
|
||||
*/
|
||||
assert(!"Should not get here.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return ones == 1;
|
||||
}
|
||||
|
||||
bool
|
||||
ir_constant::is_uint16_constant() const
|
||||
{
|
||||
|
||||
+3
-21
@@ -251,8 +251,7 @@ public:
|
||||
* for vector and scalar types that have all elements set to the value
|
||||
* zero (or \c false for booleans).
|
||||
*
|
||||
* \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one,
|
||||
* ir_constant::is_basis
|
||||
* \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one
|
||||
*/
|
||||
virtual bool is_zero() const;
|
||||
|
||||
@@ -264,8 +263,7 @@ public:
|
||||
* for vector and scalar types that have all elements set to the value
|
||||
* one (or \c true for booleans).
|
||||
*
|
||||
* \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one,
|
||||
* ir_constant::is_basis
|
||||
* \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one
|
||||
*/
|
||||
virtual bool is_one() const;
|
||||
|
||||
@@ -278,24 +276,9 @@ public:
|
||||
* negative one. For boolean types, the result is always \c false.
|
||||
*
|
||||
* \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one
|
||||
* ir_constant::is_basis
|
||||
*/
|
||||
virtual bool is_negative_one() const;
|
||||
|
||||
/**
|
||||
* Determine if an r-value is a basis vector
|
||||
*
|
||||
* The base implementation of this function always returns \c false. The
|
||||
* \c ir_constant class over-rides this function to return \c true \b only
|
||||
* for vector and scalar types that have one element set to the value one,
|
||||
* and the other elements set to the value zero. For boolean types, the
|
||||
* result is always \c false.
|
||||
*
|
||||
* \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one,
|
||||
* is_constant::is_negative_one
|
||||
*/
|
||||
virtual bool is_basis() const;
|
||||
|
||||
/**
|
||||
* Determine if an r-value is an unsigned integer constant which can be
|
||||
* stored in 16 bits.
|
||||
@@ -2257,7 +2240,7 @@ public:
|
||||
* Determine whether a constant has the same value as another constant
|
||||
*
|
||||
* \sa ir_constant::is_zero, ir_constant::is_one,
|
||||
* ir_constant::is_negative_one, ir_constant::is_basis
|
||||
* ir_constant::is_negative_one
|
||||
*/
|
||||
bool has_value(const ir_constant *) const;
|
||||
|
||||
@@ -2270,7 +2253,6 @@ public:
|
||||
virtual bool is_zero() const;
|
||||
virtual bool is_one() const;
|
||||
virtual bool is_negative_one() const;
|
||||
virtual bool is_basis() const;
|
||||
|
||||
/**
|
||||
* Return true for constants that could be stored as 16-bit unsigned values.
|
||||
|
||||
@@ -104,12 +104,6 @@ is_vec_negative_one(ir_constant *ir)
|
||||
return (ir == NULL) ? false : ir->is_negative_one();
|
||||
}
|
||||
|
||||
static inline bool
|
||||
is_vec_basis(ir_constant *ir)
|
||||
{
|
||||
return (ir == NULL) ? false : ir->is_basis();
|
||||
}
|
||||
|
||||
static inline bool
|
||||
is_valid_vec_const(ir_constant *ir)
|
||||
{
|
||||
@@ -537,23 +531,6 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
|
||||
if (is_vec_zero(op_const[0]) || is_vec_zero(op_const[1]))
|
||||
return ir_constant::zero(mem_ctx, ir->type);
|
||||
|
||||
if (is_vec_basis(op_const[0])) {
|
||||
unsigned component = 0;
|
||||
for (unsigned c = 0; c < op_const[0]->type->vector_elements; c++) {
|
||||
if (op_const[0]->value.f[c] == 1.0)
|
||||
component = c;
|
||||
}
|
||||
return new(mem_ctx) ir_swizzle(ir->operands[1], component, 0, 0, 0, 1);
|
||||
}
|
||||
if (is_vec_basis(op_const[1])) {
|
||||
unsigned component = 0;
|
||||
for (unsigned c = 0; c < op_const[1]->type->vector_elements; c++) {
|
||||
if (op_const[1]->value.f[c] == 1.0)
|
||||
component = c;
|
||||
}
|
||||
return new(mem_ctx) ir_swizzle(ir->operands[0], component, 0, 0, 0, 1);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (!op_const[i])
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user