Iago Toral Quiroga <ito...@igalia.com> writes:

> ---
>  src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp 
> b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> index 1525a3d..4014020 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> @@ -1497,6 +1497,24 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
>        emit(CMP(dst, op[0], brw_imm_f(0.0f), BRW_CONDITIONAL_NZ));
>        break;
>  
> +   case nir_op_d2b: {
> +      /* two-argument instructions can't take 64-bit immediates */
> +      dst_reg zero = dst_reg(this, glsl_type::dvec4_type);
> +      emit(MOV(zero, brw_imm_df(0.0)));
> +
> +      dst_reg tmp = dst_reg(this, glsl_type::dvec4_type);
> +      emit(CMP(tmp, op[0], src_reg(zero), BRW_CONDITIONAL_NZ));
> +
> +      /* Convert the double CMP result to a single boolean result. For that
> +       * we take the low 32-bit chunk of each DF component in the result.
> +       * and do a final MOV to honor the original writemask
> +       */
> +      dst_reg result = dst_reg(this, glsl_type::bvec4_type);
> +      emit(VEC4_OPCODE_PICK_LOW_32BIT, result, src_reg(tmp));
> +      emit(MOV(dst, src_reg(result)));

Couldn't you just do a single CMP instruction of the double-precision
argument and a single-precision 0.0 immediate?  I think you could
potentially also use a 32bit destination type on the CMP instruction so
you don't need to emit the PICK_LOW+MOV instructions afterwards.  It may
hit an instruction decompression bug but it could be cleaned up by the
SIMD lowering pass afterwards, AFAICT the result would be two
uncompressed instructions instead of the two uncompressed plus two
compressed instructions above.

> +      break;
> +   }
> +
>     case nir_op_i2b:
>        emit(CMP(dst, op[0], brw_imm_d(0), BRW_CONDITIONAL_NZ));
>        break;
> -- 
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Attachment: signature.asc
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to