All texture instructions can use offsets, not just TXF. Offsets into
the literals array were wrong, too.
---
 src/gallium/drivers/r600/r600_shader.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 80cdcd5..6289d97 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -3779,16 +3779,16 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
                }
        }
 
-       if (inst->Instruction.Opcode == TGSI_OPCODE_TXF) {
-               /* get offset values */
-               if (inst->Texture.NumOffsets) {
-                       assert(inst->Texture.NumOffsets == 1);
-
-                       offset_x = ctx->literals[inst->TexOffsets[0].Index + 
inst->TexOffsets[0].SwizzleX] << 1;
-                       offset_y = ctx->literals[inst->TexOffsets[0].Index + 
inst->TexOffsets[0].SwizzleY] << 1;
-                       offset_z = ctx->literals[inst->TexOffsets[0].Index + 
inst->TexOffsets[0].SwizzleZ] << 1;
-               }
-       } else if (inst->Instruction.Opcode == TGSI_OPCODE_TXD) {
+       /* get offset values */
+       if (inst->Texture.NumOffsets) {
+               assert(inst->Texture.NumOffsets == 1);
+
+               offset_x = ctx->literals[4 * inst->TexOffsets[0].Index + 
inst->TexOffsets[0].SwizzleX] << 1;
+               offset_y = ctx->literals[4 * inst->TexOffsets[0].Index + 
inst->TexOffsets[0].SwizzleY] << 1;
+               offset_z = ctx->literals[4 * inst->TexOffsets[0].Index + 
inst->TexOffsets[0].SwizzleZ] << 1;
+       }
+
+       if (inst->Instruction.Opcode == TGSI_OPCODE_TXD) {
                /* TGSI moves the sampler to src reg 3 for TXD */
                sampler_src_reg = 3;
 
-- 
1.8.1.2

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to