[Mesa-dev] [PATCH v3 28/42] intel/compiler: handle 64-bit float to 8-bit integer conversions

Jason Ekstrand jason at jlekstrand.net
Thu Jan 17 23:12:42 UTC 2019


This patch doesn't really do what the commit message says.  What it really
does is implement float -> 8-bit converions for *any* size float.

On Tue, Jan 15, 2019 at 7:55 AM Iago Toral Quiroga <itoral at igalia.com>
wrote:

> These are not directly supported in hardware and brw_nir_lower_conversions
> should have taken care of that before we get here. Also, while we are
> at it, make sure 64-bit integer to 8-bit are also properly split by
> the same lowering pass, since they have the same hardware restrictions.
>

Now that we have a lowering pass, having separate cases just so one of them
can assert seems silly.  If anything, we should just do

if (result.type == BRW_REGISTER_TYPE_B ||
    result.type == BRW_REGISTER_TYPE_UB ||
    result.type == BRW_REGISTER_TYPE_HF)
   assert(type_sz(op[0].type) < 8) /* brw_nir_lower_conversions */

and have it all in one big case.  The only special case we need is for
booleans where we need to negate them and fall through.

--Jason


> ---
>  src/intel/compiler/brw_fs_nir.cpp | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/src/intel/compiler/brw_fs_nir.cpp
> b/src/intel/compiler/brw_fs_nir.cpp
> index cf546b8ff09..e454578d99b 100644
> --- a/src/intel/compiler/brw_fs_nir.cpp
> +++ b/src/intel/compiler/brw_fs_nir.cpp
> @@ -786,6 +786,10 @@ fs_visitor::nir_emit_alu(const fs_builder &bld,
> nir_alu_instr *instr)
>     case nir_op_f2f16:
>     case nir_op_i2f16:
>     case nir_op_u2f16:
> +   case nir_op_i2i8:
> +   case nir_op_u2u8:
> +   case nir_op_f2i8:
> +   case nir_op_f2u8:
>        assert(type_sz(op[0].type) < 8); /* brw_nir_lower_conversions */
>        inst = bld.MOV(result, op[0]);
>        inst->saturate = instr->dest.saturate;
> @@ -824,8 +828,6 @@ fs_visitor::nir_emit_alu(const fs_builder &bld,
> nir_alu_instr *instr)
>     case nir_op_u2u32:
>     case nir_op_i2i16:
>     case nir_op_u2u16:
> -   case nir_op_i2i8:
> -   case nir_op_u2u8:
>        inst = bld.MOV(result, op[0]);
>        inst->saturate = instr->dest.saturate;
>        break;
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190117/fca75f3e/attachment-0001.html>


More information about the mesa-dev mailing list