glsl_type::implicit_conversion_compare() allowed the following illegal implicit conversions: bool -> float bvecN -> vecN
int -> uint ivecN -> uvecN uint -> int uvecN -> ivecN Fixes Piglit spec/glsl-1.20/compiler/built-in-functions/outerProduct-bvec*.vert. If cherry-picked, the following commit is required: glsl: Refactor ast_function.cpp:type_compare() into a glsl_type method Note: This is a candidate for the 7.10 and 7.11 branches. CC: Ian Romanick <ian.d.roman...@intel.com> Signed-off-by: Chad Versace <c...@chad-versace.us> --- src/glsl/glsl_types.cpp | 20 +++++++++++--------- 1 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp index 752c1af..dd62502 100644 --- a/src/glsl/glsl_types.cpp +++ b/src/glsl/glsl_types.cpp @@ -466,20 +466,22 @@ int glsl_type::implicit_conversion_compare(const glsl_type *desired) const { case GLSL_TYPE_UINT: case GLSL_TYPE_INT: case GLSL_TYPE_BOOL: - /* There is no implicit conversion to or from integer types or bool. */ - if ((this->is_integer() != desired->is_integer()) - || (this->is_boolean() != desired->is_boolean())) + /* There is no implicit conversion among any of the above types. */ + if (this->base_type == desired->base_type + && this->vector_elements == desired->vector_elements + && this->matrix_columns == desired->matrix_columns) + return 1; + else return -1; - /* FALLTHROUGH */ - case GLSL_TYPE_FLOAT: - if ((this->vector_elements != desired->vector_elements) - || (this->matrix_columns != desired->matrix_columns)) + if ((this->is_float() || this->is_integer()) + && this->vector_elements == desired->vector_elements + && this->matrix_columns == desired->matrix_columns) + return 1; + else return -1; - return 1; - case GLSL_TYPE_SAMPLER: case GLSL_TYPE_STRUCT: /* Samplers and structures must match exactly. */ -- 1.7.6 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev