nir: add support for round to zero rounding mode to nir_op_f2f32
f2f16's rounding modes are already handled and f2f64 don't need it as there is not a floating point type with higher bit size than 64 for now. Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com> Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
parent
5308333e78
commit
0ac07c7ca7
|
@ -63,6 +63,7 @@ template = """\
|
|||
#include <math.h>
|
||||
#include "util/rounding.h" /* for _mesa_roundeven */
|
||||
#include "util/half_float.h"
|
||||
#include "util/double.h"
|
||||
#include "util/bigmath.h"
|
||||
#include "nir_constant_expressions.h"
|
||||
|
||||
|
|
|
@ -224,6 +224,16 @@ for src_t in [tint, tuint, tfloat, tbool]:
|
|||
unop_numeric_convert("{0}2{1}{2}{3}".format(src_t[0], dst_t[0],
|
||||
bit_size, rnd_mode),
|
||||
dst_t + str(bit_size), src_t, "src0")
|
||||
elif bit_size == 32 and dst_t == tfloat and src_t == tfloat:
|
||||
conv_expr = """
|
||||
if (bit_size > 32 && nir_is_rounding_mode_rtz(execution_mode, 32)) {
|
||||
dst = _mesa_double_to_float_rtz(src0);
|
||||
} else {
|
||||
dst = src0;
|
||||
}
|
||||
"""
|
||||
unop_numeric_convert("{0}2{1}{2}".format(src_t[0], dst_t[0], bit_size),
|
||||
dst_t + str(bit_size), src_t, conv_expr)
|
||||
else:
|
||||
conv_expr = "src0 != 0" if dst_t == tbool else "src0"
|
||||
unop_numeric_convert("{0}2{1}{2}".format(src_t[0], dst_t[0], bit_size),
|
||||
|
|
Loading…
Reference in New Issue