Module: Mesa
Branch: staging/23.0
Commit: d4b25d3bee80532b7bbf58fe545796102ec09022
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d4b25d3bee80532b7bbf58fe545796102ec09022

Author: Emma Anholt <[email protected]>
Date:   Tue Mar 14 16:02:03 2023 -0700

turnip: Don't push inline uniform buffer contents outside constlen.

This would apparently lead to trying to load from this inline uniform
buffer in later submits.

Fixes: 37cde2c63483 ("tu: Rewrite inline uniform implementation")
Fixes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8219
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21915>
(cherry picked from commit 78d4a82d3002498a2dd3caa7f9654b9edd4d8c5c)

---

 .pick_status.json                    | 2 +-
 src/freedreno/vulkan/tu_cmd_buffer.c | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 7470d2cc9ed..1140789eafe 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -5242,7 +5242,7 @@
         "description": "turnip: Don't push inline uniform buffer contents 
outside constlen.",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "37cde2c63483fcf99092af84c14bea7ba3adbb84"
     },
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c 
b/src/freedreno/vulkan/tu_cmd_buffer.c
index 426e04d96c1..26ab7618977 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -4614,6 +4614,9 @@ tu6_emit_user_consts(struct tu_cs *cs,
    for (unsigned i = 0; i < link->tu_const_state.num_inline_ubos; i++) {
       const struct tu_inline_ubo *ubo = &link->tu_const_state.ubos[i];
 
+      if (link->constlen <= ubo->const_offset_vec4)
+         continue;
+
       uint64_t va = descriptors->set_iova[ubo->base] & ~0x3f;
 
       tu_cs_emit_pkt7(cs, tu6_stage2opcode(type), ubo->push_address ? 7 : 3);
@@ -4621,7 +4624,7 @@ tu6_emit_user_consts(struct tu_cs *cs,
             CP_LOAD_STATE6_0_STATE_TYPE(ST6_CONSTANTS) |
             CP_LOAD_STATE6_0_STATE_SRC(ubo->push_address ? SS6_DIRECT : 
SS6_INDIRECT) |
             CP_LOAD_STATE6_0_STATE_BLOCK(tu6_stage2shadersb(type)) |
-            CP_LOAD_STATE6_0_NUM_UNIT(ubo->size_vec4));
+            CP_LOAD_STATE6_0_NUM_UNIT(MIN2(ubo->size_vec4, link->constlen - 
ubo->const_offset_vec4)));
       if (ubo->push_address) {
          tu_cs_emit(cs, 0);
          tu_cs_emit(cs, 0);

Reply via email to