diff --git a/src/gallium/drivers/r600/r600_asm.c b/src/gallium/drivers/r600/r600_asm.c index 27f564768e0..9761fe0b8df 100644 --- a/src/gallium/drivers/r600/r600_asm.c +++ b/src/gallium/drivers/r600/r600_asm.c @@ -1336,7 +1336,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; @@ -1363,9 +1364,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; @@ -1388,6 +1394,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 b12913d4374..8992e0dfb22 100644 --- a/src/gallium/drivers/r600/r600_asm.h +++ b/src/gallium/drivers/r600/r600_asm.h @@ -268,6 +268,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,