summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <[email protected]>2013-10-03 00:12:55 +0200
committerMarek Olšák <[email protected]>2013-10-04 22:44:47 +0200
commit8419c5c3ce1489222268bf840c1d165ea8bc53ce (patch)
tree24a8e529dc80ef949e52446e4fba738fcde1983e
parentc04b8d1daba5468a7ea991a65570a41951e2da7d (diff)
r600g: texture offsets for non-TXF instructions
All texture instructions can use offsets, not just TXF. Offsets into the literals array were wrong, too. Signed-off-by: Marek Olšák <[email protected]>
-rw-r--r--src/gallium/drivers/r600/r600_shader.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 206db04f2b6..d17d6707c63 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -3782,16 +3782,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;