On Wed, 2017-02-15 at 18:43 +1000, Dave Airlie wrote:
> From: Dave Airlie <[email protected]>
> 
> These are enough for the spir-v generator to handle UConvert
> and SConvert operations, and fix the 4 tests in CTS.
> 
> Signed-off-by: Dave Airlie <[email protected]>
> ---
>  src/compiler/nir/nir.c | 26 +++++++++++++++++++-------
>  1 file changed, 19 insertions(+), 7 deletions(-)
> 
> diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c
> index 25bfc31..a9fac96 100644
> --- a/src/compiler/nir/nir.c
> +++ b/src/compiler/nir/nir.c
> @@ -1971,10 +1971,15 @@ nir_type_conversion_op(nir_alu_type src,
> nir_alu_type dst)
>        if (src_bitsize == dst_bitsize)
>           return (src_base_type == nir_type_float) ? nir_op_fmov :
> nir_op_imov;
>  
> -      assert (src_base_type == nir_type_float);
> -      /* TODO: implement support for float16 */
>        assert(src_bitsize == 64 || dst_bitsize == 64);
> -      return (src_bitsize == 64) ? nir_op_d2f : nir_op_f2d;
> +      if (src_base_type == nir_type_float)
> +         /* TODO: implement support for float16 */
> +         return (src_bitsize == 64) ? nir_op_d2f : nir_op_f2d;
> +      else if (src_base_type == nir_type_uint)
> +         return (src_bitsize == 64) ? nir_op_imov : nir_op_u2u64;
> +      else if (src_base_type == nir_type_int)
> +         return (src_bitsize == 64) ? nir_op_imov : nir_op_i2i64;
> +      unreachable("Invalid conversion");
>     }
>  
>     /* Different base type but same bit_size */
> @@ -2008,11 +2013,17 @@ nir_type_conversion_op(nir_alu_type src,
> nir_alu_type dst)
>     /* TODO: Implement integer support for types with bit_size != 32
> */
>     switch (src_base_type) {
>     case nir_type_uint:
> -      assert(dst == nir_type_float64);
> -      return nir_op_u2d;
> +      if (dst == nir_type_float64)
> +         return nir_op_u2d;
> +      else if (dst == nir_type_int64)
> +         return nir_op_u2i64;
> +      break;
>     case nir_type_int:
> -      assert(dst == nir_type_float64);
> -      return nir_op_i2d;
> +      if (dst == nir_type_float64)
> +         return nir_op_i2d;
> +      else if (dst == nir_type_uint64)
> +         return nir_op_i2i64;
> +      break;
>     case nir_type_bool:
>        assert(dst == nir_type_float64);
>        return nir_op_u2d;

You missed boolean to [u]int64 conversion but it can be added in a
follow-up patch.

In either case:

Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>

> @@ -2038,4 +2049,5 @@ nir_type_conversion_op(nir_alu_type src,
> nir_alu_type dst)
>     default:
>        unreachable("Invalid conversion");
>     };
> +   unreachable("Invalid conversion");

Nice catch!

Sam

>  }

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to