From 1a1d9cce465346d64da70e4439e40846ad02d70c Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Mon, 12 Oct 2020 11:25:25 +0200 Subject: [PATCH] pan/bi: Add support for load_blend_const_color_{r,g,b,a}_float Needed for blend shaders. Signed-off-by: Boris Brezillon Reviewed-by: Alyssa Rosenzweig Part-of: --- src/panfrost/bifrost/bifrost_compile.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index 17a9d6c..3e3df21 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -410,6 +410,33 @@ bi_emit_discard_if(bi_context *ctx, nir_intrinsic_instr *instr) } static void +bi_emit_blend_const(bi_context *ctx, nir_intrinsic_instr *instr) +{ + assert(ctx->is_blend); + + unsigned comp; + switch (instr->intrinsic) { + case nir_intrinsic_load_blend_const_color_r_float: comp = 0; break; + case nir_intrinsic_load_blend_const_color_g_float: comp = 1; break; + case nir_intrinsic_load_blend_const_color_b_float: comp = 2; break; + case nir_intrinsic_load_blend_const_color_a_float: comp = 3; break; + default: unreachable("Invalid load blend constant intrinsic"); + } + + bi_instruction move = { + .type = BI_MOV, + .dest = pan_dest_index(&instr->dest), + .dest_type = nir_type_uint32, + .src = { BIR_INDEX_CONSTANT }, + .src_types = { nir_type_uint32 }, + }; + + memcpy(&move.constant.u32, &ctx->blend_constants[comp], sizeof(float)); + + bi_emit(ctx, move); +} + +static void emit_intrinsic(bi_context *ctx, nir_intrinsic_instr *instr) { @@ -468,6 +495,13 @@ emit_intrinsic(bi_context *ctx, nir_intrinsic_instr *instr) bi_emit_sysval(ctx, &instr->instr, 3, 0); break; + case nir_intrinsic_load_blend_const_color_r_float: + case nir_intrinsic_load_blend_const_color_g_float: + case nir_intrinsic_load_blend_const_color_b_float: + case nir_intrinsic_load_blend_const_color_a_float: + bi_emit_blend_const(ctx, instr); + break; + default: unreachable("Unknown intrinsic"); break; -- 2.7.4