mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 15:50:17 +01:00
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:
parent
19a22ae110
commit
cf1390e1b8
2 changed files with 10 additions and 16 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue