agx: Add agx_alu_src_index helper for emit_alu
Since we don't use abs/neg in NIR, this just needs to construct p_extract ops to deal with swizzles. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Acked-by: Jason Ekstrand <jason@jlekstrand.net> Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10582>
This commit is contained in:

committed by
Alyssa Rosenzweig

parent
22886f50f9
commit
7ad11e3923
@@ -137,6 +137,27 @@ agx_emit_intrinsic(agx_builder *b, nir_intrinsic_instr *instr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static agx_index
|
||||||
|
agx_alu_src_index(agx_builder *b, nir_alu_src src)
|
||||||
|
{
|
||||||
|
/* Check well-formedness of the input NIR */
|
||||||
|
ASSERTED unsigned bitsize = nir_src_bit_size(src.src);
|
||||||
|
unsigned comps = nir_src_num_components(src.src);
|
||||||
|
unsigned channel = src.swizzle[0];
|
||||||
|
|
||||||
|
assert(bitsize == 16 || bitsize == 32 || bitsize == 64);
|
||||||
|
assert(!(src.negate || src.abs));
|
||||||
|
assert(channel < comps);
|
||||||
|
|
||||||
|
agx_index idx = agx_src_index(&src.src);
|
||||||
|
|
||||||
|
/* We only deal with scalars, emit p_extract if needed */
|
||||||
|
if (comps > 1)
|
||||||
|
return agx_p_extract(b, idx, channel);
|
||||||
|
else
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
static agx_instr *
|
static agx_instr *
|
||||||
agx_emit_alu(agx_builder *b, nir_alu_instr *instr)
|
agx_emit_alu(agx_builder *b, nir_alu_instr *instr)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user