Replace several glsl_type field comparisons with a single pointer comparison
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 25 Mar 2010 20:05:43 +0000 (13:05 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 25 Mar 2010 20:05:43 +0000 (13:05 -0700)
This simplifies the process of matching function parameter types.
More simplifications are probably possible here, but arrays and
structures need to be implemented first.

ir_function.cpp

index a14b546..1ff5b20 100644 (file)
 int
 type_compare(const glsl_type *a, const glsl_type *b)
 {
+   /* If the types are the same, they trivially match.
+    */
+   if (a == b)
+      return 0;
+
    switch (a->base_type) {
    case GLSL_TYPE_UINT:
    case GLSL_TYPE_INT:
@@ -36,9 +41,6 @@ type_compare(const glsl_type *a, const glsl_type *b)
          || (a->matrix_rows != b->matrix_rows))
         return -1;
 
-      if (a->base_type == b->base_type)
-        return 0;
-
       /* There is no implicit conversion to or from bool.
        */
       if ((a->base_type == GLSL_TYPE_BOOL)
@@ -48,14 +50,10 @@ type_compare(const glsl_type *a, const glsl_type *b)
       return 1;
 
    case GLSL_TYPE_SAMPLER:
-      return ((a->sampler_dimensionality == b->sampler_dimensionality)
-             && (a->sampler_shadow == b->sampler_shadow)
-             && (a->sampler_array == b->sampler_array)
-             && (a->sampler_type == b->sampler_type))
-        ? 0 : -1;
-
    case GLSL_TYPE_STRUCT:
-      return (strcmp(a->name, b->name) == 0) ? 0 : -1;
+      /* Samplers and structures must match exactly.
+       */
+      return -1;
 
    case GLSL_TYPE_ARRAY:
       if ((b->base_type != GLSL_TYPE_ARRAY)