pco, pygen: add support for unpck and conversions
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:
committed by
Marge Bot
parent
8c379b0c3e
commit
c2787d1d12
@@ -968,6 +968,15 @@ elems=[
|
||||
('exp', 0b1),
|
||||
])
|
||||
|
||||
F_UPCK_ELEM = field_enum_type(
|
||||
name='upck_elem', num_bits=2,
|
||||
elems=[
|
||||
('e0', 0b00),
|
||||
('e1', 0b01),
|
||||
('e2', 0b10),
|
||||
('e3', 0b11),
|
||||
])
|
||||
|
||||
F_PCK_FORMAT = field_enum_type(
|
||||
name='pck_format', num_bits=5,
|
||||
elems=[
|
||||
@@ -1221,7 +1230,7 @@ fields=[
|
||||
('s0abs_sngl', (F_BOOL, ['s0abs_sngl'])),
|
||||
|
||||
## PCK/UPCK
|
||||
('upck_elem', (F_UINT2, ['upck_elem'])),
|
||||
('upck_elem', (F_UPCK_ELEM, ['upck_elem'])),
|
||||
('scale_rtz', (F_BOOL, ['scale_rtz'])),
|
||||
|
||||
('prog', (F_BOOL, ['prog'])),
|
||||
|
||||
@@ -192,6 +192,13 @@ enum_map(OM_TST_TYPE_MAIN.t, F_TST_TYPE, [
|
||||
('s32', 's32'),
|
||||
])
|
||||
|
||||
enum_map(RM_ELEM.t, F_UPCK_ELEM, [
|
||||
('e0', 'e0'),
|
||||
('e1', 'e1'),
|
||||
('e2', 'e2'),
|
||||
('e3', 'e3'),
|
||||
], pass_zero=0)
|
||||
|
||||
enum_map(RM_ELEM.t, F_MASKW0, [
|
||||
('e0', 'e0'),
|
||||
('e1', 'e1'),
|
||||
@@ -639,6 +646,16 @@ encode_map(O_PCK,
|
||||
]
|
||||
)
|
||||
|
||||
encode_map(O_UNPCK,
|
||||
encodings=[
|
||||
(I_UPCK, [
|
||||
('elem', (RM_ELEM, 'src[0]')),
|
||||
('scale_rtz', {'or': [OM_SCALE, OM_ROUNDZERO]}),
|
||||
('pck_format', OM_PCK_FMT)
|
||||
])
|
||||
]
|
||||
)
|
||||
|
||||
encode_map(O_TST,
|
||||
encodings=[
|
||||
(I_TST_EXT, [
|
||||
@@ -944,6 +961,23 @@ group_map(O_PCK,
|
||||
dests=[('w[0]', ('2_pck', 'dest[0]'), 'ft2')]
|
||||
)
|
||||
|
||||
group_map(O_UNPCK,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'p0'),
|
||||
('olchk', OM_OLCHK),
|
||||
('w1p', False),
|
||||
('w0p', True),
|
||||
('cc', OM_EXEC_CND),
|
||||
('end', OM_END),
|
||||
('atom', OM_ATOM),
|
||||
('rpt', OM_RPT)
|
||||
]),
|
||||
enc_ops=[('0', O_UNPCK)],
|
||||
srcs=[('s[0]', ('0', 'src[0]'), 's0')],
|
||||
iss=[('is[4]', 'ft0')],
|
||||
dests=[('w[0]', ('0', 'dest[0]'), 'ft0')]
|
||||
)
|
||||
|
||||
group_map(O_ADD64_32,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'p0'),
|
||||
|
||||
@@ -290,6 +290,7 @@ O_FRCP = hw_op('frcp', OM_ALU, 1, 1, [], [[RM_ABS, RM_NEG]])
|
||||
O_MBYP = hw_op('mbyp', OM_ALU, 1, 1, [], [[RM_ABS, RM_NEG]])
|
||||
O_PCK = hw_op('pck', OM_ALU + [OM_PCK_FMT, OM_ROUNDZERO, OM_SCALE], 1, 1)
|
||||
O_ADD64_32 = hw_op('add64_32', OM_ALU + [OM_S], 2, 4, [], [[RM_ABS, RM_NEG], [], [RM_ABS, RM_NEG]])
|
||||
O_UNPCK = hw_op('unpck', OM_ALU + [OM_PCK_FMT, OM_ROUNDZERO, OM_SCALE], 1, 1, [], [[RM_ELEM]])
|
||||
|
||||
O_TST = hw_direct_op('tst', [OM_TST_OP_MAIN, OM_PHASE2END, OM_TST_TYPE_MAIN], 2, 2, [], [[RM_ELEM], [RM_ELEM]])
|
||||
O_MOVC = hw_direct_op('movc', [OM_PHASE2END], 2, 5, [[RM_ELEM]])
|
||||
|
||||
@@ -696,6 +696,36 @@ static pco_instr *trans_alu(trans_ctx *tctx, nir_alu_instr *alu)
|
||||
instr = trans_scmp(tctx, alu->op, dest, src[0], src[1]);
|
||||
break;
|
||||
|
||||
case nir_op_f2i32:
|
||||
instr = pco_pck(&tctx->b,
|
||||
dest,
|
||||
src[0],
|
||||
.pck_fmt = PCO_PCK_FMT_S32,
|
||||
.roundzero = true);
|
||||
break;
|
||||
|
||||
case nir_op_f2u32:
|
||||
instr = pco_pck(&tctx->b,
|
||||
dest,
|
||||
src[0],
|
||||
.pck_fmt = PCO_PCK_FMT_U32,
|
||||
.roundzero = true);
|
||||
break;
|
||||
|
||||
case nir_op_i2f32:
|
||||
instr = pco_unpck(&tctx->b,
|
||||
dest,
|
||||
pco_ref_elem(src[0], 0),
|
||||
.pck_fmt = PCO_PCK_FMT_S32);
|
||||
break;
|
||||
|
||||
case nir_op_u2f32:
|
||||
instr = pco_unpck(&tctx->b,
|
||||
dest,
|
||||
pco_ref_elem(src[0], 0),
|
||||
.pck_fmt = PCO_PCK_FMT_U32);
|
||||
break;
|
||||
|
||||
case nir_op_pack_unorm_4x8:
|
||||
instr = pco_pck(&tctx->b,
|
||||
dest,
|
||||
|
||||
Reference in New Issue
Block a user