From: Erico Nunes Date: Sun, 3 Apr 2022 16:28:19 +0000 (+0200) Subject: lima: fix vector const src referenced multiple times X-Git-Tag: upstream/22.3.5~10515 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cf1390e1b87a8029ad7efc710cceab661411413d;p=platform%2Fupstream%2Fmesa.git 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 Reviewed-by: Vasily Khoruzhick Part-of: --- diff --git a/src/gallium/drivers/lima/ci/lima-fails.txt b/src/gallium/drivers/lima/ci/lima-fails.txt index 2dc2dc3..8d9fe64 100644 --- a/src/gallium/drivers/lima/ci/lima-fails.txt +++ b/src/gallium/drivers/lima/ci/lima-fails.txt @@ -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 diff --git a/src/gallium/drivers/lima/ir/pp/instr.c b/src/gallium/drivers/lima/ir/pp/instr.c index 19d53cd..707055c 100644 --- a/src/gallium/drivers/lima/ir/pp/instr.c +++ b/src/gallium/drivers/lima/ir/pp/instr.c @@ -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)) { + instr->constant[i] = ic; 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); + ppir_src *src = ppir_node_get_src(succ, s); + assert(src); + if (src->node != node) + continue; - instr->constant[i] = ic; - ppir_update_src_pipeline(ppir_pipeline_reg_const0 + i, src, - &c->dest, swizzle); + ppir_update_src_pipeline(ppir_pipeline_reg_const0 + i, src, + &c->dest, swizzle); + } break; } }