mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 20:08:06 +02:00
r600: Split tex CF only if written component is read
There is no need to split the CF if only the register ID
in a previous write is the same, we should look at the actual
slots instead, ut we have also to take writes of 0 and 1 into
account.
Cc: mesa-stable
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23710>
(cherry picked from commit 3a569fbf9b)
This commit is contained in:
parent
cf19bd944d
commit
db633a8caa
2 changed files with 15 additions and 6 deletions
|
|
@ -607,7 +607,7 @@
|
|||
"description": "r600: Split tex CF only if written component is read",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1539,12 +1539,21 @@ int r600_bytecode_add_tex(struct r600_bytecode *bc, const struct r600_bytecode_t
|
|||
if (bc->cf_last != NULL &&
|
||||
bc->cf_last->op == CF_OP_TEX) {
|
||||
struct r600_bytecode_tex *ttex;
|
||||
uint8_t use_mask = ((1 << ntex->src_sel_x) |
|
||||
(1 << ntex->src_sel_y) |
|
||||
(1 << ntex->src_sel_z) |
|
||||
(1 << ntex->src_sel_w)) & 0xf;
|
||||
|
||||
LIST_FOR_EACH_ENTRY(ttex, &bc->cf_last->tex, list) {
|
||||
if (ttex->dst_gpr == ntex->src_gpr &&
|
||||
(ttex->dst_sel_x < 4 || ttex->dst_sel_y < 4 ||
|
||||
ttex->dst_sel_z < 4 || ttex->dst_sel_w < 4)) {
|
||||
bc->force_add_cf = 1;
|
||||
break;
|
||||
if (ttex->dst_gpr == ntex->src_gpr) {
|
||||
uint8_t write_mask = (ttex->dst_sel_x < 6 ? 1 : 0) |
|
||||
(ttex->dst_sel_y < 6 ? 2 : 0) |
|
||||
(ttex->dst_sel_z < 6 ? 4 : 0) |
|
||||
(ttex->dst_sel_w < 6 ? 8 : 0);
|
||||
if (use_mask & write_mask) {
|
||||
bc->force_add_cf = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* vtx instrs get inserted after tex, so make sure we aren't moving the tex
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue