lima: ppir: add codegen for mov and mul on combiner unit

Combiner unit support scalar by vector multiplication and scalar mov.
Implement it for codegen

Reviewed-by: Erico Nunes <nunes.erico@gmail.com>
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33568>
This commit is contained in:
Vasily Khoruzhick
2025-02-13 21:09:05 -08:00
parent 5937d12d29
commit bc9fca2fb1

View File

@@ -547,6 +547,7 @@ static void ppir_codegen_encode_combine(ppir_node *node, void *code)
case ppir_op_sqrt:
case ppir_op_sin:
case ppir_op_cos:
case ppir_op_mov:
{
f->scalar.dest_vec = false;
f->scalar.src_vec = false;
@@ -584,11 +585,37 @@ static void ppir_codegen_encode_combine(ppir_node *node, void *code)
case ppir_op_cos:
f->scalar.op = ppir_codegen_combine_scalar_op_cos;
break;
case ppir_op_mov:
f->scalar.op = ppir_codegen_combine_scalar_op_mov;
break;
default:
break;
}
break;
}
case ppir_op_mul:
{
f->scalar.dest_vec = true;
f->scalar.src_vec = true;
ppir_dest *dest = &alu->dest;
int index = ppir_target_get_dest_reg_index(dest);
int dest_shift = index & 0x3;
f->vector.dest = index >> 2;
f->vector.mask = dest->write_mask << dest_shift;
ppir_src *src = alu->src;
f->scalar.arg0_src = get_scl_reg_index(src, 0);
f->scalar.arg0_absolute = src->absolute;
f->scalar.arg0_negate = src->negate;
src = alu->src + 1;
index = ppir_target_get_src_reg_index(src);
f->vector.arg1_source = index >> 2;
f->vector.arg1_swizzle = encode_swizzle(src->swizzle, index & 0x3, dest_shift);
break;
}
default:
break;
}