Reviewed-by: Timothy Arceri <[email protected]>

On 23/06/18 06:11, Eric Anholt wrote:
The always_active_io flag was only set according to the first variable
that got packed in, so NIR io compaction would end up compacting XFB
varyings that shouldn't move at that point.
---

This doesn't fix my XFB issues on V3D, but seems like a step in the
right direction.  Packing always_active_io variables with
non-always_active_io variables seems questionable to me, though.

  src/compiler/glsl/lower_packed_varyings.cpp | 9 +++++++--
  1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/compiler/glsl/lower_packed_varyings.cpp 
b/src/compiler/glsl/lower_packed_varyings.cpp
index 5c1eed719f26..5bd6c92ed992 100644
--- a/src/compiler/glsl/lower_packed_varyings.cpp
+++ b/src/compiler/glsl/lower_packed_varyings.cpp
@@ -729,12 +729,17 @@ lower_packed_varyings_visitor::get_packed_varying_deref(
        unpacked_var->insert_before(packed_var);
        this->packed_varyings[slot] = packed_var;
     } else {
+      ir_variable *var = this->packed_varyings[slot];
+
+      /* The slot needs to be marked as always active if any variable that got
+       * packed there was.
+       */
+      var->data.always_active_io |= unpacked_var->data.always_active_io;
+
        /* For geometry shader inputs, only update the packed variable name the
         * first time we visit each component.
         */
        if (this->gs_input_vertices == 0 || vertex_index == 0) {
-         ir_variable *var = this->packed_varyings[slot];
-
           if (var->is_name_ralloced())
              ralloc_asprintf_append((char **) &var->name, ",%s", name);
           else

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

Reply via email to