nvc0/ir: fix textureGather with a single offset
authorIlia Mirkin <imirkin@alum.mit.edu>
Wed, 12 Oct 2016 14:24:59 +0000 (10:24 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 12 Oct 2016 17:18:14 +0000 (13:18 -0400)
Recent fix for non-const offsets broke the case of a single offset (vs 4
offsets). The later code relies on the offs array to contain null values
to tell whether they should be added onto the srcs list.

Fixes: 5239bd592 ("nvc0/ir: fix overwriting of value backing non-constant gather offset")
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Cc: mesa-stable@lists.freedesktop.org
src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp

index 4c013c4f6995308c11c577c4958f88a97e9977fd..dab3e2d312b720e90339cc3a3d76559a77097e50 100644 (file)
@@ -820,11 +820,11 @@ NVC0LoweringPass::handleTEX(TexInstruction *i)
          // Either there is 1 offset, which goes into the 2 low bytes of the
          // first source, or there are 4 offsets, which go into 2 sources (8
          // values, 1 byte each).
-         Value *offs[2] = {bld.getScratch(), bld.getScratch()};
+         Value *offs[2] = {NULL, NULL};
          for (n = 0; n < i->tex.useOffsets; n++) {
             for (c = 0; c < 2; ++c) {
                if ((n % 2) == 0 && c == 0)
-                  bld.mkMov(offs[n / 2], i->offset[n][c].get());
+                  bld.mkMov(offs[n / 2] = bld.getScratch(), i->offset[n][c].get());
                else
                   bld.mkOp3(OP_INSBF, TYPE_U32,
                             offs[n / 2],