Both callers of this function are doing dead code elimintation: "is this reg completely rewritten before any of these components are used?". If there's reladdr on this write, then we don't know if the write landed in our channels or not, but assuming that it didn't is conservative and safe.
This failure was hidden by the fact that the two passes would bail early if any src reladdr was found, and programs using dst reladdr tended to use src as well. With my Mesa IR list changes, I happened to make those passes not bail on instruction removal that they'd previously determined was safe. --- src/mesa/program/prog_optimize.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mesa/program/prog_optimize.c b/src/mesa/program/prog_optimize.c index 6153f5e..4cba045 100644 --- a/src/mesa/program/prog_optimize.c +++ b/src/mesa/program/prog_optimize.c @@ -415,7 +415,8 @@ find_next_use(const struct gl_program *prog, } if (_mesa_num_inst_dst_regs(inst->Opcode) == 1 && inst->DstReg.File == PROGRAM_TEMPORARY && - inst->DstReg.Index == index) { + inst->DstReg.Index == index && + !inst->DstReg.RelAddr) { mask &= ~inst->DstReg.WriteMask; if (mask == 0) return WRITE; -- 2.0.0.rc2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev