pan/bi: Implement bi_emit_ld_tile via the builder
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 8 Dec 2020 00:14:49 +0000 (19:14 -0500)
committerMarge Bot <eric+marge@anholt.net>
Thu, 31 Dec 2020 14:39:01 +0000 (14:39 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8135>

src/panfrost/bifrost/bifrost_compile.c

index 2c43077..531af4c 100644 (file)
@@ -121,6 +121,30 @@ bi_load_old(enum bi_class T, nir_intrinsic_instr *instr, unsigned offset_idx)
 }
 
 static void
+bi_emit_ld_tile(bi_builder *b, nir_intrinsic_instr *instr)
+{
+        assert(b->shader->is_blend);
+
+        /* We want to load the current pixel.
+         * FIXME: The sample to load is currently hardcoded to 0. This should
+         * be addressed for multi-sample FBs.
+         */
+        struct bifrost_pixel_indices pix = {
+                .y = BIFROST_CURRENT_PIXEL,
+        };
+
+        uint32_t indices = 0;
+        memcpy(&indices, &pix, sizeof(indices));
+
+        bi_ld_tile_to(b, bi_dest_index(&instr->dest), bi_imm_u32(indices),
+                bi_register(60), /* coverage bitmap, TODO ra */
+                /* Only keep the conversion part of the blend descriptor. */
+                bi_imm_u32(b->shader->blend_desc >> 32),
+                (instr->num_components - 1));
+
+}
+
+static void
 bi_emit_ld_output(bi_context *ctx, nir_intrinsic_instr *instr)
 {
         assert(ctx->is_blend);