From 926d78a645b7c41bbfe279c977008da759faffb6 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 10 Jan 2022 14:52:08 -0800 Subject: [PATCH] ntt: Extend ntt_compile::addr_declared and ntt_compile::addr_reg This was identified by Coverity. 4bb9c0a28a5 added uses of a third address register, but the arrays for tracking address registers only have two slots. Add back a version of the assertion from before 4bb9c0a28a5 to help prevent future problems. I don't think any drivers that would hit this path use NIR-to-TGSI yet, so it may be moot. Reviewed-by: Matt Turner CID: 1496942 CID: 1496944 Fixes: 4bb9c0a28a5 ("nir_to_tgsi: Use the same address reg mappings as GLSL-to-TGSI did.") Part-of: --- src/gallium/auxiliary/nir/nir_to_tgsi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi.c b/src/gallium/auxiliary/nir/nir_to_tgsi.c index ce679418e99..b2527a3e70b 100644 --- a/src/gallium/auxiliary/nir/nir_to_tgsi.c +++ b/src/gallium/auxiliary/nir/nir_to_tgsi.c @@ -44,8 +44,8 @@ struct ntt_compile { bool native_integers; bool has_txf_lz; - bool addr_declared[2]; - struct ureg_dst addr_reg[2]; + bool addr_declared[3]; + struct ureg_dst addr_reg[3]; /* if condition set up at the end of a block, for ntt_emit_if(). */ struct ureg_src if_cond; @@ -631,6 +631,8 @@ ntt_get_load_const_src(struct ntt_compile *c, nir_load_const_instr *instr) static struct ureg_src ntt_reladdr(struct ntt_compile *c, struct ureg_src addr, int addr_index) { + assert(addr_index < ARRAY_SIZE(c->addr_reg)); + for (int i = 0; i <= addr_index; i++) { if (!c->addr_declared[i]) { c->addr_reg[i] = ureg_writemask(ureg_DECL_address(c->ureg),