mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
lima/ppir: add common helper for creating movs
Introduce common helper for creating movs to avoid code duplication Reviewed-by: Erico Nunes <nunes.erico@gmail.com> Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
This commit is contained in:
parent
7659c6197f
commit
bd77d19300
3 changed files with 41 additions and 49 deletions
|
|
@ -54,35 +54,22 @@ static bool ppir_lower_const(ppir_block *block, ppir_node *node)
|
|||
break;
|
||||
}
|
||||
|
||||
ppir_node *move = ppir_node_create(block, ppir_op_mov, -1, 0);
|
||||
ppir_node *move = ppir_node_insert_mov(node);
|
||||
if (unlikely(!move))
|
||||
return false;
|
||||
|
||||
ppir_debug("lower const create move %d for %d\n",
|
||||
move->index, node->index);
|
||||
|
||||
ppir_alu_node *alu = ppir_node_to_alu(move);
|
||||
alu->dest = *dest;
|
||||
alu->num_src = 1;
|
||||
ppir_node_target_assign(alu->src, node);
|
||||
for (int s = 0; s < 4; s++)
|
||||
alu->src->swizzle[s] = s;
|
||||
|
||||
ppir_node_foreach_succ_safe(node, dep) {
|
||||
ppir_node_replace_pred(dep, move);
|
||||
ppir_node_replace_child(succ, node, move);
|
||||
}
|
||||
|
||||
/* Need to be careful with changing src/dst type here:
|
||||
* it has to be done *after* successors have their children
|
||||
* replaced, otherwise ppir_node_replace_child() won't find
|
||||
* matching src/dst and as result won't work
|
||||
*/
|
||||
alu->src->type = dest->type = ppir_target_pipeline;
|
||||
alu->src->pipeline = dest->pipeline = ppir_pipeline_reg_const0;
|
||||
ppir_src *mov_src = ppir_node_get_src(move, 0);
|
||||
mov_src->type = dest->type = ppir_target_pipeline;
|
||||
mov_src->pipeline = dest->pipeline = ppir_pipeline_reg_const0;
|
||||
|
||||
ppir_node_add_dep(move, node);
|
||||
list_addtail(&move->list, &node->list);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -109,27 +96,13 @@ static bool ppir_lower_load(ppir_block *block, ppir_node *node)
|
|||
return true;
|
||||
}
|
||||
|
||||
ppir_node *move = ppir_node_create(block, ppir_op_mov, -1 , 0);
|
||||
ppir_node *move = ppir_node_insert_mov(node);
|
||||
if (unlikely(!move))
|
||||
return false;
|
||||
|
||||
ppir_alu_node *alu = ppir_node_to_alu(move);
|
||||
|
||||
alu->dest = *dest;
|
||||
|
||||
ppir_node_replace_all_succ(move, node);
|
||||
|
||||
dest->type = ppir_target_pipeline;
|
||||
dest->pipeline = ppir_pipeline_reg_uniform;
|
||||
|
||||
alu->num_src = 1;
|
||||
ppir_node_target_assign(&alu->src[0], node);
|
||||
for (int i = 0; i < 4; i++)
|
||||
alu->src->swizzle[i] = i;
|
||||
|
||||
ppir_node_add_dep(move, node);
|
||||
list_addtail(&move->list, &node->list);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -154,6 +127,12 @@ static bool ppir_lower_ddxy(ppir_block *block, ppir_node *node)
|
|||
static bool ppir_lower_texture(ppir_block *block, ppir_node *node)
|
||||
{
|
||||
ppir_load_texture_node *load_tex = ppir_node_to_load_texture(node);
|
||||
ppir_dest *dest = ppir_node_get_dest(node);
|
||||
|
||||
if (ppir_node_is_root(node) && dest->type == ppir_target_ssa) {
|
||||
ppir_node_delete(node);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Create load_coords node */
|
||||
ppir_load_node *load = ppir_node_create(block, ppir_op_load_coords, -1, 0);
|
||||
|
|
@ -178,27 +157,16 @@ static bool ppir_lower_texture(ppir_block *block, ppir_node *node)
|
|||
ppir_node_add_dep(node, &load->node);
|
||||
|
||||
/* Create move node */
|
||||
ppir_node *move = ppir_node_create(block, ppir_op_mov, -1 , 0);
|
||||
ppir_node *move = ppir_node_insert_mov(node);
|
||||
if (unlikely(!move))
|
||||
return false;
|
||||
|
||||
ppir_alu_node *alu = ppir_node_to_alu(move);
|
||||
ppir_debug("lower texture create move %d for %d\n",
|
||||
move->index, node->index);
|
||||
|
||||
ppir_dest *dest = ppir_node_get_dest(node);
|
||||
alu->dest = *dest;
|
||||
|
||||
ppir_node_replace_all_succ(move, node);
|
||||
|
||||
dest->type = ppir_target_pipeline;
|
||||
dest->pipeline = ppir_pipeline_reg_sampler;
|
||||
|
||||
alu->num_src = 1;
|
||||
ppir_node_target_assign(&alu->src[0], node);
|
||||
for (int i = 0; i < 4; i++)
|
||||
alu->src->swizzle[i] = i;
|
||||
|
||||
ppir_node_add_dep(move, node);
|
||||
list_addtail(&move->list, &node->list);
|
||||
ppir_src *mov_src= ppir_node_get_src(move, 0);
|
||||
mov_src->type = dest->type = ppir_target_pipeline;
|
||||
mov_src->pipeline = dest->pipeline = ppir_pipeline_reg_sampler;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -698,3 +698,25 @@ ppir_node *ppir_node_clone(ppir_block *block, ppir_node *node)
|
|||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
ppir_node *ppir_node_insert_mov(ppir_node *node)
|
||||
{
|
||||
ppir_node *move = ppir_node_create(node->block, ppir_op_mov, -1, 0);
|
||||
if (unlikely(!move))
|
||||
return NULL;
|
||||
|
||||
ppir_dest *dest = ppir_node_get_dest(node);
|
||||
ppir_alu_node *alu = ppir_node_to_alu(move);
|
||||
alu->dest = *dest;
|
||||
alu->num_src = 1;
|
||||
ppir_node_target_assign(alu->src, node);
|
||||
|
||||
for (int s = 0; s < 4; s++)
|
||||
alu->src->swizzle[s] = s;
|
||||
|
||||
ppir_node_replace_all_succ(move, node);
|
||||
ppir_node_add_dep(move, node);
|
||||
list_addtail(&move->list, &node->list);
|
||||
|
||||
return move;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -384,6 +384,8 @@ void ppir_node_replace_all_succ(ppir_node *dst, ppir_node *src);
|
|||
void ppir_node_replace_pred(ppir_dep *dep, ppir_node *new_pred);
|
||||
ppir_dep *ppir_dep_for_pred(ppir_node *node, ppir_node *pred);
|
||||
ppir_node *ppir_node_clone(ppir_block *block, ppir_node *node);
|
||||
/* Assumes that node successors are in the same block */
|
||||
ppir_node *ppir_node_insert_mov(ppir_node *node);
|
||||
|
||||
static inline bool ppir_node_is_root(ppir_node *node)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue