pco: add support for more pack/unpack ops

Signed-off-by: Simon Perretta <simon.perretta@imgtec.com>
Acked-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33998>
This commit is contained in:
Simon Perretta
2025-01-18 21:28:58 +00:00
committed by Marge Bot
parent 2983d23e63
commit 043e05768a
+79
View File
@@ -895,6 +895,40 @@ static pco_instr *trans_alu(trans_ctx *tctx, nir_alu_instr *alu)
instr = pco_fmax(&tctx->b, dest, src[0], src[1]);
break;
case nir_op_pack_half_2x16:
instr = pco_pck(&tctx->b,
dest,
src[0],
.rpt = 2,
.pck_fmt = PCO_PCK_FMT_F16F16);
break;
case nir_op_unpack_half_2x16:
instr = pco_unpck(&tctx->b,
dest,
pco_ref_elem(src[0], 0),
.rpt = 2,
.pck_fmt = PCO_PCK_FMT_F16F16);
break;
case nir_op_pack_snorm_4x8:
instr = pco_pck(&tctx->b,
dest,
src[0],
.rpt = 4,
.pck_fmt = PCO_PCK_FMT_S8888,
.scale = true);
break;
case nir_op_unpack_snorm_4x8:
instr = pco_unpck(&tctx->b,
dest,
pco_ref_elem(src[0], 0),
.rpt = 4,
.pck_fmt = PCO_PCK_FMT_S8888,
.scale = true);
break;
case nir_op_pack_unorm_4x8:
instr = pco_pck(&tctx->b,
dest,
@@ -904,6 +938,51 @@ static pco_instr *trans_alu(trans_ctx *tctx, nir_alu_instr *alu)
.scale = true);
break;
case nir_op_unpack_unorm_4x8:
instr = pco_unpck(&tctx->b,
dest,
pco_ref_elem(src[0], 0),
.rpt = 4,
.pck_fmt = PCO_PCK_FMT_U8888,
.scale = true);
break;
case nir_op_pack_snorm_2x16:
instr = pco_pck(&tctx->b,
dest,
src[0],
.rpt = 2,
.pck_fmt = PCO_PCK_FMT_S1616,
.scale = true);
break;
case nir_op_unpack_snorm_2x16:
instr = pco_unpck(&tctx->b,
dest,
pco_ref_elem(src[0], 0),
.rpt = 2,
.pck_fmt = PCO_PCK_FMT_S1616,
.scale = true);
break;
case nir_op_pack_unorm_2x16:
instr = pco_pck(&tctx->b,
dest,
src[0],
.rpt = 2,
.pck_fmt = PCO_PCK_FMT_U1616,
.scale = true);
break;
case nir_op_unpack_unorm_2x16:
instr = pco_unpck(&tctx->b,
dest,
pco_ref_elem(src[0], 0),
.rpt = 2,
.pck_fmt = PCO_PCK_FMT_U1616,
.scale = true);
break;
case nir_op_vec2:
case nir_op_vec3:
case nir_op_vec4: