diff options
author | Vasily Khoruzhick <[email protected]> | 2019-10-07 20:11:46 -0700 |
---|---|---|
committer | Vasily Khoruzhick <[email protected]> | 2019-10-09 08:24:27 -0700 |
commit | c8554f849e4102a78a9f6ab371b7492d7b25af62 (patch) | |
tree | 31394ddd84d79772a484504d6a82786cb97de9a6 /src/gallium/drivers/lima/ir | |
parent | 94cfe590703018cf3d34a0c1f8667064919bf843 (diff) |
lima/ppir: don't clone texture loads
Cloning texture loads isn't a good idea since we may move it into
a block that is not shared between all the invocations of the shader.
We'd like to avoid that since it may result in undefined behavior.
Reviewed-by: Andreas Baierl <[email protected]>
Signed-off-by: Vasily Khoruzhick <[email protected]>
Diffstat (limited to 'src/gallium/drivers/lima/ir')
-rw-r--r-- | src/gallium/drivers/lima/ir/pp/nir.c | 7 | ||||
-rw-r--r-- | src/gallium/drivers/lima/ir/pp/node.c | 66 |
2 files changed, 0 insertions, 73 deletions
diff --git a/src/gallium/drivers/lima/ir/pp/nir.c b/src/gallium/drivers/lima/ir/pp/nir.c index c254035b3fb..260db1e35af 100644 --- a/src/gallium/drivers/lima/ir/pp/nir.c +++ b/src/gallium/drivers/lima/ir/pp/nir.c @@ -106,13 +106,6 @@ static void ppir_node_add_src(ppir_compiler *comp, ppir_node *node, case ppir_op_const: child = ppir_node_clone(node->block, child); break; - case ppir_op_load_texture: - /* Clone texture loads for each block */ - if (child->block != node->block) { - child = ppir_node_clone(node->block, child); - comp->var_nodes[ns->ssa->index] = child; - } - break; case ppir_op_load_varying: if ((node->op != ppir_op_load_texture)) { /* Clone varying loads for each block */ diff --git a/src/gallium/drivers/lima/ir/pp/node.c b/src/gallium/drivers/lima/ir/pp/node.c index 29627c71ca0..92f09c8929a 100644 --- a/src/gallium/drivers/lima/ir/pp/node.c +++ b/src/gallium/drivers/lima/ir/pp/node.c @@ -623,70 +623,6 @@ static ppir_node *ppir_node_clone_const(ppir_block *block, ppir_node *node) } static ppir_node * -ppir_node_clone_tex(ppir_block *block, ppir_node *node) -{ - ppir_load_texture_node *tex_node = ppir_node_to_load_texture(node); - ppir_node *tex_coords = tex_node->src_coords.node; - - ppir_node *new_tex_coords = NULL; - - ppir_load_texture_node *new_tnode = ppir_node_create(block, ppir_op_load_texture, -1, 0); - if (!new_tnode) - return NULL; - - list_addtail(&new_tnode->node.list, &block->node_list); - - if (tex_coords) { - switch (tex_coords->op) { - case ppir_op_load_varying: - case ppir_op_load_coords: - new_tex_coords = ppir_node_clone(block, tex_coords); - assert(new_tex_coords); - break; - default: - new_tex_coords = tex_coords; - break; - } - } - - ppir_dest *dest = ppir_node_get_dest(node); - new_tnode->dest = *dest; - - new_tnode->sampler_dim = tex_node->sampler_dim; - - for (int i = 0; i < 4; i++) - new_tnode->src_coords.swizzle[i] = tex_node->src_coords.swizzle[i]; - - for (int i = 0; i < ppir_node_get_src_num(node); i++) { - ppir_src *src = ppir_node_get_src(node, i); - ppir_src *new_src = ppir_node_get_src(&new_tnode->node, i); - switch (src->type) { - case ppir_target_ssa: { - ppir_node_target_assign(new_src, new_tex_coords); - ppir_node_add_dep(&new_tnode->node, new_tex_coords, ppir_dep_src); - break; - } - case ppir_target_register: { - new_src->type = src->type; - new_src->reg = src->reg; - new_src->node = NULL; - break; - } - case ppir_target_pipeline: { - new_src->type = src->type; - new_src->pipeline = src->pipeline; - break; - } - default: - /* pipeline is not expected here */ - assert(0); - } - } - - return &new_tnode->node; -} - -static ppir_node * ppir_node_clone_load(ppir_block *block, ppir_node *node) { ppir_load_node *load_node = ppir_node_to_load(node); @@ -730,8 +666,6 @@ ppir_node *ppir_node_clone(ppir_block *block, ppir_node *node) switch (node->op) { case ppir_op_const: return ppir_node_clone_const(block, node); - case ppir_op_load_texture: - return ppir_node_clone_tex(block, node); case ppir_op_load_uniform: case ppir_op_load_varying: case ppir_op_load_temp: |