From: Dave Airlie Date: Sun, 20 Mar 2016 22:52:14 +0000 (+1000) Subject: tgsi_exec: handle execmask when doing indirect lookups X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ca180c09bb0941468814796f13c0701590523be4;p=mesa.git tgsi_exec: handle execmask when doing indirect lookups Reviewed-by: Brian Paul Signed-off-by: Dave Airlie --- diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index 126259fc0f8..a44a05c49f4 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -1995,11 +1995,11 @@ fetch_sampler_unit(struct tgsi_exec_machine *mach, uint sampler) { uint unit; - + int i; if (inst->Src[sampler].Register.Indirect) { const struct tgsi_full_src_register *reg = &inst->Src[sampler]; union tgsi_exec_channel indir_index, index2; - + const uint execmask = mach->ExecMask; index2.i[0] = index2.i[1] = index2.i[2] = @@ -2012,7 +2012,13 @@ fetch_sampler_unit(struct tgsi_exec_machine *mach, &index2, &ZeroVec, &indir_index); - unit = inst->Src[sampler].Register.Index + indir_index.i[0]; + for (i = 0; i < TGSI_QUAD_SIZE; i++) { + if (execmask & (1 << i)) { + unit = inst->Src[sampler].Register.Index + indir_index.i[i]; + break; + } + } + } else { unit = inst->Src[sampler].Register.Index; }