glsl: fix uniform location count used for glsl types
authorTapani Pälli <tapani.palli@intel.com>
Wed, 27 Aug 2014 11:12:27 +0000 (14:12 +0300)
committerTapani Pälli <tapani.palli@intel.com>
Fri, 26 Sep 2014 05:29:10 +0000 (08:29 +0300)
Patch fixes the slot count used by vector types and adds 1 slot
to be used by image and sampler types.

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=82921

src/glsl/glsl_types.cpp
src/glsl/glsl_types.h

index 66e9b133086d5abc632aa94597c9a14f965f01a1..3c13fcea550998427bcff3b40aa09fbcd71ad655 100644 (file)
@@ -678,12 +678,17 @@ glsl_type::component_slots() const
 unsigned
 glsl_type::uniform_locations() const
 {
-   if (this->is_matrix())
-      return 1;
-
    unsigned size = 0;
 
    switch (this->base_type) {
+   case GLSL_TYPE_UINT:
+   case GLSL_TYPE_INT:
+   case GLSL_TYPE_FLOAT:
+   case GLSL_TYPE_BOOL:
+   case GLSL_TYPE_SAMPLER:
+   case GLSL_TYPE_IMAGE:
+      return 1;
+
    case GLSL_TYPE_STRUCT:
    case GLSL_TYPE_INTERFACE:
       for (unsigned i = 0; i < this->length; i++)
@@ -692,13 +697,8 @@ glsl_type::uniform_locations() const
    case GLSL_TYPE_ARRAY:
       return this->length * this->fields.array->uniform_locations();
    default:
-      break;
+      return 0;
    }
-
-   /* The location count for many types match with component_slots() result,
-    * all expections should be handled above.
-    */
-   return component_slots();
 }
 
 bool
index d545533dcd2652cf8b54c3e4de730c794885b656..5a307bb74042a8b8c8ea0ef59252ee5c6b8336a1 100644 (file)
@@ -279,6 +279,9 @@ struct glsl_type {
    /**
     * Calculate the number of unique values from glGetUniformLocation for the
     * elements of the type.
+    *
+    * This is used to allocate slots in the UniformRemapTable, the amount of
+    * locations may not match with actual used storage space by the driver.
     */
    unsigned uniform_locations() const;