type_compare() allowed the following illegal implicit conversions: bool -> float bvecN -> vecN
Fixes Piglit tests spec/glsl-1.20/compiler/built-in-functions/outerProduct-bvec*.vert. Note: This is a candidate for the 7.10 and 7.11 branches. Signed-off-by: Chad Versace <c...@chad-versace.us> --- src/glsl/ir_function.cpp | 21 +++++++++++++-------- 1 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/glsl/ir_function.cpp b/src/glsl/ir_function.cpp index e6ba359..2abc7aa 100644 --- a/src/glsl/ir_function.cpp +++ b/src/glsl/ir_function.cpp @@ -45,18 +45,23 @@ type_compare(const glsl_type *to, const glsl_type *from) case GLSL_TYPE_BOOL: /* There is no implicit conversion to or from integer types or bool. */ - if ((to->is_integer() != from->is_integer()) - || (to->is_boolean() != from->is_boolean())) + if (to->base_type == from->base_type + && to->vector_elements == from->vector_elements + && to->matrix_columns == from->matrix_columns) { + return 1; + } else { return -1; - - /* FALLTHROUGH */ + } case GLSL_TYPE_FLOAT: - if ((to->vector_elements != from->vector_elements) - || (to->matrix_columns != from->matrix_columns)) + /* Integer types can be implicity converted to float. */ + if ((from->base_type == GLSL_TYPE_FLOAT || from->is_integer()) + && to->vector_elements == from->vector_elements + && to->matrix_columns == from->matrix_columns) { + return 1; + } else { return -1; - - return 1; + } case GLSL_TYPE_SAMPLER: case GLSL_TYPE_STRUCT: -- 1.7.6 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev