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

Author: Danylo Piliaiev <[email protected]>
Date:   Tue Oct 10 14:09:52 2023 +0200

tu: Count a whole push consts range in constlen for PREAMBLE push consts

Either none push consts are loaded via preamble or all of them even if
shader uses a single push const.

Fixes misrenderings with Zink. Zink unconditionally declares push
consts, regardless of whether they are actually used in the shader.

Fixes: a5f0f7d4b162c04878fb9d505d55ebdd05c5c773
("turnip,ir3: Implement A7XX push consts load via preamble")

Signed-off-by: Danylo Piliaiev <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25638>

---

 src/freedreno/ir3/ir3_compiler_nir.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/freedreno/ir3/ir3_compiler_nir.c 
b/src/freedreno/ir3/ir3_compiler_nir.c
index 54cc6ed3202..d1f36c7f493 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -2686,6 +2686,11 @@ emit_intrinsic(struct ir3_context *ctx, 
nir_intrinsic_instr *intr)
       load->push_consts.dst_base = nir_src_as_uint(intr->src[0]);
       load->push_consts.src_base = nir_intrinsic_base(intr);
       load->push_consts.src_size = nir_intrinsic_range(intr);
+
+      ctx->so->constlen =
+         MAX2(ctx->so->constlen,
+              DIV_ROUND_UP(
+                 load->push_consts.dst_base + load->push_consts.src_size, 4));
       break;
    }
    default:

Reply via email to