<p dir="ltr"><br>
On Mar 22, 2016 8:19 AM, "Samuel Iglesias Gonsálvez" <<a href="mailto:siglesias@igalia.com">siglesias@igalia.com</a>> wrote:<br>
><br>
><br>
><br>
> On 21/03/16 23:56, Jason Ekstrand wrote:<br>
> > On Mon, Mar 21, 2016 at 5:06 AM, Samuel Iglesias Gonsálvez <<br>
> > <a href="mailto:siglesias@igalia.com">siglesias@igalia.com</a>> wrote:<br>
> ><br>
> >> From: Iago Toral Quiroga <<a href="mailto:itoral@igalia.com">itoral@igalia.com</a>><br>
> >><br>
> >> ---<br>
> >>  src/compiler/nir/glsl_to_nir.cpp | 6 ++++++<br>
> >>  src/compiler/nir/nir_opcodes.py  | 2 ++<br>
> >>  2 files changed, 8 insertions(+)<br>
> >><br>
> >> diff --git a/src/compiler/nir/glsl_to_nir.cpp<br>
> >> b/src/compiler/nir/glsl_to_nir.cpp<br>
> >> index 952d787..d087a77 100644<br>
> >> --- a/src/compiler/nir/glsl_to_nir.cpp<br>
> >> +++ b/src/compiler/nir/glsl_to_nir.cpp<br>
> >> @@ -1357,6 +1357,12 @@ nir_visitor::visit(ir_expression *ir)<br>
> >>     case ir_unop_d2i:  result = nir_d2i(&b, srcs[0]);   break;<br>
> >>     case ir_unop_d2u:  result = nir_d2u(&b, srcs[0]);   break;<br>
> >>     case ir_unop_d2b:  result = nir_d2b(&b, srcs[0]);   break;<br>
> >> +   case ir_unop_i2d:<br>
> >> +      result = supports_ints ? nir_i2d(&b, srcs[0]) : nir_fmov(&b,<br>
> >> srcs[0]);<br>
> >> +      break;<br>
> >> +   case ir_unop_u2d:<br>
> >> +      result = supports_ints ? nir_u2d(&b, srcs[0]) : nir_fmov(&b,<br>
> >> srcs[0]);<br>
> >><br>
> ><br>
> > If you're going to be using the u2d opcode, you'd better support integers.<br>
> ><br>
><br>
> We did the same than integer to float conversions to keep this code<br>
> aligned with what they do.</p>
<p dir="ltr">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.</p>
<p dir="ltr">> We can add an assert for support_ints here and only call to nir_u2d but,<br>
> to be consistent, we would need to do similar changes to i2d, u2f, i2f<br>
> too in a separate patch.</p>
<p dir="ltr">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.</p>
<p dir="ltr">> What do you think?<br>
><br>
> Sam<br>
><br>
> ><br>
> >> +      break;<br>
> >>     case ir_unop_i2u:<br>
> >>     case ir_unop_u2i:<br>
> >>     case ir_unop_bitcast_i2f:<br>
> >> diff --git a/src/compiler/nir/nir_opcodes.py<br>
> >> b/src/compiler/nir/nir_opcodes.py<br>
> >> index a161ac1..cf6ce83 100644<br>
> >> --- a/src/compiler/nir/nir_opcodes.py<br>
> >> +++ b/src/compiler/nir/nir_opcodes.py<br>
> >> @@ -164,6 +164,7 @@ unop_convert("f2u", tuint32, tfloat32, "src0") #<br>
> >> Float-to-unsigned conversion<br>
> >>  unop_convert("d2i", tint32, tfloat64, "src0") # Double-to-integer<br>
> >> conversion.<br>
> >>  unop_convert("d2u", tuint32, tfloat64, "src0") # Double-to-unsigned<br>
> >> conversion.<br>
> >>  unop_convert("i2f", tfloat32, tint32, "src0") # Integer-to-float<br>
> >> conversion.<br>
> >> +unop_convert("i2d", tfloat64, tint32, "src0") # Integer-to-double<br>
> >> conversion.<br>
> >>  # Float-to-boolean conversion<br>
> >>  unop_convert("f2b", tbool, tfloat32, "src0 != 0.0f")<br>
> >>  unop_convert("d2b", tbool, tfloat64, "src0 != 0.0")<br>
> >> @@ -173,6 +174,7 @@ unop_convert("b2f", tfloat32, tbool, "src0 ? 1.0f :<br>
> >> 0.0f")<br>
> >>  unop_convert("i2b", tbool, tint32, "src0 != 0")<br>
> >>  unop_convert("b2i", tint32, tbool, "src0 ? 1 : 0") # Boolean-to-int<br>
> >> conversion<br>
> >>  unop_convert("u2f", tfloat32, tuint32, "src0") # Unsigned-to-float<br>
> >> conversion.<br>
> >> +unop_convert("u2d", tfloat64, tuint32, "src0") # Unsigned-to-double<br>
> >> conversion.<br>
> >>  # double-to-float conversion<br>
> >>  unop_convert("d2f", tfloat32, tfloat64, "src0") # Single to double<br>
> >> precision<br>
> >>  unop_convert("f2d", tfloat64, tfloat32, "src0") # Double to single<br>
> >> precision<br>
> >> --<br>
> >> 2.5.0<br>
> >><br>
> >> _______________________________________________<br>
> >> mesa-dev mailing list<br>
> >> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> >> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
> >><br>
> ><br>
</p>