[Mesa-dev] [PATCH 3/3] st/glsl_to_tgsi: the second destination doesn't support relative addressing

Nicolai Hähnle nhaehnle at gmail.com
Tue Oct 10 12:11:15 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

It's not used -- DFRACEXP gets array indexes of its exponent out-parameter
lowered earlier -- and it wouldn't have worked correctly anyway when both
dst and dst1 use relative addressing.
---
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 235690510b9..394d39ade63 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -382,42 +382,39 @@ glsl_to_tgsi_visitor::emit_asm(ir_instruction *ir, unsigned op,
    int num_reladdr = 0, i, j;
    bool dst_is_64bit[2];
 
    op = get_opcode(op, dst, src0, src1);
 
    /* If we have to do relative addressing, we want to load the ARL
     * reg directly for one of the regs, and preload the other reladdr
     * sources into temps.
     */
    num_reladdr += dst.reladdr != NULL || dst.reladdr2;
-   num_reladdr += dst1.reladdr != NULL || dst1.reladdr2;
+   assert(!dst1.reladdr); /* should be lowered in earlier passes */
    num_reladdr += src0.reladdr != NULL || src0.reladdr2 != NULL;
    num_reladdr += src1.reladdr != NULL || src1.reladdr2 != NULL;
    num_reladdr += src2.reladdr != NULL || src2.reladdr2 != NULL;
    num_reladdr += src3.reladdr != NULL || src3.reladdr2 != NULL;
 
    reladdr_to_temp(ir, &src3, &num_reladdr);
    reladdr_to_temp(ir, &src2, &num_reladdr);
    reladdr_to_temp(ir, &src1, &num_reladdr);
    reladdr_to_temp(ir, &src0, &num_reladdr);
 
    if (dst.reladdr || dst.reladdr2) {
       if (dst.reladdr)
          emit_arl(ir, address_reg, *dst.reladdr);
       if (dst.reladdr2)
          emit_arl(ir, address_reg2, *dst.reladdr2);
       num_reladdr--;
    }
-   if (dst1.reladdr) {
-      emit_arl(ir, address_reg, *dst1.reladdr);
-      num_reladdr--;
-   }
+
    assert(num_reladdr == 0);
 
    /* inst->op has only 8 bits. */
    STATIC_ASSERT(TGSI_OPCODE_LAST <= 255);
 
    inst->op = op;
    inst->precise = this->precise;
    inst->info = tgsi_get_opcode_info(op);
    inst->dst[0] = dst;
    inst->dst[1] = dst1;
-- 
2.11.0



More information about the mesa-dev mailing list