pan/bi: Pass second src for load_vary ops
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 18 Mar 2020 15:55:10 +0000 (11:55 -0400)
committerMarge Bot <eric+marge@anholt.net>
Thu, 19 Mar 2020 03:23:07 +0000 (03:23 +0000)
For direct, this is just 0, but for indirct, this is a sample mask
preloaded in R61. Handle this at code emit time instead of trying to do
crazy monkeypatching later.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4242>

src/panfrost/bifrost/bifrost_compile.c

index d19cc65d7864fa14c31309f99cc8c6e0bdd08827..144afe6187356df2fdc17f3667c367f001b2fcc4 100644 (file)
@@ -102,7 +102,16 @@ bi_emit_ld_vary(bi_context *ctx, nir_intrinsic_instr *instr)
         ins.load_vary.interp_mode = BIFROST_INTERP_DEFAULT; /* TODO */
         ins.load_vary.reuse = false; /* TODO */
         ins.load_vary.flat = instr->intrinsic != nir_intrinsic_load_interpolated_input;
-        ins.dest_type = nir_type_float | nir_dest_bit_size(instr->dest),
+        ins.dest_type = nir_type_float | nir_dest_bit_size(instr->dest);
+
+        if (nir_src_is_const(*nir_get_io_offset_src(instr))) {
+                /* Zero it out for direct */
+                ins.src[1] = BIR_INDEX_ZERO;
+        } else {
+                /* R61 contains sample mask stuff, TODO RA XXX */
+                ins.src[1] = BIR_INDEX_REGISTER | 61;
+        }
+
         bi_emit(ctx, ins);
 }