Mesa (master): st/mesa: translate ir offset parameters for non-TXF opcodes.
Roland Scheidegger
sroland at kemper.freedesktop.org
Tue Mar 5 19:12:11 UTC 2013
Module: Mesa
Branch: master
Commit: be6d18ba5e90422fc794ef644eb235e138604d12
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=be6d18ba5e90422fc794ef644eb235e138604d12
Author: Roland Scheidegger <sroland at vmware.com>
Date: Tue Mar 5 02:02:13 2013 +0100
st/mesa: translate ir offset parameters for non-TXF opcodes.
Otherwise the state tracker will crash if the texture instructions
have offsets.
Reviewed-by: Brian Paul <brianp at vmware.com>
---
src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 20 ++++++++++++++++++--
1 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index c41b583..131ecb2 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -2714,16 +2714,28 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
switch (ir->op) {
case ir_tex:
opcode = (is_cube_array && ir->shadow_comparitor) ? TGSI_OPCODE_TEX2 : TGSI_OPCODE_TEX;
+ if (ir->offset) {
+ ir->offset->accept(this);
+ offset = this->result;
+ }
break;
case ir_txb:
opcode = is_cube_array ? TGSI_OPCODE_TXB2 : TGSI_OPCODE_TXB;
ir->lod_info.bias->accept(this);
lod_info = this->result;
+ if (ir->offset) {
+ ir->offset->accept(this);
+ offset = this->result;
+ }
break;
case ir_txl:
opcode = is_cube_array ? TGSI_OPCODE_TXL2 : TGSI_OPCODE_TXL;
ir->lod_info.lod->accept(this);
lod_info = this->result;
+ if (ir->offset) {
+ ir->offset->accept(this);
+ offset = this->result;
+ }
break;
case ir_txd:
opcode = TGSI_OPCODE_TXD;
@@ -2731,6 +2743,10 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
dx = this->result;
ir->lod_info.grad.dPdy->accept(this);
dy = this->result;
+ if (ir->offset) {
+ ir->offset->accept(this);
+ offset = this->result;
+ }
break;
case ir_txs:
opcode = TGSI_OPCODE_TXQ;
@@ -2742,8 +2758,8 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
ir->lod_info.lod->accept(this);
lod_info = this->result;
if (ir->offset) {
- ir->offset->accept(this);
- offset = this->result;
+ ir->offset->accept(this);
+ offset = this->result;
}
break;
case ir_txf_ms:
More information about the mesa-commit
mailing list