Unlike with non-SSA ALU instructions, where if they're per-component you have to look at the writemask to know which source channels are being used, SSA ALU instructions always have all the possible channels enabled so we can just look at the number of components in the SSA definition for per-component instructions to say how many source components are being used.
Signed-off-by: Connor Abbott <cwabbo...@gmail.com> --- src/glsl/nir/nir.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index 0ef83a1..efcaa9d 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -652,6 +652,21 @@ nir_alu_instr_channel_used(nir_alu_instr *instr, unsigned src, unsigned channel) return (instr->dest.write_mask >> channel) & 1; } +/* + * For instructions whose destinations are SSA, get the number of channels + * used for a source + */ +static inline unsigned +nir_alu_instr_ssa_src_components(nir_alu_instr *instr, unsigned src) +{ + assert(instr->dest.dest.is_ssa); + + if (nir_op_infos[instr->op].input_sizes[src] > 0) + return nir_op_infos[instr->op].input_sizes[src]; + + return instr->dest.dest.ssa.num_components; +} + typedef enum { nir_deref_type_var, nir_deref_type_array, -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev