From: Dave Airlie Date: Mon, 18 Nov 2019 07:04:35 +0000 (+1000) Subject: vtn/opencl: add clz support X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7325f6ac987d295b101372bffcb98799251fe678;p=mesa.git vtn/opencl: add clz support This is needed for OpenCL Reviewed-by: Jason Ekstrand --- diff --git a/src/compiler/nir/nir_builtin_builder.h b/src/compiler/nir/nir_builtin_builder.h index e2fbf02b3ea..0b4d1d0135e 100644 --- a/src/compiler/nir/nir_builtin_builder.h +++ b/src/compiler/nir/nir_builtin_builder.h @@ -253,6 +253,14 @@ nir_select(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, nir_ssa_def *s) return nir_bcsel(b, nir_ieq(b, s, nir_imm_intN_t(b, 0, s->bit_size)), x, y); } +static inline nir_ssa_def * +nir_clz_u(nir_builder *b, nir_ssa_def *a) +{ + nir_ssa_def *val; + val = nir_isub(b, nir_imm_intN_t(b, a->bit_size - 1, 32), nir_ufind_msb(b, a)); + return nir_u2u(b, val, a->bit_size); +} + #ifdef __cplusplus } #endif diff --git a/src/compiler/spirv/vtn_opencl.c b/src/compiler/spirv/vtn_opencl.c index 165c0de4a7a..c41023256d4 100644 --- a/src/compiler/spirv/vtn_opencl.c +++ b/src/compiler/spirv/vtn_opencl.c @@ -185,6 +185,8 @@ handle_special(struct vtn_builder *b, enum OpenCLstd_Entrypoints opcode, return nir_rotate(nb, srcs[0], srcs[1]); case OpenCLstd_Smoothstep: return nir_smoothstep(nb, srcs[0], srcs[1], srcs[2]); + case OpenCLstd_Clz: + return nir_clz_u(nb, srcs[0]); case OpenCLstd_Select: return nir_select(nb, srcs[0], srcs[1], srcs[2]); case OpenCLstd_Step: