[Mesa-dev] [RFCv2 11/13] freedreno/ir3: handle tex instrs w/ const offset

Rob Clark robdclark at gmail.com
Sun Nov 8 12:12:32 PST 2015


From: Rob Clark <robclark at freedesktop.org>

---
 src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
index 2320464..e77afcc 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
@@ -1514,6 +1514,7 @@ emit_tex(struct ir3_compile *ctx, nir_tex_instr *tex)
 	struct ir3_block *b = ctx->block;
 	struct ir3_instruction **dst, *sam, *src0[12], *src1[4];
 	struct ir3_instruction **coord, *lod, *compare, *proj, **off, **ddx, **ddy;
+	struct ir3_instruction *const_off[4];
 	bool has_bias = false, has_lod = false, has_proj = false, has_off = false;
 	unsigned i, coords, flags;
 	unsigned nsrc0 = 0, nsrc1 = 0;
@@ -1581,6 +1582,21 @@ emit_tex(struct ir3_compile *ctx, nir_tex_instr *tex)
 
 	tex_info(tex, &flags, &coords);
 
+	if (!has_off) {
+		/* could still have a constant offset: */
+		if (tex->const_offset[0] || tex->const_offset[1] ||
+				tex->const_offset[2] || tex->const_offset[3]) {
+			off = const_off;
+
+			off[0] = create_immed(b, tex->const_offset[0]);
+			off[1] = create_immed(b, tex->const_offset[1]);
+			off[2] = create_immed(b, tex->const_offset[2]);
+			off[3] = create_immed(b, tex->const_offset[3]);
+
+			has_off = true;
+		}
+	}
+
 	/* scale up integer coords for TXF based on the LOD */
 	if (ctx->unminify_coords && (opc == OPC_ISAML)) {
 		assert(has_lod);
-- 
2.5.0



More information about the mesa-dev mailing list