From fc3bf53a65eae158b0c2043ea0525827c90da882 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Sat, 20 May 2023 23:01:45 -0400 Subject: [PATCH] nir/builder: Add ubitfield_extract_imm helper We have a ubfe_imm helper that creates ubfe ops. Not all drivers support ubfe, however, as it requires SM5 semantics. A few drivers support oly ubitfield_extract. They should still get the convenience of an _imm helper, so add a symmetric helper. It might be nice to unify these helpers into a single helper that asserts its inputs do not overflow (such that the two ops become equivalent) and emits either ubfe or ubitfield_extract depending on the underlying driver. That is left for future work as it's unclear exactly what naming/semantics we want. Signed-off-by: Alyssa Rosenzweig Reviewed-by: Ian Romanick Reviewed-by: Erik Faye-Lund Part-of: --- src/compiler/nir/nir_builder.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h index 71890b89cb2..7d42e693499 100644 --- a/src/compiler/nir/nir_builder.h +++ b/src/compiler/nir/nir_builder.h @@ -937,6 +937,12 @@ nir_ubfe_imm(nir_builder *build, nir_ssa_def *x, uint32_t offset, uint32_t size) return nir_ubfe(build, x, nir_imm_int(build, offset), nir_imm_int(build, size)); } +static inline nir_ssa_def * +nir_ubitfield_extract_imm(nir_builder *build, nir_ssa_def *x, uint32_t offset, uint32_t size) +{ + return nir_ubitfield_extract(build, x, nir_imm_int(build, offset), nir_imm_int(build, size)); +} + static inline nir_ssa_def * nir_fclamp(nir_builder *b, nir_ssa_def *x, nir_ssa_def *min_val, nir_ssa_def *max_val)