diff options
author | Kenneth Graunke <[email protected]> | 2016-08-17 05:03:29 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-08-18 00:46:04 -0700 |
commit | d8971128accc84db04becf820b66e455d5d7534c (patch) | |
tree | d7fe8d50a4fac8b82761744bb230957acc81208f /src/compiler/nir | |
parent | 01e99cba043084be7477e3a801029bfee581ab87 (diff) |
nir/builder: Add bany_inequal and bany helpers.
The first simply picks the bany_inequal[234] opcodes based on the SSA
def's number of components. The latter implicitly compares with zero
to achieve the same semantics of GLSL's any().
Cc: [email protected]
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Alejandro PiƱeiro <[email protected]>
Diffstat (limited to 'src/compiler/nir')
-rw-r--r-- | src/compiler/nir/nir_builder.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h index 435582aca3c..affa29cb025 100644 --- a/src/compiler/nir/nir_builder.h +++ b/src/compiler/nir/nir_builder.h @@ -318,6 +318,25 @@ nir_fdot(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) } static inline nir_ssa_def * +nir_bany_inequal(nir_builder *b, nir_ssa_def *src0, nir_ssa_def *src1) +{ + switch (src0->num_components) { + case 1: return nir_ine(b, src0, src1); + case 2: return nir_bany_inequal2(b, src0, src1); + case 3: return nir_bany_inequal3(b, src0, src1); + case 4: return nir_bany_inequal4(b, src0, src1); + default: + unreachable("bad component size"); + } +} + +static inline nir_ssa_def * +nir_bany(nir_builder *b, nir_ssa_def *src) +{ + return nir_bany_inequal(b, src, nir_imm_int(b, 0)); +} + +static inline nir_ssa_def * nir_channel(nir_builder *b, nir_ssa_def *def, unsigned c) { unsigned swizzle[4] = {c, c, c, c}; |