mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 13:38:06 +02:00
pco, pygen: add defs and mappings for common 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/32258>
This commit is contained in:
parent
3c081c9abf
commit
fee1f029cc
2 changed files with 371 additions and 7 deletions
|
|
@ -104,6 +104,40 @@ enum_map(IO, F_IS5_SEL, [
|
|||
('fte', 'fte'),
|
||||
])
|
||||
|
||||
enum_map(OM_ITR_MODE.t, F_ITER_MODE, [
|
||||
('pixel', 'pixel'),
|
||||
('sample', 'sample'),
|
||||
('centroid', 'centroid'),
|
||||
])
|
||||
|
||||
enum_map(OM_PCK_FMT.t, F_PCK_FORMAT, [
|
||||
('u8888', 'u8888'),
|
||||
('s8888', 's8888'),
|
||||
('o8888', 'o8888'),
|
||||
('u1616', 'u1616'),
|
||||
('s1616', 's1616'),
|
||||
('o1616', 'o1616'),
|
||||
('u32', 'u32'),
|
||||
('s32', 's32'),
|
||||
('u1010102', 'u1010102'),
|
||||
('s1010102', 's1010102'),
|
||||
('u111110', 'u111110'),
|
||||
('s111110', 's111110'),
|
||||
('f111110', 'f111110'),
|
||||
('f16f16', 'f16f16'),
|
||||
('f32', 'f32'),
|
||||
('cov', 'cov'),
|
||||
('u565u565', 'u565u565'),
|
||||
('d24s8', 'd24s8'),
|
||||
('s8d24', 's8d24'),
|
||||
('f32_mask', 'f32_mask'),
|
||||
('2f10f10f10', '2f10f10f10'),
|
||||
('s8888ogl', 's8888ogl'),
|
||||
('s1616ogl', 's1616ogl'),
|
||||
('zero', 'zero'),
|
||||
('one', 'one'),
|
||||
])
|
||||
|
||||
# Op/ISA mapping.
|
||||
class OpMap(object):
|
||||
def __init__(self, name, cop_name, igrp_mappings, encode_variants):
|
||||
|
|
@ -160,6 +194,10 @@ def op_map(op, hdr, isa_ops, srcs=[], iss=[], dests=[]):
|
|||
if val_spec.t.unset:
|
||||
reset_val = 0 if val_spec.t.nzdefault is None else val_spec.t.nzdefault
|
||||
hdr_mappings.append(f'pco_instr_set_mod({{1}}, {val_spec.cname}, {reset_val});')
|
||||
elif isinstance(val_spec, tuple):
|
||||
mod, origin = val_spec
|
||||
assert isinstance(mod, str) and isinstance(origin, str)
|
||||
hdr_mappings.append(f'{{}}->hdr.{hdr_field} = {mod}({{}}->{origin});')
|
||||
else:
|
||||
assert False, f'Invalid value spec for field "{hdr_field}" in hdr mapping for op "{op.name}".'
|
||||
|
||||
|
|
@ -196,10 +234,14 @@ def op_map(op, hdr, isa_ops, srcs=[], iss=[], dests=[]):
|
|||
if i > 0:
|
||||
if_str += ' && '
|
||||
|
||||
if isinstance(isa_op_cond, tuple):
|
||||
if isinstance(isa_op_cond, tuple) and len(isa_op_cond) == 3:
|
||||
mod, origin, cond = isa_op_cond
|
||||
assert isinstance(mod, RefMod)
|
||||
if_str += f'{{1}}->{origin}.{mod.t.tname} {cond}'
|
||||
elif isinstance(isa_op_cond, tuple) and len(isa_op_cond) == 2:
|
||||
mod, cond = isa_op_cond
|
||||
assert isinstance(mod, OpMod)
|
||||
if_str += f'pco_instr_get_mod({{1}}, {mod.cname}) {cond}'
|
||||
else:
|
||||
assert False
|
||||
if_str += ')'
|
||||
|
|
@ -317,6 +359,126 @@ def op_map(op, hdr, isa_ops, srcs=[], iss=[], dests=[]):
|
|||
op_maps[name] = OpMap(name, cop_name, igrp_mappings, None)
|
||||
|
||||
# Main.
|
||||
op_map(O_FADD,
|
||||
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),
|
||||
]),
|
||||
isa_ops=[
|
||||
('0', [
|
||||
(I_FADD, [
|
||||
('sat', OM_SAT),
|
||||
('s0neg', (RM_NEG, 'src[0]')),
|
||||
('s0abs', (RM_ABS, 'src[0]')),
|
||||
('s1abs', (RM_ABS, 'src[1]')),
|
||||
('s0flr', (RM_FLR, 'src[0]')),
|
||||
])
|
||||
])
|
||||
],
|
||||
srcs=[
|
||||
('s0', 'src[0]', 's0'),
|
||||
('s1', 'src[1]', 's1'),
|
||||
],
|
||||
iss=[
|
||||
('is4', 'ft0'),
|
||||
],
|
||||
dests=[
|
||||
('w0', 'dest[0]', 'ft0'),
|
||||
]
|
||||
)
|
||||
|
||||
op_map(O_FMUL,
|
||||
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),
|
||||
]),
|
||||
isa_ops=[
|
||||
('0', [
|
||||
(I_FMUL, [
|
||||
('sat', OM_SAT),
|
||||
('s0neg', (RM_NEG, 'src[0]')),
|
||||
('s0abs', (RM_ABS, 'src[0]')),
|
||||
('s1abs', (RM_ABS, 'src[1]')),
|
||||
('s0flr', (RM_FLR, 'src[0]')),
|
||||
])
|
||||
])
|
||||
],
|
||||
srcs=[
|
||||
('s0', 'src[0]', 's0'),
|
||||
('s1', 'src[1]', 's1'),
|
||||
],
|
||||
iss=[
|
||||
('is4', 'ft0'),
|
||||
],
|
||||
dests=[
|
||||
('w0', 'dest[0]', 'ft0'),
|
||||
]
|
||||
)
|
||||
|
||||
op_map(O_FMAD,
|
||||
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),
|
||||
]),
|
||||
isa_ops=[
|
||||
('0', [
|
||||
(I_FMAD_EXT, [
|
||||
('s0neg', (RM_NEG, 'src[0]')),
|
||||
('s0abs', (RM_ABS, 'src[0]')),
|
||||
('s2neg', (RM_NEG, 'src[2]')),
|
||||
('sat', OM_SAT),
|
||||
|
||||
('lp', OM_LP),
|
||||
('s1abs', (RM_ABS, 'src[1]')),
|
||||
('s1neg', (RM_NEG, 'src[1]')),
|
||||
('s2flr', (RM_FLR, 'src[2]')),
|
||||
('s2abs', (RM_ABS, 'src[2]')),
|
||||
]),
|
||||
(I_FMAD, [
|
||||
('s0neg', (RM_NEG, 'src[0]')),
|
||||
('s0abs', (RM_ABS, 'src[0]')),
|
||||
('s2neg', (RM_NEG, 'src[2]')),
|
||||
('sat', OM_SAT),
|
||||
], [
|
||||
(OM_LP, '== false'),
|
||||
(RM_ABS, 'src[1]', '== false'),
|
||||
(RM_NEG, 'src[1]', '== false'),
|
||||
(RM_FLR, 'src[2]', '== false'),
|
||||
(RM_ABS, 'src[2]', '== false'),
|
||||
])
|
||||
])
|
||||
],
|
||||
srcs=[
|
||||
('s0', 'src[0]', 's0'),
|
||||
('s1', 'src[1]', 's1'),
|
||||
('s2', 'src[2]', 's2'),
|
||||
],
|
||||
iss=[
|
||||
('is4', 'ft0'),
|
||||
],
|
||||
dests=[
|
||||
('w0', 'dest[0]', 'ft0'),
|
||||
]
|
||||
)
|
||||
|
||||
op_map(O_MBYP0,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'p0'),
|
||||
|
|
@ -336,8 +498,8 @@ op_map(O_MBYP0,
|
|||
('s0abs', (RM_ABS, 'src[0]')),
|
||||
]),
|
||||
(I_SNGL, [('sngl_op', 'byp')], [
|
||||
(RM_NEG, 'src[0]', '== 0'),
|
||||
(RM_ABS, 'src[0]', '== 0'),
|
||||
(RM_NEG, 'src[0]', '== false'),
|
||||
(RM_ABS, 'src[0]', '== false'),
|
||||
])
|
||||
])
|
||||
],
|
||||
|
|
@ -352,6 +514,174 @@ op_map(O_MBYP0,
|
|||
]
|
||||
)
|
||||
|
||||
op_map(O_PCK,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'p2'),
|
||||
('olchk', OM_OLCHK),
|
||||
('w1p', False),
|
||||
('w0p', True),
|
||||
('cc', OM_EXEC_CND),
|
||||
('end', OM_END),
|
||||
('atom', OM_ATOM),
|
||||
('rpt', OM_RPT),
|
||||
]),
|
||||
isa_ops=[
|
||||
('2_pck', [
|
||||
(I_PCK, [
|
||||
('prog', False),
|
||||
('rtz', OM_ROUNDZERO),
|
||||
('scale', OM_SCALE),
|
||||
('pck_format', OM_PCK_FMT),
|
||||
])
|
||||
])
|
||||
],
|
||||
srcs=[
|
||||
('s0', 'src[0]', 'is3'),
|
||||
],
|
||||
iss=[
|
||||
('is0', 's0'),
|
||||
('is3', 'fte'),
|
||||
('is4', 'ft2'),
|
||||
],
|
||||
dests=[
|
||||
('w0', 'dest[0]', 'ft2'),
|
||||
]
|
||||
)
|
||||
|
||||
# Backend.
|
||||
op_map(O_UVSW_WRITE,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'be'),
|
||||
('olchk', False),
|
||||
('w1p', False),
|
||||
('w0p', False),
|
||||
('cc', OM_EXEC_CND),
|
||||
('end', False),
|
||||
('atom', False),
|
||||
('rpt', OM_RPT),
|
||||
]),
|
||||
isa_ops=[
|
||||
('backend', [
|
||||
(I_UVSW_WRITE_IMM, [
|
||||
('dsel', 'w0'),
|
||||
('imm_addr', ('pco_ref_get_imm', 'src[1]')),
|
||||
])
|
||||
])
|
||||
],
|
||||
srcs=[
|
||||
('s0', 'src[0]', 'w0'),
|
||||
],
|
||||
iss=[
|
||||
('is0', 's0'),
|
||||
('is4', 'fte'),
|
||||
]
|
||||
)
|
||||
|
||||
op_map(O_UVSW_EMIT,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'be'),
|
||||
('olchk', False),
|
||||
('w1p', False),
|
||||
('w0p', False),
|
||||
('cc', OM_EXEC_CND),
|
||||
('end', False),
|
||||
('atom', False),
|
||||
('rpt', 1),
|
||||
]),
|
||||
isa_ops=[
|
||||
('backend', [(I_UVSW_EMIT, [])])
|
||||
],
|
||||
)
|
||||
|
||||
op_map(O_UVSW_EMIT_ENDTASK,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'be'),
|
||||
('olchk', False),
|
||||
('w1p', False),
|
||||
('w0p', False),
|
||||
('cc', 'e1_zx'),
|
||||
('end', OM_END),
|
||||
('atom', False),
|
||||
('rpt', 1),
|
||||
]),
|
||||
isa_ops=[
|
||||
('backend', [(I_UVSW_EMIT_ENDTASK, [])])
|
||||
],
|
||||
)
|
||||
|
||||
op_map(O_UVSW_ENDTASK,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'be'),
|
||||
('olchk', False),
|
||||
('w1p', False),
|
||||
('w0p', False),
|
||||
('cc', 'e1_zx'),
|
||||
('end', OM_END),
|
||||
('atom', False),
|
||||
('rpt', 1),
|
||||
]),
|
||||
isa_ops=[
|
||||
('backend', [(I_UVSW_ENDTASK, [])])
|
||||
],
|
||||
)
|
||||
|
||||
op_map(O_UVSW_WRITE_EMIT_ENDTASK,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'be'),
|
||||
('olchk', False),
|
||||
('w1p', False),
|
||||
('w0p', False),
|
||||
('cc', 'e1_zx'),
|
||||
('end', OM_END),
|
||||
('atom', False),
|
||||
('rpt', 1),
|
||||
]),
|
||||
isa_ops=[
|
||||
('backend', [
|
||||
(I_UVSW_WRITE_EMIT_ENDTASK_IMM, [
|
||||
('dsel', 'w0'),
|
||||
('imm_addr', ('pco_ref_get_imm', 'src[1]')),
|
||||
])
|
||||
])
|
||||
],
|
||||
srcs=[
|
||||
('s0', 'src[0]', 'w0'),
|
||||
],
|
||||
iss=[
|
||||
('is0', 's0'),
|
||||
('is4', 'fte'),
|
||||
]
|
||||
)
|
||||
|
||||
op_map(O_FITRP,
|
||||
hdr=(I_IGRP_HDR_MAIN, [
|
||||
('oporg', 'be'),
|
||||
('olchk', OM_OLCHK),
|
||||
('w1p', False),
|
||||
('w0p', False),
|
||||
('cc', OM_EXEC_CND),
|
||||
('end', OM_END),
|
||||
('atom', OM_ATOM),
|
||||
('rpt', OM_RPT),
|
||||
]),
|
||||
isa_ops=[
|
||||
('backend', [
|
||||
(I_FITR, [
|
||||
('p', True),
|
||||
('drc', ('pco_ref_get_drc', 'src[0]')),
|
||||
('iter_mode', OM_ITR_MODE),
|
||||
('sat', OM_SAT),
|
||||
('count', ('pco_ref_get_imm', 'src[3]')),
|
||||
])
|
||||
])
|
||||
],
|
||||
srcs=[
|
||||
('s0', 'src[1]', 's0'),
|
||||
('s2', 'src[2]', 's2'),
|
||||
('s3', 'dest[0]', 's3'),
|
||||
]
|
||||
)
|
||||
|
||||
# Bitwise
|
||||
op_map(O_MOVI32,
|
||||
hdr=(I_IGRP_HDR_BITWISE, [
|
||||
|
|
@ -394,6 +724,20 @@ op_map(O_WOP,
|
|||
]
|
||||
)
|
||||
|
||||
op_map(O_WDF,
|
||||
hdr=(I_IGRP_HDR_CONTROL, [
|
||||
('olchk', False),
|
||||
('w1p', False),
|
||||
('w0p', False),
|
||||
('cc', 'e1_zx'),
|
||||
('miscctl', ('pco_ref_get_drc', 'src[0]')),
|
||||
('ctrlop', 'wdf'),
|
||||
]),
|
||||
isa_ops=[
|
||||
('ctrl', [(I_WDF, [])]),
|
||||
]
|
||||
)
|
||||
|
||||
op_map(O_NOP,
|
||||
hdr=(I_IGRP_HDR_CONTROL, [
|
||||
('olchk', False),
|
||||
|
|
|
|||
|
|
@ -254,29 +254,49 @@ OM_PCK_FMT = op_mod_enum('pck_fmt', [
|
|||
'one',
|
||||
])
|
||||
OM_PHASE2END = op_mod('phase2end', BaseType.bool)
|
||||
OM_ITR_MODE = op_mod_enum('itr_mode', [
|
||||
'pixel',
|
||||
'sample',
|
||||
'centroid',
|
||||
])
|
||||
OM_ATOM = op_mod('atom', BaseType.bool, unset=True)
|
||||
OM_OLCHK = op_mod('olchk', BaseType.bool, unset=True)
|
||||
OM_END = op_mod('end', BaseType.bool, unset=True)
|
||||
|
||||
# Ops.
|
||||
|
||||
OM_ALU = [OM_OLCHK, OM_EXEC_CND, OM_END, OM_ATOM, OM_RPT]
|
||||
OM_ALU_RPT1 = [OM_OLCHK, OM_EXEC_CND, OM_END, OM_ATOM, OM_RPT]
|
||||
|
||||
## Main.
|
||||
O_FADD = hw_op('fadd', [OM_LP, OM_SAT], 1, 2, [], [[RM_ABS, RM_NEG, RM_FLR], [RM_ABS]])
|
||||
O_MBYP0 = hw_op('mbyp0', [OM_OLCHK, OM_EXEC_CND, OM_END, OM_ATOM, OM_RPT], 1, 1, [], [[RM_ABS, RM_NEG]])
|
||||
O_FADD = hw_op('fadd', OM_ALU + [OM_SAT], 1, 2, [], [[RM_ABS, RM_NEG, RM_FLR], [RM_ABS]])
|
||||
O_FMUL = hw_op('fmul', OM_ALU + [OM_SAT], 1, 2, [], [[RM_ABS, RM_NEG, RM_FLR], [RM_ABS]])
|
||||
O_FMAD = hw_op('fmad', OM_ALU + [OM_SAT, OM_LP], 1, 3, [], [[RM_ABS, RM_NEG], [RM_ABS, RM_NEG], [RM_ABS, RM_NEG, RM_FLR]])
|
||||
O_MBYP0 = hw_op('mbyp0', OM_ALU, 1, 1, [], [[RM_ABS, RM_NEG]])
|
||||
O_PCK = hw_op('pck', OM_ALU + [OM_PCK_FMT, OM_ROUNDZERO, OM_SCALE], 1, 1)
|
||||
|
||||
|
||||
## Backend.
|
||||
O_UVSW_WRITE = hw_op('uvsw.write', [OM_EXEC_CND, OM_RPT], 0, 2)
|
||||
O_UVSW_EMIT = hw_op('uvsw.emit', [OM_EXEC_CND])
|
||||
O_UVSW_ENDTASK = hw_op('uvsw.endtask', [OM_END])
|
||||
O_UVSW_EMIT_ENDTASK = hw_op('uvsw.emit.endtask', [OM_END])
|
||||
O_UVSW_WRITE_EMIT_ENDTASK = hw_op('uvsw.write.emit.endtask', [OM_END], 0, 2)
|
||||
|
||||
O_FITRP = hw_op('fitrp', OM_ALU + [OM_ITR_MODE, OM_SAT], 1, 4)
|
||||
|
||||
## Bitwise.
|
||||
O_BBYP0BM = hw_direct_op('bbyp0bm', 2, 2)
|
||||
|
||||
O_MOVI32 = pseudo_op('movi32', [OM_OLCHK, OM_EXEC_CND, OM_END, OM_ATOM, OM_RPT], 1, 1)
|
||||
O_MOVI32 = pseudo_op('movi32', OM_ALU, 1, 1)
|
||||
|
||||
## Control.
|
||||
O_WOP = hw_op('wop')
|
||||
O_WDF = hw_op('wdf', [], 0, 1)
|
||||
O_NOP = hw_op('nop', [OM_EXEC_CND])
|
||||
O_NOP_END = hw_op('nop.end', [OM_EXEC_CND])
|
||||
|
||||
# Pseudo-ops (unmapped).
|
||||
O_MOV = pseudo_op('mov', [OM_OLCHK, OM_EXEC_CND, OM_END, OM_ATOM, OM_RPT], 1, 1)
|
||||
O_MOV = pseudo_op('mov', OM_ALU, 1, 1)
|
||||
O_VEC = pseudo_op('vec', [], 1, VARIABLE, [], [[RM_ABS, RM_NEG]])
|
||||
O_COMP = pseudo_op('comp', [], 1, 2)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue