[Mesa-dev] [PATCH] nir/search: Support 8 and 16-bit constants

Chema Casanova jmcasanova at igalia.com
Thu Mar 1 17:05:36 UTC 2018


I've been checking the whole nir_search.c and there is another pending
16-bit support in construct_value function. I'm sending a patch so feel
free to squash it to your if it makes sense.

In any case this is.

Reviewed-by: Jose Maria Casanova Crespo <jmcasanova at igalia.com>

El 28/02/18 a las 22:18, Jason Ekstrand escribió:
> ---
>  src/compiler/nir/nir_search.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/src/compiler/nir/nir_search.c b/src/compiler/nir/nir_search.c
> index dec56fe..c7c52ae 100644
> --- a/src/compiler/nir/nir_search.c
> +++ b/src/compiler/nir/nir_search.c
> @@ -27,6 +27,7 @@
>  
>  #include <inttypes.h>
>  #include "nir_search.h"
> +#include "util/half_float.h"
>  
>  struct match_state {
>     bool inexact_match;
> @@ -194,6 +195,9 @@ match_value(const nir_search_value *value, nir_alu_instr *instr, unsigned src,
>           for (unsigned i = 0; i < num_components; ++i) {
>              double val;
>              switch (load->def.bit_size) {
> +            case 16:
> +               val = _mesa_half_to_float(load->value.u16[new_swizzle[i]]);
> +               break;
>              case 32:
>                 val = load->value.f32[new_swizzle[i]];
>                 break;
> @@ -213,6 +217,22 @@ match_value(const nir_search_value *value, nir_alu_instr *instr, unsigned src,
>        case nir_type_uint:
>        case nir_type_bool32:
>           switch (load->def.bit_size) {
> +         case 8:
> +            for (unsigned i = 0; i < num_components; ++i) {
> +               if (load->value.u8[new_swizzle[i]] !=
> +                   (uint8_t)const_val->data.u)
> +                  return false;
> +            }
> +            return true;
> +
> +         case 16:
> +            for (unsigned i = 0; i < num_components; ++i) {
> +               if (load->value.u16[new_swizzle[i]] !=
> +                   (uint16_t)const_val->data.u)
> +                  return false;
> +            }
> +            return true;
> +
>           case 32:
>              for (unsigned i = 0; i < num_components; ++i) {
>                 if (load->value.u32[new_swizzle[i]] !=
> 


More information about the mesa-dev mailing list