diff options
author | Jason Ekstrand <[email protected]> | 2018-02-28 13:15:04 -0800 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2018-03-01 09:15:01 -0800 |
commit | 99ee40fb544ce17489fc2511d44ce1026a5ec70c (patch) | |
tree | 7e89621b721ada25f0dfe17f3530b9f46f136744 /src/compiler/nir/nir_search.c | |
parent | b5b912dfeebabafbaff176fe4205eb74607f709b (diff) |
nir/search: Support 8 and 16-bit constants in match_value
Reviewed-by: Jose Maria Casanova Crespo <[email protected]>
Diffstat (limited to 'src/compiler/nir/nir_search.c')
-rw-r--r-- | src/compiler/nir/nir_search.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_search.c b/src/compiler/nir/nir_search.c index dec56fee747..c7c52ae320d 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]] != |