diff --git a/src/panfrost/bifrost/bi_pack.c b/src/panfrost/bifrost/bi_pack.c index 977363e4894..15be31bdf26 100644 --- a/src/panfrost/bifrost/bi_pack.c +++ b/src/panfrost/bifrost/bi_pack.c @@ -710,6 +710,25 @@ bi_pack_add_special(bi_clause *clause, bi_instruction *ins, bi_registers *regs) } } +static unsigned +bi_pack_add_ld_var(bi_clause *clause, bi_instruction *ins, bi_registers *regs) +{ + bool imm = ins->src[0] & BIR_INDEX_CONSTANT; + + if (imm && bi_get_immediate(ins, 0) >= 20) + return pan_pack_add_ld_var_special(clause, ins, regs); + + if (ins->load_vary.flat) { + return imm ? + pan_pack_add_ld_var_flat_imm(clause, ins, regs) : + pan_pack_add_ld_var_flat(clause, ins, regs); + } + + return imm ? + pan_pack_add_ld_var_imm(clause, ins, regs) : + pan_pack_add_ld_var(clause, ins, regs); +} + static unsigned bi_pack_add(bi_clause *clause, bi_bundle bundle, bi_registers *regs, gl_shader_stage stage) { @@ -858,19 +877,7 @@ bi_pack_add(bi_clause *clause, bi_bundle bundle, bi_registers *regs, gl_shader_s default: unreachable("Invalid channel count"); } case BI_LOAD_VAR: - if (bundle.add->src[0] & BIR_INDEX_CONSTANT) { - if (bi_get_immediate(bundle.add, 0) >= 20) - return pan_pack_add_ld_var_special(clause, bundle.add, regs); - else if (bundle.add->load_vary.flat) - return pan_pack_add_ld_var_flat_imm(clause, bundle.add, regs); - else - return pan_pack_add_ld_var_imm(clause, bundle.add, regs); - } else { - if (bundle.add->load_vary.flat) - return pan_pack_add_ld_var_flat(clause, bundle.add, regs); - else - return pan_pack_add_ld_var(clause, bundle.add, regs); - } + return bi_pack_add_ld_var(clause, bundle.add, regs); case BI_LOAD_VAR_ADDRESS: return pan_pack_add_lea_attr_imm(clause, bundle.add, regs); case BI_LOAD_TILE: