mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 15:58:05 +02:00
broadcom/compiler: hardware-accelerated 4x8-bit dot products on V3D 7.1+
VIR instructions and nir_to_vir implementation of 4x8-bit dot products using native HW accelerated ALU instructions. setnnmode instructions are marked as having side effects. Assisted-by: Claude Opus 4.6 Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41255>
This commit is contained in:
parent
afe4e321e1
commit
33a700be91
3 changed files with 29 additions and 0 deletions
|
|
@ -1829,6 +1829,24 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr)
|
|||
vir_set_unpack(c->defs[result.index], 0, V3D71_QPU_UNPACK_MAX0);
|
||||
break;
|
||||
|
||||
case nir_op_udot_4x8_uadd:
|
||||
assert(c->devinfo->ver >= 71);
|
||||
vir_SETNNMODE_UU(c);
|
||||
result = vir_ADD(c, vir_V8DOT(c, src[0], src[1]), src[2]);
|
||||
break;
|
||||
|
||||
case nir_op_sdot_4x8_iadd:
|
||||
assert(c->devinfo->ver >= 71);
|
||||
vir_SETNNMODE_SS(c);
|
||||
result = vir_ADD(c, vir_V8DOT(c, src[0], src[1]), src[2]);
|
||||
break;
|
||||
|
||||
case nir_op_sudot_4x8_iadd:
|
||||
assert(c->devinfo->ver >= 71);
|
||||
vir_SETNNMODE_SU(c);
|
||||
result = vir_ADD(c, vir_V8DOT(c, src[0], src[1]), src[2]);
|
||||
break;
|
||||
|
||||
default:
|
||||
mesa_loge("Unknown NIR ALU inst: %s",
|
||||
nir_instr_as_str(&instr->instr, NULL));
|
||||
|
|
|
|||
|
|
@ -1506,6 +1506,13 @@ VIR_M_ALU1(FUNPACKSNORMHI)
|
|||
VIR_M_ALU1(VFTOUNORM10LO)
|
||||
VIR_M_ALU1(VFTOUNORM10HI)
|
||||
|
||||
/* V3D 7.1 v8dot and its signedness configuration */
|
||||
VIR_M_ALU2(V8DOT)
|
||||
VIR_A_NODST_0(SETNNMODE_UU)
|
||||
VIR_A_NODST_0(SETNNMODE_SU)
|
||||
VIR_A_NODST_0(SETNNMODE_US)
|
||||
VIR_A_NODST_0(SETNNMODE_SS)
|
||||
|
||||
static inline struct qinst *
|
||||
vir_MOV_cond(struct v3d_compile *c, enum v3d_qpu_cond cond,
|
||||
struct qreg dest, struct qreg src)
|
||||
|
|
|
|||
|
|
@ -65,6 +65,10 @@ vir_has_side_effects(struct v3d_compile *c, struct qinst *inst)
|
|||
case V3D_QPU_A_STVPMP:
|
||||
case V3D_QPU_A_VPMWT:
|
||||
case V3D_QPU_A_TMUWT:
|
||||
case V3D_QPU_A_SETNNMODE_UU:
|
||||
case V3D_QPU_A_SETNNMODE_SU:
|
||||
case V3D_QPU_A_SETNNMODE_US:
|
||||
case V3D_QPU_A_SETNNMODE_SS:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue