On Mar 22, 2016 8:19 AM, "Samuel Iglesias Gonsálvez" <sigles...@igalia.com> wrote: > > > > On 21/03/16 23:56, Jason Ekstrand wrote: > > On Mon, Mar 21, 2016 at 5:06 AM, Samuel Iglesias Gonsálvez < > > sigles...@igalia.com> wrote: > > > >> From: Iago Toral Quiroga <ito...@igalia.com> > >> > >> --- > >> src/compiler/nir/glsl_to_nir.cpp | 6 ++++++ > >> src/compiler/nir/nir_opcodes.py | 2 ++ > >> 2 files changed, 8 insertions(+) > >> > >> diff --git a/src/compiler/nir/glsl_to_nir.cpp > >> b/src/compiler/nir/glsl_to_nir.cpp > >> index 952d787..d087a77 100644 > >> --- a/src/compiler/nir/glsl_to_nir.cpp > >> +++ b/src/compiler/nir/glsl_to_nir.cpp > >> @@ -1357,6 +1357,12 @@ nir_visitor::visit(ir_expression *ir) > >> case ir_unop_d2i: result = nir_d2i(&b, srcs[0]); break; > >> case ir_unop_d2u: result = nir_d2u(&b, srcs[0]); break; > >> case ir_unop_d2b: result = nir_d2b(&b, srcs[0]); break; > >> + case ir_unop_i2d: > >> + result = supports_ints ? nir_i2d(&b, srcs[0]) : nir_fmov(&b, > >> srcs[0]); > >> + break; > >> + case ir_unop_u2d: > >> + result = supports_ints ? nir_u2d(&b, srcs[0]) : nir_fmov(&b, > >> srcs[0]); > >> > > > > If you're going to be using the u2d opcode, you'd better support integers. > > > > We did the same than integer to float conversions to keep this code > aligned with what they do.
Right. I don't think that would be correct for hardware that doesn't have integers anyway. You would want an ftrunc in the non-integer case with an abs for f2u. NIR has yet to be used on any platforms that don't support native integers so all those cases de-paths are dead anyway. > We can add an assert for support_ints here and only call to nir_u2d but, > to be consistent, we would need to do similar changes to i2d, u2f, i2f > too in a separate patch. Feel free to add an assert. I don't think updating the others is needed. It's not that f2u is invalid without integers so much as no hardware that supports doubles won't have native integers. > What do you think? > > Sam > > > > >> + break; > >> case ir_unop_i2u: > >> case ir_unop_u2i: > >> case ir_unop_bitcast_i2f: > >> diff --git a/src/compiler/nir/nir_opcodes.py > >> b/src/compiler/nir/nir_opcodes.py > >> index a161ac1..cf6ce83 100644 > >> --- a/src/compiler/nir/nir_opcodes.py > >> +++ b/src/compiler/nir/nir_opcodes.py > >> @@ -164,6 +164,7 @@ unop_convert("f2u", tuint32, tfloat32, "src0") # > >> Float-to-unsigned conversion > >> unop_convert("d2i", tint32, tfloat64, "src0") # Double-to-integer > >> conversion. > >> unop_convert("d2u", tuint32, tfloat64, "src0") # Double-to-unsigned > >> conversion. > >> unop_convert("i2f", tfloat32, tint32, "src0") # Integer-to-float > >> conversion. > >> +unop_convert("i2d", tfloat64, tint32, "src0") # Integer-to-double > >> conversion. > >> # Float-to-boolean conversion > >> unop_convert("f2b", tbool, tfloat32, "src0 != 0.0f") > >> unop_convert("d2b", tbool, tfloat64, "src0 != 0.0") > >> @@ -173,6 +174,7 @@ unop_convert("b2f", tfloat32, tbool, "src0 ? 1.0f : > >> 0.0f") > >> unop_convert("i2b", tbool, tint32, "src0 != 0") > >> unop_convert("b2i", tint32, tbool, "src0 ? 1 : 0") # Boolean-to-int > >> conversion > >> unop_convert("u2f", tfloat32, tuint32, "src0") # Unsigned-to-float > >> conversion. > >> +unop_convert("u2d", tfloat64, tuint32, "src0") # Unsigned-to-double > >> conversion. > >> # double-to-float conversion > >> unop_convert("d2f", tfloat32, tfloat64, "src0") # Single to double > >> precision > >> unop_convert("f2d", tfloat64, tfloat32, "src0") # Double to single > >> precision > >> -- > >> 2.5.0 > >> > >> _______________________________________________ > >> mesa-dev mailing list > >> mesa-dev@lists.freedesktop.org > >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev > >> > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev