From f76558be656c7d69d73d9a74e94d88866d0d2b31 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Wed, 28 Oct 2020 13:27:38 +0100 Subject: [PATCH] pan/bi: Hook up cube instructions packing Signed-off-by: Boris Brezillon Signed-off-by: Alyssa Rosenzweig Reviewed-by: Alyssa Rosenzweig Part-of: --- src/panfrost/bifrost/bi_pack.c | 19 +++++++++++++++++++ src/panfrost/bifrost/bi_print.c | 4 ++++ src/panfrost/bifrost/compiler.h | 6 ++++++ 3 files changed, 29 insertions(+) diff --git a/src/panfrost/bifrost/bi_pack.c b/src/panfrost/bifrost/bi_pack.c index 044452df04f..02f1db34fb4 100644 --- a/src/panfrost/bifrost/bi_pack.c +++ b/src/panfrost/bifrost/bi_pack.c @@ -393,6 +393,17 @@ bi_pack_registers(bi_registers regs) return packed; } +static unsigned +bi_pack_fma_special(bi_clause *clause, bi_instruction *ins, bi_registers *regs) +{ + switch (ins->op.special) { + case BI_SPECIAL_CUBEFACE1: + return pan_pack_fma_cubeface1(clause, ins, regs); + default: + unreachable("Unknown special op"); + } +} + static unsigned bi_pack_fma(bi_clause *clause, bi_bundle bundle, bi_registers *regs) { @@ -575,6 +586,8 @@ bi_pack_fma(bi_clause *clause, bi_bundle bundle, bi_registers *regs) return pan_pack_fma_fadd_lscale_f32(clause, bundle.fma, regs); case BI_IMUL: return pan_pack_fma_imul_i32(clause, bundle.fma, regs); + case BI_SPECIAL_FMA: + return bi_pack_fma_special(clause, bundle.fma, regs); default: unreachable("Cannot encode class as FMA"); } @@ -675,6 +688,12 @@ bi_pack_add_special(bi_clause *clause, bi_instruction *ins, bi_registers *regs) case BI_SPECIAL_IABS: assert(ins->src_types[0] == nir_type_int32); return pan_pack_add_iabs_s32(clause, ins, regs); + case BI_SPECIAL_CUBEFACE2: + return pan_pack_add_cubeface2(clause, ins, regs); + case BI_SPECIAL_CUBE_SSEL: + return pan_pack_add_cube_ssel(clause, ins, regs); + case BI_SPECIAL_CUBE_TSEL: + return pan_pack_add_cube_tsel(clause, ins, regs); default: unreachable("Unknown special op"); } diff --git a/src/panfrost/bifrost/bi_print.c b/src/panfrost/bifrost/bi_print.c index ea0b61a8581..9779ba8766b 100644 --- a/src/panfrost/bifrost/bi_print.c +++ b/src/panfrost/bifrost/bi_print.c @@ -191,6 +191,10 @@ bi_special_op_name(enum bi_special_op op) case BI_SPECIAL_FRCP: return "frcp"; case BI_SPECIAL_FRSQ: return "frsq"; case BI_SPECIAL_EXP2_LOW: return "exp2_low"; + case BI_SPECIAL_CUBEFACE1: return "cubeface1"; + case BI_SPECIAL_CUBEFACE2: return "cubeface2"; + case BI_SPECIAL_CUBE_SSEL: return "cube_ssel"; + case BI_SPECIAL_CUBE_TSEL: return "cube_tsel"; default: return "invalid"; } } diff --git a/src/panfrost/bifrost/compiler.h b/src/panfrost/bifrost/compiler.h index 1cb936cfd41..57ca531612c 100644 --- a/src/panfrost/bifrost/compiler.h +++ b/src/panfrost/bifrost/compiler.h @@ -233,6 +233,12 @@ enum bi_special_op { * the second, it takes x itself. */ BI_SPECIAL_EXP2_LOW, BI_SPECIAL_IABS, + + /* cubemap coordinates extraction helpers */ + BI_SPECIAL_CUBEFACE1, + BI_SPECIAL_CUBEFACE2, + BI_SPECIAL_CUBE_SSEL, + BI_SPECIAL_CUBE_TSEL, }; struct bi_bitwise {