From 0ac07c7ca7207f3f1388c0450b456ecc578d9c5b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Samuel=20Iglesias=20Gons=C3=A1lvez?= Date: Wed, 13 Feb 2019 10:31:37 +0100 Subject: [PATCH] nir: add support for round to zero rounding mode to nir_op_f2f32 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Connor Abbott --- src/compiler/nir/nir_constant_expressions.py | 1 + src/compiler/nir/nir_opcodes.py | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/src/compiler/nir/nir_constant_expressions.py b/src/compiler/nir/nir_constant_expressions.py index 1df97aa1000..219d91c1cbd 100644 --- a/src/compiler/nir/nir_constant_expressions.py +++ b/src/compiler/nir/nir_constant_expressions.py @@ -63,6 +63,7 @@ template = """\ #include #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" diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py index 3020da98264..13f64d78c4f 100644 --- a/src/compiler/nir/nir_opcodes.py +++ b/src/compiler/nir/nir_opcodes.py @@ -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), -- 2.30.2