From: Dave Airlie <[email protected]>

On evergreen we can route vertex fetches via the texture cache,
and this is required for some images support. So add support
to the asm builder for it.

Signed-off-by: Dave Airlie <[email protected]>
---
 src/gallium/drivers/r600/r600_asm.c | 20 ++++++++++++++++++--
 src/gallium/drivers/r600/r600_asm.h |  2 ++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_asm.c 
b/src/gallium/drivers/r600/r600_asm.c
index 54458ec..e03912c 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -1335,7 +1335,8 @@ static inline boolean last_inst_was_not_vtx_fetch(struct 
r600_bytecode *bc)
                        bc->cf_last->op != CF_OP_TEX));
 }
 
-int r600_bytecode_add_vtx(struct r600_bytecode *bc, const struct 
r600_bytecode_vtx *vtx)
+static int r600_bytecode_add_vtx_internal(struct r600_bytecode *bc, const 
struct r600_bytecode_vtx *vtx,
+                                         bool use_tc)
 {
        struct r600_bytecode_vtx *nvtx = r600_bytecode_vtx();
        int r;
@@ -1362,9 +1363,14 @@ int r600_bytecode_add_vtx(struct r600_bytecode *bc, 
const struct r600_bytecode_v
                switch (bc->chip_class) {
                case R600:
                case R700:
-               case EVERGREEN:
                        bc->cf_last->op = CF_OP_VTX;
                        break;
+               case EVERGREEN:
+                       if (use_tc)
+                               bc->cf_last->op = CF_OP_TEX;
+                       else
+                               bc->cf_last->op = CF_OP_VTX;
+                       break;
                case CAYMAN:
                        bc->cf_last->op = CF_OP_TEX;
                        break;
@@ -1387,6 +1393,16 @@ int r600_bytecode_add_vtx(struct r600_bytecode *bc, 
const struct r600_bytecode_v
        return 0;
 }
 
+int r600_bytecode_add_vtx(struct r600_bytecode *bc, const struct 
r600_bytecode_vtx *vtx)
+{
+       return r600_bytecode_add_vtx_internal(bc, vtx, false);
+}
+
+int r600_bytecode_add_vtx_tc(struct r600_bytecode *bc, const struct 
r600_bytecode_vtx *vtx)
+{
+       return r600_bytecode_add_vtx_internal(bc, vtx, true);
+}
+
 int r600_bytecode_add_tex(struct r600_bytecode *bc, const struct 
r600_bytecode_tex *tex)
 {
        struct r600_bytecode_tex *ntex = r600_bytecode_tex();
diff --git a/src/gallium/drivers/r600/r600_asm.h 
b/src/gallium/drivers/r600/r600_asm.h
index 1629399..be83f3a 100644
--- a/src/gallium/drivers/r600/r600_asm.h
+++ b/src/gallium/drivers/r600/r600_asm.h
@@ -267,6 +267,8 @@ int r600_bytecode_add_alu(struct r600_bytecode *bc,
                const struct r600_bytecode_alu *alu);
 int r600_bytecode_add_vtx(struct r600_bytecode *bc,
                const struct r600_bytecode_vtx *vtx);
+int r600_bytecode_add_vtx_tc(struct r600_bytecode *bc,
+                            const struct r600_bytecode_vtx *vtx);
 int r600_bytecode_add_tex(struct r600_bytecode *bc,
                const struct r600_bytecode_tex *tex);
 int r600_bytecode_add_gds(struct r600_bytecode *bc,
-- 
2.5.0

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to