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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user