Mesa (main): tu: Fix xfb when there is a hole at the end

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Aug 16 11:25:29 UTC 2021


Module: Mesa
Branch: main
Commit: 1564ff72a0149ca5e1f5603cacbdd13afb0cadb4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1564ff72a0149ca5e1f5603cacbdd13afb0cadb4

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Tue Aug 10 18:07:51 2021 +0200

tu: Fix xfb when there is a hole at the end

We were handling the case where we had an unassigned output in the
middle of the outputs array, but v->outputs can be smaller than the
shader's info.num_outputs when an output at the end isn't assigned. This
lead to us reading garbage after the end, and assuming that it
corresponded to r0.x and overwriting the xfb entry for some other random
output with the unassigned output's entry.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12310>

---

 src/freedreno/ci/deqp-freedreno-a630-fails.txt | 3 ---
 src/freedreno/vulkan/tu_pipeline.c             | 4 ++--
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/src/freedreno/ci/deqp-freedreno-a630-fails.txt b/src/freedreno/ci/deqp-freedreno-a630-fails.txt
index c8a171583d9..f9c930b777c 100644
--- a/src/freedreno/ci/deqp-freedreno-a630-fails.txt
+++ b/src/freedreno/ci/deqp-freedreno-a630-fails.txt
@@ -281,6 +281,3 @@ dEQP-VK.ssbo.layout.random.all_shared_buffer.5,Fail
 dEQP-VK.ssbo.layout.random.nested_structs_arrays.0,Fail
 dEQP-VK.ssbo.layout.random.nested_structs_arrays.17,Fail
 dEQP-VK.ssbo.layout.random.scalar.19,Fail
-
-# "Mismatch at offset 0 expected -89 received 0 (elemNdx=0 vecNdx=0 compNdx=0)"
-dEQP-VK.transform_feedback.fuzz.various_buffers.buffers100_instance_array_vertex,Fail
diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c
index 43e77e93b36..6c9ca2458ac 100644
--- a/src/freedreno/vulkan/tu_pipeline.c
+++ b/src/freedreno/vulkan/tu_pipeline.c
@@ -726,8 +726,8 @@ tu6_setup_streamout(struct tu_cs *cs,
       unsigned k = out->register_index;
       unsigned idx;
 
-      /* Skip it, if there's an unused reg in the middle of outputs. */
-      if (v->outputs[k].regid == INVALID_REG)
+      /* Skip it, if it's an output that was never assigned a register. */
+      if (k >= v->outputs_count || v->outputs[k].regid == INVALID_REG)
          continue;
 
       ncomp[out->output_buffer] += out->num_components;



More information about the mesa-commit mailing list