tu: Fix CP_CCHE_INVALIDATE not being applied at the right point

Apparently CP_CCHE_INVALIDATE is just a plain register write underneath,
so it needs WFI before it, in order to invalidate at the right point.

```
CP_CCHE_INVALIDATE:
mov $addr, 0x9881
mov $data, 0x1
waitin
mov $01, $data
```

Fixes misrendering in Doom Eternal on A750.

Fixes: fb1c3f7f5d ("tu: Implement CCHE invalidation")

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41266>
This commit is contained in:
Danylo Piliaiev 2026-04-29 17:09:51 +02:00 committed by Marge Bot
parent e1745e0bd9
commit c2e78f1b22

View file

@ -352,8 +352,13 @@ tu6_emit_flushes(struct tu_cmd_buffer *cmd_buffer,
tu_emit_event_write<CHIP>(cmd_buffer, cs, FD_CCU_CLEAN_BLIT_CACHE);
if (CHIP >= A7XX && (flushes & TU_CMD_FLAG_CCHE_INVALIDATE) &&
/* Invalidating UCHE seems to also invalidate CCHE */
!(flushes & TU_CMD_FLAG_CACHE_INVALIDATE))
!(flushes & TU_CMD_FLAG_CACHE_INVALIDATE)) {
/* CP_CCHE_INVALIDATE is just a plain register write underneath, so
* it needs WFI before it, in order to invalidate at the right point.
*/
tu_cs_emit_wfi(cs);
tu_cs_emit_pkt7(cs, CP_CCHE_INVALIDATE, 0);
}
if (CHIP == A7XX && (flushes & TU_CMD_FLAG_RTU_INVALIDATE) &&
cmd_buffer->device->physical_device->info->props.has_rt_workaround)
tu_emit_rt_workaround<CHIP>(cmd_buffer, cs);