mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
vc4: Validate QPU uniform pointer updates.
This commit is contained in:
parent
420845acb2
commit
93794145dd
1 changed files with 22 additions and 0 deletions
|
|
@ -308,4 +308,26 @@ vc4_qpu_validate(uint64_t *insts, uint32_t num_inst)
|
|||
if (qpu_num_sf_accesses(inst) > 1)
|
||||
fail_instr(inst, "Single instruction writes SFU twice");
|
||||
}
|
||||
|
||||
/* "The uniform base pointer can be written (from SIMD element 0) by
|
||||
* the processor to reset the stream, there must be at least two
|
||||
* nonuniform-accessing instructions following a pointer change
|
||||
* before uniforms can be accessed once more."
|
||||
*/
|
||||
int last_unif_pointer_update = -3;
|
||||
for (int i = 0; i < num_inst; i++) {
|
||||
uint64_t inst = insts[i];
|
||||
uint32_t waddr_add = QPU_GET_FIELD(inst, QPU_WADDR_ADD);
|
||||
uint32_t waddr_mul = QPU_GET_FIELD(inst, QPU_WADDR_MUL);
|
||||
|
||||
if (reads_reg(inst, QPU_R_UNIF) &&
|
||||
i - last_unif_pointer_update <= 2) {
|
||||
fail_instr(inst,
|
||||
"uniform read too soon after pointer update");
|
||||
}
|
||||
|
||||
if (waddr_add == QPU_W_UNIFORMS_ADDRESS ||
|
||||
waddr_mul == QPU_W_UNIFORMS_ADDRESS)
|
||||
last_unif_pointer_update = i;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue