aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2018-02-28 13:15:04 -0800
committerJason Ekstrand <[email protected]>2018-03-01 09:15:01 -0800
commit99ee40fb544ce17489fc2511d44ce1026a5ec70c (patch)
tree7e89621b721ada25f0dfe17f3530b9f46f136744
parentb5b912dfeebabafbaff176fe4205eb74607f709b (diff)
nir/search: Support 8 and 16-bit constants in match_value
Reviewed-by: Jose Maria Casanova Crespo <[email protected]>
-rw-r--r--src/compiler/nir/nir_search.c20
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]] !=