Mesa (master): radeonsi: fix texture fetches with derivatives for 1DArray and 3D textures

Marek Olšák mareko at kemper.freedesktop.org
Fri Jul 11 17:36:48 UTC 2014


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Wed Jul  2 03:55:47 2014 +0200

radeonsi: fix texture fetches with derivatives for 1DArray and 3D textures

---

 src/gallium/drivers/radeonsi/si_shader.c |   34 ++++++++++++++++++++++++++----
 1 file changed, 30 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 7bff8f9..ed09efe 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1652,11 +1652,37 @@ static void tex_fetch_args(
 
 	/* Pack user derivatives */
 	if (opcode == TGSI_OPCODE_TXD) {
-		for (chan = 0; chan < 2; chan++) {
-			address[count++] = lp_build_emit_fetch(bld_base, inst, 1, chan);
-			if (num_coords > 1)
-				address[count++] = lp_build_emit_fetch(bld_base, inst, 2, chan);
+		int num_deriv_channels, param;
+
+		switch (target) {
+		case TGSI_TEXTURE_3D:
+			num_deriv_channels = 3;
+			break;
+		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:
+		case TGSI_TEXTURE_CUBE:
+		case TGSI_TEXTURE_SHADOWCUBE:
+		case TGSI_TEXTURE_CUBE_ARRAY:
+		case TGSI_TEXTURE_SHADOWCUBE_ARRAY:
+			num_deriv_channels = 2;
+			break;
+		case TGSI_TEXTURE_1D:
+		case TGSI_TEXTURE_SHADOW1D:
+		case TGSI_TEXTURE_1D_ARRAY:
+		case TGSI_TEXTURE_SHADOW1D_ARRAY:
+			num_deriv_channels = 1;
+			break;
+		default:
+			assert(0); /* no other targets are valid here */
 		}
+
+		for (param = 1; param <= 2; param++)
+			for (chan = 0; chan < num_deriv_channels; chan++)
+				address[count++] = lp_build_emit_fetch(bld_base, inst, param, chan);
 	}
 
 	/* Pack texture coordinates */




More information about the mesa-commit mailing list