diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index c8f9762edd3..8ccbe0ade5b 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -534,6 +534,34 @@ bi_emit_blend_const(bi_context *ctx, nir_intrinsic_instr *instr) bi_emit(ctx, move); } +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 @@ emit_intrinsic(bi_context *ctx, nir_intrinsic_instr *instr) 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;