Convert is_glsl_type_scalar to glsl_type::is_scalar

This commit is contained in:
Ian Romanick
2010-03-09 15:51:22 -08:00
parent eccf0bf5f2
commit cb36f8aaee
2 changed files with 17 additions and 12 deletions

View File

@@ -110,7 +110,7 @@ arithmetic_result_type(const struct glsl_type *type_a,
* * The two operands are scalars. In this case the operation is * * The two operands are scalars. In this case the operation is
* applied, resulting in a scalar." * applied, resulting in a scalar."
*/ */
if (is_glsl_type_scalar(type_a) && is_glsl_type_scalar(type_b)) if (type_a->is_scalar() && type_b->is_scalar())
return type_a; return type_a;
/* "* One operand is a scalar, and the other is a vector or matrix. /* "* One operand is a scalar, and the other is a vector or matrix.
@@ -118,10 +118,10 @@ arithmetic_result_type(const struct glsl_type *type_a,
* component of the vector or matrix, resulting in the same size * component of the vector or matrix, resulting in the same size
* vector or matrix." * vector or matrix."
*/ */
if (is_glsl_type_scalar(type_a)) { if (type_a->is_scalar()) {
if (!is_glsl_type_scalar(type_b)) if (!type_b->is_scalar())
return type_b; return type_b;
} else if (is_glsl_type_scalar(type_b)) { } else if (type_b->is_scalar()) {
return type_a; return type_a;
} }
@@ -287,8 +287,8 @@ relational_result_type(const struct glsl_type *type_a,
*/ */
if (! is_numeric_base_type(type_a->base_type) if (! is_numeric_base_type(type_a->base_type)
|| ! is_numeric_base_type(type_b->base_type) || ! is_numeric_base_type(type_b->base_type)
|| ! is_glsl_type_scalar(type_a) || !type_a->is_scalar()
|| ! is_glsl_type_scalar(type_b)) || !type_b->is_scalar())
return glsl_error_type; return glsl_error_type;
/* "Either the operands' types must match, or the conversions from /* "Either the operands' types must match, or the conversions from
@@ -513,7 +513,7 @@ ast_expression::hir(exec_list *instructions,
*/ */
assert((type == glsl_error_type) assert((type == glsl_error_type)
|| ((type->base_type == GLSL_TYPE_BOOL) || ((type->base_type == GLSL_TYPE_BOOL)
&& is_glsl_type_scalar(type))); && type->is_scalar()));
result = new ir_expression(operations[this->oper], type, result = new ir_expression(operations[this->oper], type,
op[0], op[1]); op[0], op[1]);

View File

@@ -135,12 +135,17 @@ struct glsl_type {
{ {
this->fields.structure = fields; this->fields.structure = fields;
} }
};
#define is_glsl_type_scalar(t) \ /**
(((t)->vector_elements == 0) \ * Query whether or not a type is a scalar (non-vector and non-matrix).
&& ((t)->base_type >= GLSL_TYPE_UINT) \ */
&& ((t)->base_type <= GLSL_TYPE_BOOL)) bool is_scalar() const
{
return (vector_elements == 0)
&& (base_type >= GLSL_TYPE_UINT)
&& (base_type <= GLSL_TYPE_BOOL);
}
};
#define is_glsl_type_vector(t) \ #define is_glsl_type_vector(t) \
(((t)->vector_elements > 0) \ (((t)->vector_elements > 0) \