mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 03:40:10 +01:00
nir/opcodes: Add nir_op_f2fmp
This opcode is the same as the f2f16 opcode except that it comes with a promise that it is safe to optimise it out if the result is immediately converted back to a 32-bit float again. Normally this would be a lossy conversion and so it would be visible to the application, but if the conversion is generated as part of the mediump lowering process then this removal doesn’t matter. The opcode is eventually replaced with a regular f2f16 in the late optimisations so the backends don’t need to handle it. Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3822>
This commit is contained in:
parent
18124d7278
commit
125f867d3d
2 changed files with 11 additions and 0 deletions
|
|
@ -100,6 +100,7 @@ tbool16 = "bool16"
|
|||
tbool32 = "bool32"
|
||||
tuint = "uint"
|
||||
tuint16 = "uint16"
|
||||
tfloat16 = "float16"
|
||||
tfloat32 = "float32"
|
||||
tint32 = "int32"
|
||||
tuint32 = "uint32"
|
||||
|
|
@ -265,6 +266,11 @@ for src_t in [tint, tuint, tfloat, tbool]:
|
|||
dst_bit_size),
|
||||
dst_t + str(dst_bit_size), src_t, conv_expr)
|
||||
|
||||
# Special opcode that is the same as f2f16 except that it is safe to remove it
|
||||
# if the result is immediately converted back to float32 again. This is
|
||||
# generated as part of the precision lowering pass. mp stands for medium
|
||||
# precision.
|
||||
unop_numeric_convert("f2fmp", tfloat16, tfloat, opcodes["f2f16"].const_expr)
|
||||
|
||||
# Unary floating-point rounding operations.
|
||||
|
||||
|
|
|
|||
|
|
@ -1737,6 +1737,11 @@ late_optimizations = [
|
|||
('ffma', a, b, ('ffma', c, d, ('ffma', e, 'f', 'g'))), '(info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4'),
|
||||
(('~fadd', ('ffma(is_used_once)', a, b, ('fmul', 'c(is_not_const_and_not_fsign)', 'd(is_not_const_and_not_fsign)') ), 'e(is_not_const)'),
|
||||
('ffma', a, b, ('ffma', c, d, e)), '(info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4'),
|
||||
|
||||
# Convert f2fmp instructions to concrete f2f16 instructions. At this point
|
||||
# any conversions that could have been removed will have been removed in
|
||||
# nir_opt_algebraic so any remaining ones are required.
|
||||
(('f2fmp', a), ('f2f16', a)),
|
||||
]
|
||||
|
||||
for op in ['fadd']:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue