diff --git a/src/asahi/compiler/agx_compile.c b/src/asahi/compiler/agx_compile.c index dd9b6320d48..34270b2e15e 100644 --- a/src/asahi/compiler/agx_compile.c +++ b/src/asahi/compiler/agx_compile.c @@ -236,6 +236,15 @@ agx_emit_load_ubo(agx_builder *b, nir_intrinsic_instr *instr) return agx_wait(b, 0); } +static agx_instr * +agx_blend_const(agx_builder *b, agx_index dst, unsigned comp) +{ + agx_index val = agx_indexed_sysval(b->shader, + AGX_PUSH_BLEND_CONST, AGX_SIZE_32, comp * 2, 4 * 2); + + return agx_mov_to(b, dst, val); +} + static agx_instr * agx_emit_intrinsic(agx_builder *b, nir_intrinsic_instr *instr) { @@ -275,6 +284,11 @@ agx_emit_intrinsic(agx_builder *b, nir_intrinsic_instr *instr) case nir_intrinsic_load_vertex_id: return agx_mov_to(b, dst, agx_abs(agx_register(10, AGX_SIZE_32))); /* TODO: RA */ + case nir_intrinsic_load_blend_const_color_r_float: return agx_blend_const(b, dst, 0); + case nir_intrinsic_load_blend_const_color_g_float: return agx_blend_const(b, dst, 1); + case nir_intrinsic_load_blend_const_color_b_float: return agx_blend_const(b, dst, 2); + case nir_intrinsic_load_blend_const_color_a_float: return agx_blend_const(b, dst, 3); + default: fprintf(stderr, "Unhandled intrinsic %s\n", nir_intrinsic_infos[instr->intrinsic].name); unreachable("Unhandled intrinsic");