freedreno/ir3: track sysval slot for inputs
authorRob Clark <robdclark@chromium.org>
Fri, 11 Oct 2019 18:35:53 +0000 (11:35 -0700)
committerRob Clark <robdclark@gmail.com>
Fri, 18 Oct 2019 21:11:54 +0000 (21:11 +0000)
Will be needed for special handling of SYSTEM_VALUE_BARYCENTRIC_PIXEL
(ij_pix) when pre-fs texture fetch is enabled.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
src/freedreno/ir3/ir3.h
src/freedreno/ir3/ir3_compiler_nir.c
src/freedreno/ir3/ir3_group.c

index b595202cbda7f33750a73faeb63eabc29e0b2f1f..f7a87ee076a49770d55a796f2ba4fc65f9fead30 100644 (file)
@@ -267,6 +267,13 @@ struct ir3_instruction {
                struct {
                        int off;              /* component/offset */
                } fo;
+               struct {
+                       /* for sysvals, identifies the sysval type.  Mostly so we can
+                        * identify the special cases where a sysval should not be DCE'd
+                        * (currently, just pre-fs texture fetch)
+                        */
+                       gl_system_value sysval;
+               } input;
        };
 
        /* transient values used during various algorithms: */
index 21a9f57a381de6e942a44461c150f2897a959c9e..081d4cf19ec298e11819f6f93411261086f89c62 100644 (file)
@@ -68,6 +68,7 @@ create_input_compmask(struct ir3_context *ctx, unsigned n, unsigned compmask)
        struct ir3_instruction *in;
 
        in = ir3_instr_create(ctx->in_block, OPC_META_INPUT);
+       in->input.sysval = ~0;
        ir3_reg_create(in, n, 0);
 
        in->regs[0]->wrmask = compmask;
@@ -1197,6 +1198,9 @@ static void add_sysval_input_compmask(struct ir3_context *ctx,
        unsigned r = regid(so->inputs_count, 0);
        unsigned n = so->inputs_count++;
 
+       assert(instr->opc == OPC_META_INPUT);
+       instr->input.sysval = slot;
+
        so->inputs[n].sysval = true;
        so->inputs[n].slot = slot;
        so->inputs[n].compmask = compmask;
index 397f8d6f8a73b046d03c1c0a1203c951937d3bf3..4ff362b9990b020ca9e0ca81186a1e0c8334c31a 100644 (file)
@@ -60,6 +60,7 @@ static void arr_insert_mov_in(void *arr, int idx, struct ir3_instruction *instr)
        debug_assert(instr->regs_count == 1);
 
        in = ir3_instr_create(instr->block, OPC_META_INPUT);
+       in->input.sysval = instr->input.sysval;
        ir3_reg_create(in, instr->regs[0]->num, 0);
 
        /* create src reg for meta:in and fixup to now be a mov: */