lima: fix vector const src referenced multiple times

It can happen that a single vector constant is referenced multiple times
by the same node, with different swizzles.
This needs to be taken into account by checking and updating the
swizzles for all the srcs of a target node when inserting the const
node to the same instruction.

Signed-off-by: Erico Nunes <nunes.erico@gmail.com>
Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15726>
This commit is contained in:
Erico Nunes 2022-04-03 18:28:19 +02:00
parent 19a22ae110
commit cf1390e1b8
2 changed files with 10 additions and 16 deletions

View file

@ -391,7 +391,6 @@ spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat2-index-col-row-wr,F
spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat2-index-col-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat2-index-row-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat2-index-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat2-row-rd,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat2-row-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat2-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat3-col-row-wr,Fail
@ -412,7 +411,6 @@ spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat4-row-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-array-mat4-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-mat2-col-row-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-mat2-col-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-mat2-row-rd,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-mat2-row-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-mat2-wr,Fail
spec@glsl-1.10@execution@variable-indexing@fs-temp-mat3-col-row-wr,Fail
@ -482,7 +480,6 @@ spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-index-col-row-wr,F
spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-index-col-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-index-row-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-index-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-row-rd,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-row-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat2-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat3-col-row-wr,Fail
@ -503,7 +500,6 @@ spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat4-row-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-array-mat4-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-mat2-col-row-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-mat2-col-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-mat2-row-rd,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-mat2-row-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-mat2-wr,Fail
spec@glsl-1.20@execution@variable-indexing@fs-temp-mat3-col-row-wr,Fail

View file

@ -186,19 +186,17 @@ bool ppir_instr_insert_node(ppir_instr *instr, ppir_node *node)
uint8_t swizzle[4] = {0};
if (ppir_instr_insert_const(&ic, nc, swizzle)) {
ppir_node *succ = ppir_node_first_succ(node);
ppir_src *src = NULL;
for (int s = 0; s < ppir_node_get_src_num(succ); s++) {
src = ppir_node_get_src(succ, s);
if (src->node == node)
break;
}
assert(src);
assert(src->node == node);
instr->constant[i] = ic;
ppir_update_src_pipeline(ppir_pipeline_reg_const0 + i, src,
&c->dest, swizzle);
ppir_node *succ = ppir_node_first_succ(node);
for (int s = 0; s < ppir_node_get_src_num(succ); s++) {
ppir_src *src = ppir_node_get_src(succ, s);
assert(src);
if (src->node != node)
continue;
ppir_update_src_pipeline(ppir_pipeline_reg_const0 + i, src,
&c->dest, swizzle);
}
break;
}
}