[Mesa-dev] [PATCH 23/29] nir: add i2d and u2d opcodes
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Tue Mar 22 15:19:18 UTC 2016
On 21/03/16 23:56, Jason Ekstrand wrote:
> On Mon, Mar 21, 2016 at 5:06 AM, Samuel Iglesias Gonsálvez <
> siglesias at igalia.com> wrote:
>
>> From: Iago Toral Quiroga <itoral at 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.
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.
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 at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>
More information about the mesa-dev
mailing list