mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 19:20:08 +01:00
nir: Add a nir_builder_alu variant which takes an array of components
v2: rename to nir_build_alu_src_arr Signed-off-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
c91ea6343f
commit
681fb7ea05
1 changed files with 36 additions and 14 deletions
|
|
@ -389,24 +389,12 @@ nir_imm_boolN_t(nir_builder *build, bool x, unsigned bit_size)
|
|||
}
|
||||
|
||||
static inline nir_ssa_def *
|
||||
nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0,
|
||||
nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3)
|
||||
nir_builder_alu_instr_finish_and_insert(nir_builder *build, nir_alu_instr *instr)
|
||||
{
|
||||
const nir_op_info *op_info = &nir_op_infos[op];
|
||||
nir_alu_instr *instr = nir_alu_instr_create(build->shader, op);
|
||||
if (!instr)
|
||||
return NULL;
|
||||
const nir_op_info *op_info = &nir_op_infos[instr->op];
|
||||
|
||||
instr->exact = build->exact;
|
||||
|
||||
instr->src[0].src = nir_src_for_ssa(src0);
|
||||
if (src1)
|
||||
instr->src[1].src = nir_src_for_ssa(src1);
|
||||
if (src2)
|
||||
instr->src[2].src = nir_src_for_ssa(src2);
|
||||
if (src3)
|
||||
instr->src[3].src = nir_src_for_ssa(src3);
|
||||
|
||||
/* Guess the number of components the destination temporary should have
|
||||
* based on our input sizes, if it's not fixed for the op.
|
||||
*/
|
||||
|
|
@ -462,6 +450,40 @@ nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0,
|
|||
return &instr->dest.dest.ssa;
|
||||
}
|
||||
|
||||
static inline nir_ssa_def *
|
||||
nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0,
|
||||
nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3)
|
||||
{
|
||||
nir_alu_instr *instr = nir_alu_instr_create(build->shader, op);
|
||||
if (!instr)
|
||||
return NULL;
|
||||
|
||||
instr->src[0].src = nir_src_for_ssa(src0);
|
||||
if (src1)
|
||||
instr->src[1].src = nir_src_for_ssa(src1);
|
||||
if (src2)
|
||||
instr->src[2].src = nir_src_for_ssa(src2);
|
||||
if (src3)
|
||||
instr->src[3].src = nir_src_for_ssa(src3);
|
||||
|
||||
return nir_builder_alu_instr_finish_and_insert(build, instr);
|
||||
}
|
||||
|
||||
/* for the couple special cases with more than 4 src args: */
|
||||
static inline nir_ssa_def *
|
||||
nir_build_alu_src_arr(nir_builder *build, nir_op op, nir_ssa_def **srcs)
|
||||
{
|
||||
const nir_op_info *op_info = &nir_op_infos[op];
|
||||
nir_alu_instr *instr = nir_alu_instr_create(build->shader, op);
|
||||
if (!instr)
|
||||
return NULL;
|
||||
|
||||
for (unsigned i = 0; i < op_info->num_inputs; i++)
|
||||
instr->src[i].src = nir_src_for_ssa(srcs[i]);
|
||||
|
||||
return nir_builder_alu_instr_finish_and_insert(build, instr);
|
||||
}
|
||||
|
||||
#include "nir_builder_opcodes.h"
|
||||
|
||||
static inline nir_ssa_def *
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue