Mesa (master): radeonsi: fix textureOffset and texelFetchOffset GLSL functions

Marek Olšák mareko at kemper.freedesktop.org
Sat Sep 21 00:12:13 UTC 2013


Module: Mesa
Branch: master
Commit: defedc0f6195f57abf2553e77b7a3b61e23cf53e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=defedc0f6195f57abf2553e77b7a3b61e23cf53e

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Wed Sep 18 15:36:38 2013 +0200

radeonsi: fix textureOffset and texelFetchOffset GLSL functions

Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>

---

 src/gallium/drivers/radeonsi/radeonsi_shader.c |   32 +++++++++++++++++------
 1 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c
index 867a385..7e3ac5a 100644
--- a/src/gallium/drivers/radeonsi/radeonsi_shader.c
+++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c
@@ -1353,17 +1353,31 @@ static void tex_fetch_args(
 
 			assert(inst->Texture.NumOffsets == 1);
 
-			address[0] =
-				lp_build_add(uint_bld, address[0],
-					     bld->immediates[off->Index][off->SwizzleX]);
-			if (num_coords > 1)
+			switch (target) {
+			case TGSI_TEXTURE_3D:
+				address[2] = lp_build_add(uint_bld, address[2],
+						bld->immediates[off->Index][off->SwizzleZ]);
+				/* fall through */
+			case TGSI_TEXTURE_2D:
+			case TGSI_TEXTURE_SHADOW2D:
+			case TGSI_TEXTURE_RECT:
+			case TGSI_TEXTURE_SHADOWRECT:
+			case TGSI_TEXTURE_2D_ARRAY:
+			case TGSI_TEXTURE_SHADOW2D_ARRAY:
 				address[1] =
 					lp_build_add(uint_bld, address[1],
-						     bld->immediates[off->Index][off->SwizzleY]);
-			if (num_coords > 2)
-				address[2] =
-					lp_build_add(uint_bld, address[2],
-						     bld->immediates[off->Index][off->SwizzleZ]);
+						bld->immediates[off->Index][off->SwizzleY]);
+				/* fall through */
+			case TGSI_TEXTURE_1D:
+			case TGSI_TEXTURE_SHADOW1D:
+			case TGSI_TEXTURE_1D_ARRAY:
+			case TGSI_TEXTURE_SHADOW1D_ARRAY:
+				address[0] =
+					lp_build_add(uint_bld, address[0],
+						bld->immediates[off->Index][off->SwizzleX]);
+				break;
+				/* texture offsets do not apply to other texture targets */
+			}
 		}
 
 		emit_data->dst_type = LLVMVectorType(




More information about the mesa-commit mailing list