[Mesa-dev] [PATCH] glsl: Make sure that packed varyings reflect always_active_io properly.
Eric Anholt
eric at anholt.net
Fri Jun 22 20:11:57 UTC 2018
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
--
2.18.0.rc2
More information about the mesa-dev
mailing list