Module: Mesa
Branch: master
Commit: 7cdc2b9ca0ab60b282416b975a2ac6d7abcd42ad
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7cdc2b9ca0ab60b282416b975a2ac6d7abcd42ad

Author: Kenneth Graunke <[email protected]>
Date:   Wed Dec 30 02:33:00 2015 -0800

glsl: Fix varying struct locations when varying packing is disabled.

varying_matches::record tries to compute the number of components in
each varying, which varying_matches::assign_locations uses to assign
locations.  With varying packing, it uses glsl_type::component_slots()
to come up with a reasonable value.

Without varying packing, it fell back to an open-coded computation
that didn't bother to handle structs at all.  I believe we can simply
use 4 * glsl_type::count_attribute_slots(false), which already handles
these cases correctly.

Partially fixes rendering in GFXBench 4.0's tessellation benchmark.
(NVE0 is almost right after this, but i965 is still mostly garbage.)

Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Ilia Mirkin <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
Cc: "11.0 11.1" <[email protected]>

---

 src/glsl/link_varyings.cpp |   15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp
index 9cc77fe..1ff25b8 100644
--- a/src/glsl/link_varyings.cpp
+++ b/src/glsl/link_varyings.cpp
@@ -959,19 +959,8 @@ varying_matches::record(ir_variable *producer_var, 
ir_variable *consumer_var)
          type = type->fields.array;
       }
 
-      if (type->is_array()) {
-         slots = 1;
-         while (type->is_array()) {
-            slots *= type->length;
-            type = type->fields.array;
-         }
-         slots *= type->matrix_columns;
-      } else {
-         slots = type->matrix_columns;
-      }
-      if (type->without_array()->is_dual_slot_double())
-         slots *= 2;
-      this->matches[this->num_matches].num_components = 4 * slots;
+      slots = type->count_attribute_slots(false);
+      this->matches[this->num_matches].num_components = slots * 4;
    } else {
       this->matches[this->num_matches].num_components
          = var->type->component_slots();

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to