From 64bdfc698d6d9f543f82141330ae32de286b8417 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Fri, 27 Mar 2015 14:19:46 -0700 Subject: nir: Add an interface to turn a nir_src into a nir_ssa_def. We use nir_ssa_defs for nir_builder args, so this takes a nir_src and makes one so it can be passed in. Reviewed-by: Jason Ekstrand --- src/glsl/nir/nir_builder.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/glsl/nir/nir_builder.h') diff --git a/src/glsl/nir/nir_builder.h b/src/glsl/nir/nir_builder.h index ecbdbe3d12d..587d014d3f4 100644 --- a/src/glsl/nir/nir_builder.h +++ b/src/glsl/nir/nir_builder.h @@ -225,4 +225,23 @@ nir_swizzle(nir_builder *build, nir_ssa_def *src, unsigned swiz[4], nir_imov_alu(build, alu_src, num_components); } +/** + * Turns a nir_src into a nir_ssa_def * so it can be passed to + * nir_build_alu()-based builder calls. + */ +static inline nir_ssa_def * +nir_ssa_for_src(nir_builder *build, nir_src src, int num_components) +{ + if (src.is_ssa && src.ssa->num_components == num_components) + return src.ssa; + + nir_alu_src alu; + memset(&alu, 0, sizeof(alu)); + alu.src = src; + for (int j = 0; j < 4; j++) + alu.swizzle[j] = j; + + return nir_imov_alu(build, alu, num_components); +} + #endif /* NIR_BUILDER_H */ -- cgit v1.2.3