mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-09 23:08:18 +02:00
broadcom/qpu: support output pack on itof/utof
itof and utof natively support packing the f32 result to f16 (.l/.h), but the encode/decode paths fell through to the default case and rejected any non-NONE pack, breaking nir_op_i2f16 / nir_op_u2f16 codegen with "Failed to pack instruction: itof rfN.l". Assisted-by: Claude Opus 4.7 Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41810>
This commit is contained in:
parent
5943d01e86
commit
cac92fecac
1 changed files with 38 additions and 0 deletions
|
|
@ -1140,6 +1140,12 @@ v3d42_qpu_add_unpack(const struct v3d_device_info *devinfo, uint64_t packed_inst
|
|||
}
|
||||
break;
|
||||
|
||||
case V3D_QPU_A_ITOF:
|
||||
case V3D_QPU_A_UTOF:
|
||||
instr->alu.add.output_pack = mux_b & 0x3;
|
||||
instr->alu.add.a.unpack = V3D_QPU_UNPACK_NONE;
|
||||
break;
|
||||
|
||||
case V3D_QPU_A_VFMIN:
|
||||
case V3D_QPU_A_VFMAX:
|
||||
if (!v3d_qpu_float16_unpack_unpack(op & 0x7,
|
||||
|
|
@ -1292,6 +1298,12 @@ v3d71_qpu_add_unpack(const struct v3d_device_info *devinfo, uint64_t packed_inst
|
|||
}
|
||||
break;
|
||||
|
||||
case V3D_QPU_A_ITOF:
|
||||
case V3D_QPU_A_UTOF:
|
||||
instr->alu.add.output_pack = raddr_b & 0x3;
|
||||
instr->alu.add.a.unpack = V3D_QPU_UNPACK_NONE;
|
||||
break;
|
||||
|
||||
case V3D_QPU_A_VFMIN:
|
||||
case V3D_QPU_A_VFMAX:
|
||||
UNREACHABLE("pending v3d71 update");
|
||||
|
|
@ -1743,6 +1755,19 @@ v3d42_qpu_add_pack(const struct v3d_device_info *devinfo,
|
|||
|
||||
break;
|
||||
|
||||
case V3D_QPU_A_ITOF:
|
||||
case V3D_QPU_A_UTOF: {
|
||||
uint32_t pack_packed;
|
||||
if (instr->alu.add.a.unpack != V3D_QPU_UNPACK_NONE)
|
||||
return false;
|
||||
if (!v3d_qpu_float32_pack_pack(instr->alu.add.output_pack,
|
||||
&pack_packed)) {
|
||||
return false;
|
||||
}
|
||||
mux_b |= pack_packed;
|
||||
break;
|
||||
}
|
||||
|
||||
case V3D_QPU_A_VFMIN:
|
||||
case V3D_QPU_A_VFMAX:
|
||||
if (instr->alu.add.output_pack != V3D_QPU_PACK_NONE ||
|
||||
|
|
@ -1981,6 +2006,19 @@ v3d71_qpu_add_pack(const struct v3d_device_info *devinfo,
|
|||
|
||||
break;
|
||||
|
||||
case V3D_QPU_A_ITOF:
|
||||
case V3D_QPU_A_UTOF: {
|
||||
uint32_t pack_packed;
|
||||
if (instr->alu.add.a.unpack != V3D_QPU_UNPACK_NONE)
|
||||
return false;
|
||||
if (!v3d_qpu_float32_pack_pack(instr->alu.add.output_pack,
|
||||
&pack_packed)) {
|
||||
return false;
|
||||
}
|
||||
raddr_b |= pack_packed;
|
||||
break;
|
||||
}
|
||||
|
||||
case V3D_QPU_A_VFMIN:
|
||||
case V3D_QPU_A_VFMAX:
|
||||
if (instr->alu.add.output_pack != V3D_QPU_PACK_NONE ||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue