[Freedreno] [PATCH 2/3] freedreno/ir3: fix TXB/TXL to actually pull the bias/lod argument

Ilia Mirkin imirkin at alum.mit.edu
Mon Sep 15 23:09:49 PDT 2014


Previously we would get a potentially computed post-swizzle coord based
on the texture target info, which would not include the bias/lod in the
last argument.

The second argument does not have to be adjacent, so adjusting the order
array did not make sense.

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
---

Happened to notice this when playing with the compiler -- the lod argument was
getting the .x instead of .w, and this is why. Even if you don't like my tex
refactor, this is still an issue.

 src/gallium/drivers/freedreno/ir3/ir3_compiler.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/freedreno/ir3/ir3_compiler.c b/src/gallium/drivers/freedreno/ir3/ir3_compiler.c
index 2ceabbf..ab7523f 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_compiler.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_compiler.c
@@ -1254,6 +1254,7 @@ trans_samp(const struct instr_translater *t,
 {
 	struct ir3_instruction *instr;
 	struct tgsi_dst_register *dst = &inst->Dst[0].Register;
+	struct tgsi_src_register *orig = &inst->Src[0].Register;
 	struct tgsi_src_register *coord;
 	struct tgsi_src_register *samp  = &inst->Src[1].Register;
 	struct tex_info tinf;
@@ -1261,6 +1262,8 @@ trans_samp(const struct instr_translater *t,
 	memset(&tinf, 0, sizeof(tinf));
 	fill_tex_info(ctx, inst, &tinf);
 	coord = get_tex_coord(ctx, inst, &tinf);
+	if (tinf.args > 1 && is_rel_or_const(orig))
+		orig = get_unconst(ctx, orig);
 
 	instr = instr_create(ctx, 5, t->opc);
 	instr->cat5.type = get_ftype(ctx);
@@ -1272,7 +1275,7 @@ trans_samp(const struct instr_translater *t,
 	add_src_reg_wrmask(ctx, instr, coord, coord->SwizzleX, tinf.src_wrmask);
 
 	if (tinf.args > 1)
-		add_src_reg_wrmask(ctx, instr, coord, coord->SwizzleW, 0x1);
+		add_src_reg_wrmask(ctx, instr, orig, orig->SwizzleW, 0x1);
 }
 
 /* DDX/DDY */
-- 
1.8.5.5



More information about the Freedreno mailing list