Fix matching of integer function parameters
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 18:45:06 +0000 (11:45 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 18:45:06 +0000 (11:45 -0700)
This causes the following tests to pass:

    glslparsertest/shaders/function10.frag

ir_function.cpp

index b6139c4a9fed479869d5973835469671033a29cd..4d246392ad7645bb1f985da698312b6996b70ab7 100644 (file)
@@ -35,16 +35,18 @@ type_compare(const glsl_type *a, const glsl_type *b)
    switch (a->base_type) {
    case GLSL_TYPE_UINT:
    case GLSL_TYPE_INT:
-   case GLSL_TYPE_FLOAT:
    case GLSL_TYPE_BOOL:
-      if ((a->vector_elements != b->vector_elements)
-         || (a->matrix_columns != b->matrix_columns))
+      /* There is no implicit conversion to or from integer types or bool.
+       */
+      if ((a->is_integer() != b->is_integer())
+         || (a->is_boolean() != b->is_boolean()))
         return -1;
 
-      /* There is no implicit conversion to or from bool.
-       */
-      if ((a->base_type == GLSL_TYPE_BOOL)
-         || (b->base_type == GLSL_TYPE_BOOL))
+      /* FALLTHROUGH */
+
+   case GLSL_TYPE_FLOAT:
+      if ((a->vector_elements != b->vector_elements)
+         || (a->matrix_columns != b->matrix_columns))
         return -1;
 
       return 1;