[Mesa-dev] [PATCH] nir: Handle vector arguments to logical and/or/xor.

Connor Abbott cwabbott0 at gmail.com
Tue Mar 24 05:38:32 PDT 2015


We could already handle vector arguments to these -- we just couldn't
handle mixed scalar and vector arguments. So change the commit message
to something like "nir: Handle mixed scalar/vector arguments to
logical and/or/xor." and fix the typo and then this is

Reviewed-by: Connor Abbott <cwabbott0 at gmail.com>

On Mon, Mar 23, 2015 at 8:10 PM, Matt Turner <mattst88 at gmail.com> wrote:
> ---
>  src/glsl/nir/glsl_to_nir.cpp | 39 +++++++++++++++++++++------------------
>  1 file changed, 21 insertions(+), 18 deletions(-)
>
> diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
> index 357944d..e6f5ffc 100644
> --- a/src/glsl/nir/glsl_to_nir.cpp
> +++ b/src/glsl/nir/glsl_to_nir.cpp
> @@ -1210,6 +1210,9 @@ nir_visitor::visit(ir_expression *ir)
>     case ir_binop_bit_and:
>     case ir_binop_bit_or:
>     case ir_binop_bit_xor:
> +   case ir_binop_logic_and:
> +   case ir_binop_logic_or:
> +   case ir_binop_logic_xor:
>     case ir_binop_lshift:
>     case ir_binop_rshift:
>        switch (ir->operation) {
> @@ -1270,6 +1273,24 @@ nir_visitor::visit(ir_expression *ir)
>        case ir_binop_bit_xor:
>           op = nir_op_ixor;
>           break;
> +      case ir_binop_logic_and:
> +         if (supports_ints)
> +            op = nir_op_iand;
> +         else
> +            op = nir_op_fand;
> +         break;
> +      case ir_binop_logic_or:
> +         if (supports_ints)
> +            op = nir_op_ior;
> +         else
> +            op = nir_op_for;
> +         break;
> +      case ir_binop_logic_xor:
> +         if (supports_ints)
> +            op - nir_op_ixor;
> +         else
> +            op = nir_op_fxor;
> +         break;
>        case ir_binop_lshift:
>           op = nir_op_ishl;
>           break;
> @@ -1444,24 +1465,6 @@ nir_visitor::visit(ir_expression *ir)
>           }
>        }
>        break;
> -   case ir_binop_logic_and:
> -      if (supports_ints)
> -         emit(nir_op_iand, dest_size, srcs);
> -      else
> -         emit(nir_op_fand, dest_size, srcs);
> -      break;
> -   case ir_binop_logic_or:
> -      if (supports_ints)
> -         emit(nir_op_ior, dest_size, srcs);
> -      else
> -         emit(nir_op_for, dest_size, srcs);
> -      break;
> -   case ir_binop_logic_xor:
> -      if (supports_ints)
> -         emit(nir_op_ixor, dest_size, srcs);
> -      else
> -         emit(nir_op_fxor, dest_size, srcs);
> -      break;
>     case ir_binop_dot:
>        switch (ir->operands[0]->type->vector_elements) {
>           case 2: emit(nir_op_fdot2, dest_size, srcs); break;
> --
> 2.0.5
>


More information about the mesa-dev mailing list