broadcom/compiler: Add a v3d_compile argument to vir_set_[pu]f

Reviewed-by: Iago Toral Quioroga <itoral@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8933>
This commit is contained in:
Arcady Goldmints-Orlov
2021-02-08 16:41:35 -05:00
committed by Marge Bot
parent c78b372dd0
commit 8762f29e9c
4 changed files with 51 additions and 51 deletions

View File

@@ -408,7 +408,7 @@ emit_tmu_general_address_write(struct v3d_compile *c,
} }
if (vir_in_nonuniform_control_flow(c)) { if (vir_in_nonuniform_control_flow(c)) {
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
} }
@@ -725,7 +725,7 @@ ntq_store_dest(struct v3d_compile *c, nir_dest *dest, int chan,
/* Set the flags to the current exec mask. /* Set the flags to the current exec mask.
*/ */
c->cursor = vir_before_inst(last_inst); c->cursor = vir_before_inst(last_inst);
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
c->cursor = vir_after_inst(last_inst); c->cursor = vir_after_inst(last_inst);
@@ -894,9 +894,9 @@ ntq_fsign(struct v3d_compile *c, struct qreg src)
struct qreg t = vir_get_temp(c); struct qreg t = vir_get_temp(c);
vir_MOV_dest(c, t, vir_uniform_f(c, 0.0)); vir_MOV_dest(c, t, vir_uniform_f(c, 0.0));
vir_set_pf(vir_FMOV_dest(c, vir_nop_reg(), src), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_FMOV_dest(c, vir_nop_reg(), src), V3D_QPU_PF_PUSHZ);
vir_MOV_cond(c, V3D_QPU_COND_IFNA, t, vir_uniform_f(c, 1.0)); vir_MOV_cond(c, V3D_QPU_COND_IFNA, t, vir_uniform_f(c, 1.0));
vir_set_pf(vir_FMOV_dest(c, vir_nop_reg(), src), V3D_QPU_PF_PUSHN); vir_set_pf(c, vir_FMOV_dest(c, vir_nop_reg(), src), V3D_QPU_PF_PUSHN);
vir_MOV_cond(c, V3D_QPU_COND_IFA, t, vir_uniform_f(c, -1.0)); vir_MOV_cond(c, V3D_QPU_COND_IFA, t, vir_uniform_f(c, -1.0));
return vir_MOV(c, t); return vir_MOV(c, t);
} }
@@ -1050,53 +1050,53 @@ ntq_emit_comparison(struct v3d_compile *c,
switch (compare_instr->op) { switch (compare_instr->op) {
case nir_op_feq32: case nir_op_feq32:
case nir_op_seq: case nir_op_seq:
vir_set_pf(vir_FCMP_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_FCMP_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHZ);
break; break;
case nir_op_ieq32: case nir_op_ieq32:
vir_set_pf(vir_XOR_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_XOR_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHZ);
break; break;
case nir_op_fneu32: case nir_op_fneu32:
case nir_op_sne: case nir_op_sne:
vir_set_pf(vir_FCMP_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_FCMP_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHZ);
cond_invert = true; cond_invert = true;
break; break;
case nir_op_ine32: case nir_op_ine32:
vir_set_pf(vir_XOR_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_XOR_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHZ);
cond_invert = true; cond_invert = true;
break; break;
case nir_op_fge32: case nir_op_fge32:
case nir_op_sge: case nir_op_sge:
vir_set_pf(vir_FCMP_dest(c, nop, src1, src0), V3D_QPU_PF_PUSHC); vir_set_pf(c, vir_FCMP_dest(c, nop, src1, src0), V3D_QPU_PF_PUSHC);
break; break;
case nir_op_ige32: case nir_op_ige32:
vir_set_pf(vir_MIN_dest(c, nop, src1, src0), V3D_QPU_PF_PUSHC); vir_set_pf(c, vir_MIN_dest(c, nop, src1, src0), V3D_QPU_PF_PUSHC);
cond_invert = true; cond_invert = true;
break; break;
case nir_op_uge32: case nir_op_uge32:
vir_set_pf(vir_SUB_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHC); vir_set_pf(c, vir_SUB_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHC);
cond_invert = true; cond_invert = true;
break; break;
case nir_op_slt: case nir_op_slt:
case nir_op_flt32: case nir_op_flt32:
vir_set_pf(vir_FCMP_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHN); vir_set_pf(c, vir_FCMP_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHN);
break; break;
case nir_op_ilt32: case nir_op_ilt32:
vir_set_pf(vir_MIN_dest(c, nop, src1, src0), V3D_QPU_PF_PUSHC); vir_set_pf(c, vir_MIN_dest(c, nop, src1, src0), V3D_QPU_PF_PUSHC);
break; break;
case nir_op_ult32: case nir_op_ult32:
vir_set_pf(vir_SUB_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHC); vir_set_pf(c, vir_SUB_dest(c, nop, src0, src1), V3D_QPU_PF_PUSHC);
break; break;
case nir_op_i2b32: case nir_op_i2b32:
vir_set_pf(vir_MOV_dest(c, nop, src0), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, nop, src0), V3D_QPU_PF_PUSHZ);
cond_invert = true; cond_invert = true;
break; break;
case nir_op_f2b32: case nir_op_f2b32:
vir_set_pf(vir_FMOV_dest(c, nop, src0), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_FMOV_dest(c, nop, src0), V3D_QPU_PF_PUSHZ);
cond_invert = true; cond_invert = true;
break; break;
@@ -1146,7 +1146,7 @@ ntq_emit_bool_to_cond(struct v3d_compile *c, nir_src src)
return cond; return cond;
out: out:
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), ntq_get_src(c, src, 0)), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), ntq_get_src(c, src, 0)),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
return V3D_QPU_COND_IFNA; return V3D_QPU_COND_IFNA;
} }
@@ -1326,7 +1326,7 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr)
break; break;
case nir_op_fcsel: case nir_op_fcsel:
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), src[0]), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), src[0]),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
result = vir_MOV(c, vir_SEL(c, V3D_QPU_COND_IFNA, result = vir_MOV(c, vir_SEL(c, V3D_QPU_COND_IFNA,
src[1], src[2])); src[1], src[2]));
@@ -1392,7 +1392,7 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr)
break; break;
case nir_op_uadd_carry: case nir_op_uadd_carry:
vir_set_pf(vir_ADD_dest(c, vir_nop_reg(), src[0], src[1]), vir_set_pf(c, vir_ADD_dest(c, vir_nop_reg(), src[0], src[1]),
V3D_QPU_PF_PUSHC); V3D_QPU_PF_PUSHC);
result = vir_MOV(c, vir_SEL(c, V3D_QPU_COND_IFA, result = vir_MOV(c, vir_SEL(c, V3D_QPU_COND_IFA,
vir_uniform_ui(c, ~0), vir_uniform_ui(c, ~0),
@@ -1424,7 +1424,7 @@ ntq_emit_alu(struct v3d_compile *c, nir_alu_instr *instr)
struct qreg abs_src = vir_FMOV(c, src[0]); struct qreg abs_src = vir_FMOV(c, src[0]);
vir_set_unpack(c->defs[abs_src.index], 0, V3D_QPU_UNPACK_ABS); vir_set_unpack(c->defs[abs_src.index], 0, V3D_QPU_UNPACK_ABS);
struct qreg threshold = vir_uniform_f(c, ldexpf(1.0, -14)); struct qreg threshold = vir_uniform_f(c, ldexpf(1.0, -14));
vir_set_pf(vir_FCMP_dest(c, vir_nop_reg(), abs_src, threshold), vir_set_pf(c, vir_FCMP_dest(c, vir_nop_reg(), abs_src, threshold),
V3D_QPU_PF_PUSHC); V3D_QPU_PF_PUSHC);
/* Return +/-0 for denorms */ /* Return +/-0 for denorms */
@@ -2360,7 +2360,7 @@ emit_store_output_gs(struct v3d_compile *c, nir_intrinsic_instr *instr)
* is not true for GS, where we are emitting multiple vertices. * is not true for GS, where we are emitting multiple vertices.
*/ */
if (vir_in_nonuniform_control_flow(c)) { if (vir_in_nonuniform_control_flow(c)) {
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
} }
@@ -2428,7 +2428,7 @@ ntq_get_sample_offset(struct v3d_compile *c, struct qreg sample_idx,
vir_FADD(c, vir_uniform_f(c, -0.125f), vir_FADD(c, vir_uniform_f(c, -0.125f),
vir_FMUL(c, sample_idx, vir_FMUL(c, sample_idx,
vir_uniform_f(c, 0.5f))); vir_uniform_f(c, 0.5f)));
vir_set_pf(vir_FCMP_dest(c, vir_nop_reg(), vir_set_pf(c, vir_FCMP_dest(c, vir_nop_reg(),
vir_uniform_f(c, 2.0f), sample_idx), vir_uniform_f(c, 2.0f), sample_idx),
V3D_QPU_PF_PUSHC); V3D_QPU_PF_PUSHC);
offset_x = vir_SEL(c, V3D_QPU_COND_IFA, offset_x = vir_SEL(c, V3D_QPU_COND_IFA,
@@ -2468,25 +2468,25 @@ ntq_get_barycentric_centroid(struct v3d_compile *c,
struct qreg F = vir_uniform_ui(c, 0); struct qreg F = vir_uniform_ui(c, 0);
struct qreg T = vir_uniform_ui(c, ~0); struct qreg T = vir_uniform_ui(c, ~0);
struct qreg s0 = vir_XOR(c, vir_AND(c, sample_mask, i1), i1); struct qreg s0 = vir_XOR(c, vir_AND(c, sample_mask, i1), i1);
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), s0), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), s0), V3D_QPU_PF_PUSHZ);
s0 = vir_SEL(c, V3D_QPU_COND_IFA, T, F); s0 = vir_SEL(c, V3D_QPU_COND_IFA, T, F);
struct qreg s1 = vir_XOR(c, vir_AND(c, sample_mask, i2), i2); struct qreg s1 = vir_XOR(c, vir_AND(c, sample_mask, i2), i2);
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), s1), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), s1), V3D_QPU_PF_PUSHZ);
s1 = vir_SEL(c, V3D_QPU_COND_IFA, T, F); s1 = vir_SEL(c, V3D_QPU_COND_IFA, T, F);
struct qreg s2 = vir_XOR(c, vir_AND(c, sample_mask, i4), i4); struct qreg s2 = vir_XOR(c, vir_AND(c, sample_mask, i4), i4);
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), s2), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), s2), V3D_QPU_PF_PUSHZ);
s2 = vir_SEL(c, V3D_QPU_COND_IFA, T, F); s2 = vir_SEL(c, V3D_QPU_COND_IFA, T, F);
struct qreg s3 = vir_XOR(c, vir_AND(c, sample_mask, i8), i8); struct qreg s3 = vir_XOR(c, vir_AND(c, sample_mask, i8), i8);
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), s3), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), s3), V3D_QPU_PF_PUSHZ);
s3 = vir_SEL(c, V3D_QPU_COND_IFA, T, F); s3 = vir_SEL(c, V3D_QPU_COND_IFA, T, F);
/* sample_idx = s0 ? 0 : s2 ? 2 : s1 ? 1 : 3 */ /* sample_idx = s0 ? 0 : s2 ? 2 : s1 ? 1 : 3 */
struct qreg sample_idx = i3; struct qreg sample_idx = i3;
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), s1), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), s1), V3D_QPU_PF_PUSHZ);
sample_idx = vir_SEL(c, V3D_QPU_COND_IFNA, i1, sample_idx); sample_idx = vir_SEL(c, V3D_QPU_COND_IFNA, i1, sample_idx);
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), s2), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), s2), V3D_QPU_PF_PUSHZ);
sample_idx = vir_SEL(c, V3D_QPU_COND_IFNA, i2, sample_idx); sample_idx = vir_SEL(c, V3D_QPU_COND_IFNA, i2, sample_idx);
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), s0), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), s0), V3D_QPU_PF_PUSHZ);
sample_idx = vir_SEL(c, V3D_QPU_COND_IFNA, i0, sample_idx); sample_idx = vir_SEL(c, V3D_QPU_COND_IFNA, i0, sample_idx);
/* Get offset at selected sample index */ /* Get offset at selected sample index */
@@ -2500,13 +2500,13 @@ ntq_get_barycentric_centroid(struct v3d_compile *c,
struct qreg s1_and_s2 = vir_AND(c, s1, s2); struct qreg s1_and_s2 = vir_AND(c, s1, s2);
struct qreg use_center = vir_XOR(c, sample_mask, vir_uniform_ui(c, 0)); struct qreg use_center = vir_XOR(c, sample_mask, vir_uniform_ui(c, 0));
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), use_center), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), use_center), V3D_QPU_PF_PUSHZ);
use_center = vir_SEL(c, V3D_QPU_COND_IFA, T, F); use_center = vir_SEL(c, V3D_QPU_COND_IFA, T, F);
use_center = vir_OR(c, use_center, s0_and_s3); use_center = vir_OR(c, use_center, s0_and_s3);
use_center = vir_OR(c, use_center, s1_and_s2); use_center = vir_OR(c, use_center, s1_and_s2);
struct qreg zero = vir_uniform_f(c, 0.0f); struct qreg zero = vir_uniform_f(c, 0.0f);
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), use_center), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), use_center), V3D_QPU_PF_PUSHZ);
offset_x = vir_SEL(c, V3D_QPU_COND_IFNA, zero, offset_x); offset_x = vir_SEL(c, V3D_QPU_COND_IFNA, zero, offset_x);
offset_y = vir_SEL(c, V3D_QPU_COND_IFNA, zero, offset_y); offset_y = vir_SEL(c, V3D_QPU_COND_IFNA, zero, offset_y);
@@ -2671,7 +2671,7 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr)
break; break;
case nir_intrinsic_load_helper_invocation: case nir_intrinsic_load_helper_invocation:
vir_set_pf(vir_MSF_dest(c, vir_nop_reg()), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MSF_dest(c, vir_nop_reg()), V3D_QPU_PF_PUSHZ);
ntq_store_dest(c, &instr->dest, 0, ntq_store_dest(c, &instr->dest, 0,
vir_MOV(c, vir_SEL(c, V3D_QPU_COND_IFA, vir_MOV(c, vir_SEL(c, V3D_QPU_COND_IFA,
vir_uniform_ui(c, ~0), vir_uniform_ui(c, ~0),
@@ -2724,7 +2724,7 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr)
ntq_flush_tmu(c); ntq_flush_tmu(c);
if (vir_in_nonuniform_control_flow(c)) { if (vir_in_nonuniform_control_flow(c)) {
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
vir_set_cond(vir_SETMSF_dest(c, vir_nop_reg(), vir_set_cond(vir_SETMSF_dest(c, vir_nop_reg(),
vir_uniform_ui(c, 0)), vir_uniform_ui(c, 0)),
@@ -2744,9 +2744,9 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr)
struct qinst *exec_flag = vir_MOV_dest(c, vir_nop_reg(), struct qinst *exec_flag = vir_MOV_dest(c, vir_nop_reg(),
c->execute); c->execute);
if (cond == V3D_QPU_COND_IFA) { if (cond == V3D_QPU_COND_IFA) {
vir_set_uf(exec_flag, V3D_QPU_UF_ANDZ); vir_set_uf(c, exec_flag, V3D_QPU_UF_ANDZ);
} else { } else {
vir_set_uf(exec_flag, V3D_QPU_UF_NORNZ); vir_set_uf(c, exec_flag, V3D_QPU_UF_NORNZ);
cond = V3D_QPU_COND_IFA; cond = V3D_QPU_COND_IFA;
} }
} }
@@ -2984,7 +2984,7 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr)
static void static void
ntq_activate_execute_for_block(struct v3d_compile *c) ntq_activate_execute_for_block(struct v3d_compile *c)
{ {
vir_set_pf(vir_XOR_dest(c, vir_nop_reg(), vir_set_pf(c, vir_XOR_dest(c, vir_nop_reg(),
c->execute, vir_uniform_ui(c, c->cur_block->index)), c->execute, vir_uniform_ui(c, c->cur_block->index)),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
@@ -3078,9 +3078,9 @@ ntq_emit_nonuniform_if(struct v3d_compile *c, nir_if *if_stmt)
} else { } else {
struct qinst *inst = vir_MOV_dest(c, vir_nop_reg(), c->execute); struct qinst *inst = vir_MOV_dest(c, vir_nop_reg(), c->execute);
if (cond == V3D_QPU_COND_IFA) { if (cond == V3D_QPU_COND_IFA) {
vir_set_uf(inst, V3D_QPU_UF_NORNZ); vir_set_uf(c, inst, V3D_QPU_UF_NORNZ);
} else { } else {
vir_set_uf(inst, V3D_QPU_UF_ANDZ); vir_set_uf(c, inst, V3D_QPU_UF_ANDZ);
cond = V3D_QPU_COND_IFA; cond = V3D_QPU_COND_IFA;
} }
} }
@@ -3092,7 +3092,7 @@ ntq_emit_nonuniform_if(struct v3d_compile *c, nir_if *if_stmt)
/* Jump to ELSE if nothing is active for THEN, otherwise fall /* Jump to ELSE if nothing is active for THEN, otherwise fall
* through. * through.
*/ */
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute), V3D_QPU_PF_PUSHZ);
vir_BRANCH(c, V3D_QPU_BRANCH_COND_ALLNA); vir_BRANCH(c, V3D_QPU_BRANCH_COND_ALLNA);
vir_link_blocks(c->cur_block, else_block); vir_link_blocks(c->cur_block, else_block);
vir_link_blocks(c->cur_block, then_block); vir_link_blocks(c->cur_block, then_block);
@@ -3106,13 +3106,13 @@ ntq_emit_nonuniform_if(struct v3d_compile *c, nir_if *if_stmt)
* active channels update their execute flags to point to * active channels update their execute flags to point to
* ENDIF * ENDIF
*/ */
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
vir_MOV_cond(c, V3D_QPU_COND_IFA, c->execute, vir_MOV_cond(c, V3D_QPU_COND_IFA, c->execute,
vir_uniform_ui(c, after_block->index)); vir_uniform_ui(c, after_block->index));
/* If everything points at ENDIF, then jump there immediately. */ /* If everything points at ENDIF, then jump there immediately. */
vir_set_pf(vir_XOR_dest(c, vir_nop_reg(), vir_set_pf(c, vir_XOR_dest(c, vir_nop_reg(),
c->execute, c->execute,
vir_uniform_ui(c, after_block->index)), vir_uniform_ui(c, after_block->index)),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
@@ -3153,14 +3153,14 @@ ntq_emit_jump(struct v3d_compile *c, nir_jump_instr *jump)
{ {
switch (jump->type) { switch (jump->type) {
case nir_jump_break: case nir_jump_break:
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
vir_MOV_cond(c, V3D_QPU_COND_IFA, c->execute, vir_MOV_cond(c, V3D_QPU_COND_IFA, c->execute,
vir_uniform_ui(c, c->loop_break_block->index)); vir_uniform_ui(c, c->loop_break_block->index));
break; break;
case nir_jump_continue: case nir_jump_continue:
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
vir_MOV_cond(c, V3D_QPU_COND_IFA, c->execute, vir_MOV_cond(c, V3D_QPU_COND_IFA, c->execute,
vir_uniform_ui(c, c->loop_cont_block->index)); vir_uniform_ui(c, c->loop_cont_block->index));
@@ -3284,14 +3284,14 @@ ntq_emit_nonuniform_loop(struct v3d_compile *c, nir_loop *loop)
* *
* XXX: Use the .ORZ flags update, instead. * XXX: Use the .ORZ flags update, instead.
*/ */
vir_set_pf(vir_XOR_dest(c, vir_set_pf(c, vir_XOR_dest(c,
vir_nop_reg(), vir_nop_reg(),
c->execute, c->execute,
vir_uniform_ui(c, c->loop_cont_block->index)), vir_uniform_ui(c, c->loop_cont_block->index)),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
vir_MOV_cond(c, V3D_QPU_COND_IFA, c->execute, vir_uniform_ui(c, 0)); vir_MOV_cond(c, V3D_QPU_COND_IFA, c->execute, vir_uniform_ui(c, 0));
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), V3D_QPU_PF_PUSHZ); vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute), V3D_QPU_PF_PUSHZ);
struct qinst *branch = vir_BRANCH(c, V3D_QPU_BRANCH_COND_ANYA); struct qinst *branch = vir_BRANCH(c, V3D_QPU_BRANCH_COND_ANYA);
/* Pixels that were not dispatched or have been discarded should not /* Pixels that were not dispatched or have been discarded should not

View File

@@ -490,8 +490,8 @@ vir_image_emit_register_writes(struct v3d_compile *c,
struct qreg src_1_0 = ntq_get_src(c, instr->src[1], 0); struct qreg src_1_0 = ntq_get_src(c, instr->src[1], 0);
if (!tmu_writes && vir_in_nonuniform_control_flow(c) && if (!tmu_writes && vir_in_nonuniform_control_flow(c) &&
instr->intrinsic != nir_intrinsic_image_load) { instr->intrinsic != nir_intrinsic_image_load) {
vir_set_pf(vir_MOV_dest(c, vir_nop_reg(), c->execute), vir_set_pf(c, vir_MOV_dest(c, vir_nop_reg(), c->execute),
V3D_QPU_PF_PUSHZ); V3D_QPU_PF_PUSHZ);
} }
vir_TMU_WRITE_or_count(c, V3D_QPU_WADDR_TMUSF, src_1_0, tmu_writes); vir_TMU_WRITE_or_count(c, V3D_QPU_WADDR_TMUSF, src_1_0, tmu_writes);

View File

@@ -929,8 +929,8 @@ struct v3d_qpu_instr v3d_qpu_nop(void);
struct qreg vir_emit_def(struct v3d_compile *c, struct qinst *inst); struct qreg vir_emit_def(struct v3d_compile *c, struct qinst *inst);
struct qinst *vir_emit_nondef(struct v3d_compile *c, struct qinst *inst); struct qinst *vir_emit_nondef(struct v3d_compile *c, struct qinst *inst);
void vir_set_cond(struct qinst *inst, enum v3d_qpu_cond cond); void vir_set_cond(struct qinst *inst, enum v3d_qpu_cond cond);
void vir_set_pf(struct qinst *inst, enum v3d_qpu_pf pf); void vir_set_pf(struct v3d_compile *c, struct qinst *inst, enum v3d_qpu_pf pf);
void vir_set_uf(struct qinst *inst, enum v3d_qpu_uf uf); void vir_set_uf(struct v3d_compile *c, struct qinst *inst, enum v3d_qpu_uf uf);
void vir_set_unpack(struct qinst *inst, int src, void vir_set_unpack(struct qinst *inst, int src,
enum v3d_qpu_input_unpack unpack); enum v3d_qpu_input_unpack unpack);
void vir_set_pack(struct qinst *inst, enum v3d_qpu_output_pack pack); void vir_set_pack(struct qinst *inst, enum v3d_qpu_output_pack pack);

View File

@@ -232,7 +232,7 @@ vir_set_cond(struct qinst *inst, enum v3d_qpu_cond cond)
} }
void void
vir_set_pf(struct qinst *inst, enum v3d_qpu_pf pf) vir_set_pf(struct v3d_compile *c, struct qinst *inst, enum v3d_qpu_pf pf)
{ {
if (vir_is_add(inst)) { if (vir_is_add(inst)) {
inst->qpu.flags.apf = pf; inst->qpu.flags.apf = pf;
@@ -243,7 +243,7 @@ vir_set_pf(struct qinst *inst, enum v3d_qpu_pf pf)
} }
void void
vir_set_uf(struct qinst *inst, enum v3d_qpu_uf uf) vir_set_uf(struct v3d_compile *c, struct qinst *inst, enum v3d_qpu_uf uf)
{ {
if (vir_is_add(inst)) { if (vir_is_add(inst)) {
inst->qpu.flags.auf = uf; inst->qpu.flags.auf = uf;