r600: force new CF with TEX only if any texture value is written
authorGert Wollny <gw.fossdev@gmail.com>
Mon, 25 Nov 2019 18:30:00 +0000 (19:30 +0100)
committerMarge Bot <eric+marge@anholt.net>
Mon, 10 Feb 2020 19:09:07 +0000 (19:09 +0000)
This works aound splitting the CF when the gradient is set.

Signed-off-by: Gert Wollny <gw.fossdev@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3225>

src/gallium/drivers/r600/r600_asm.c

index 6affa3d3a79d78020b771893f01b8e99ea891a3e..a604e74bb7e573644c4ec3e54a64f26ac538e0e9 100644 (file)
@@ -1450,7 +1450,9 @@ int r600_bytecode_add_tex(struct r600_bytecode *bc, const struct r600_bytecode_t
                bc->cf_last->op == CF_OP_TEX) {
                struct r600_bytecode_tex *ttex;
                LIST_FOR_EACH_ENTRY(ttex, &bc->cf_last->tex, list) {
-                       if (ttex->dst_gpr == ntex->src_gpr) {
+                       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_z < 4)) {
                                bc->force_add_cf = 1;
                                break;
                        }