pan/bi: Add support for load_sample_id
Sample ID is preloaded in r61.
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7206>
diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c
index c8f9762..8ccbe0a 100644
--- a/src/panfrost/bifrost/bifrost_compile.c
+++ b/src/panfrost/bifrost/bifrost_compile.c
@@ -535,6 +535,34 @@
}
static void
+bi_emit_sample_id(bi_context *ctx, nir_intrinsic_instr *instr)
+{
+ bi_instruction ins = {
+ .type = BI_BITWISE,
+ .op.bitwise = BI_BITWISE_AND,
+ .bitwise.rshift = true,
+ .dest = pan_dest_index(&instr->dest),
+ .dest_type = nir_type_uint32,
+ .src = {
+ /* r61[16:23] contains the sampleID */
+ BIR_INDEX_REGISTER | 61,
+ /* mask */
+ BIR_INDEX_CONSTANT | 0,
+ /* shift */
+ BIR_INDEX_CONSTANT | 32,
+ },
+ .src_types = {
+ nir_type_uint32,
+ nir_type_uint32,
+ nir_type_uint8,
+ },
+ .constant.u64 = 0xffull | (0x10ull << 32ull)
+ };
+
+ bi_emit(ctx, ins);
+}
+
+static void
emit_intrinsic(bi_context *ctx, nir_intrinsic_instr *instr)
{
@@ -606,6 +634,10 @@
bi_emit_blend_const(ctx, instr);
break;
+ case nir_intrinsic_load_sample_id:
+ bi_emit_sample_id(ctx, instr);
+ break;
+
default:
unreachable("Unknown intrinsic");
break;