isl: Set MOCS to uncached for Gfx12.0 blitter sources/destinations
isl: Set MOCS to uncached for Gfx12.0 blitter sources/destinations
We were accidentally leaving XY_BLOCK_COPY_BLT's Source and Destination MOCS fields set to 0 (Error: Reserved for Non-Use) on Gfx12.0 systems. This was causing assert fails in debug builds, since we try to ensure that we don't do that. In theory, MOCS 0 is supposed to be equivalent to MOCS 2 (all the caching), but...we probably ought to use MOCS 3 (uncached). Every Gfx12.5+ platform requires it, so although there isn't a note about Gfx12.0 needing that, it's possible that it does. We're currently only using the blitter for DRI PRIME blits on Gfx12.0, anyway, and I think we're flushing all the caches regardless.
This bug was somewhat obscure to hit:
- You need a hybrid graphics system with Gfx12.0 and some other GPU
- You have to be using "reverse PRIME", i.e. rendering on the integrated GPU and displaying on the discrete one. This is not the common case.
- You have to be using a debug build.
No observable performance delta in GfxBench5 Car Chase (an arbitrary program) when rendering on Alderlake GT1 and displaying on an Arc A770.
Fixes: 194afe84 ("anv/iris/blorp: use the right MOCS values for each engine")