summaryrefslogtreecommitdiffstats
path: root/src/freedreno/ir3/ir3.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/freedreno/ir3/ir3.c')
-rw-r--r--src/freedreno/ir3/ir3.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/freedreno/ir3/ir3.c b/src/freedreno/ir3/ir3.c
index ee13291fb87..9169d2c15f3 100644
--- a/src/freedreno/ir3/ir3.c
+++ b/src/freedreno/ir3/ir3.c
@@ -446,15 +446,17 @@ static int emit_cat5(struct ir3_instruction *instr, void *ptr,
struct ir3_info *info)
{
struct ir3_register *dst = instr->regs[0];
- struct ir3_register *src1 = instr->regs[1];
- struct ir3_register *src2 = instr->regs[2];
- struct ir3_register *src3 = instr->regs[3];
+ /* To simplify things when there could be zero, one, or two args other
+ * than tex/sampler idx, we use the first src reg in the ir to hold
+ * samp_tex hvec2:
+ */
+ struct ir3_register *src1 = instr->regs[2];
+ struct ir3_register *src2 = instr->regs[3];
instr_cat5_t *cat5 = ptr;
iassert_type(dst, type_size(instr->cat5.type) == 32)
assume(src1 || !src2);
- assume(src2 || !src3);
if (src1) {
cat5->full = ! (src1->flags & IR3_REG_HALF);
@@ -462,17 +464,15 @@ static int emit_cat5(struct ir3_instruction *instr, void *ptr,
}
if (instr->flags & IR3_INSTR_S2EN) {
+ struct ir3_register *samp_tex = instr->regs[1];
if (src2) {
iassert(!((src1->flags ^ src2->flags) & IR3_REG_HALF));
cat5->s2en.src2 = reg(src2, info, instr->repeat, IR3_REG_HALF);
}
- if (src3) {
- iassert(src3->flags & IR3_REG_HALF);
- cat5->s2en.src3 = reg(src3, info, instr->repeat, IR3_REG_HALF);
- }
+ iassert(samp_tex->flags & IR3_REG_HALF);
+ cat5->s2en.src3 = reg(samp_tex, info, instr->repeat, IR3_REG_HALF);
iassert(!(instr->cat5.samp | instr->cat5.tex));
} else {
- iassert(!src3);
if (src2) {
iassert(!((src1->flags ^ src2->flags) & IR3_REG_HALF));
cat5->norm.src2 = reg(src2, info, instr->repeat, IR3_REG_HALF);