Created attachment 136068 [details]
The Witcher 3: rotfiends radeonsi freeze
Wine has an issue with distorted monsters in The Witcher 3. Józef Kucia identified the problem as follows:
* wined3d doesn't support draw calls with no attachments,
* wined3d tries to map transform feedback buffers while transform feedback is paused.
He provided a patch: https://bugs.winehq.org/attachment.cgi?id=59848&action=diff&context=patch&collapsed=&headers=1&format=raw
However applying it, is causing a system freeze (with radeonsi) after such kind of monsters are encountered in the game and fighting them for some time. See attached savegame for example with rotfiends.
Interestingly, Józef Kucia couldn't reproduce this freeze with radeon driver, so it appears to be radeonsi specific.
You can apply the above Wine patch to Wine git master to test it (I build Wine using just that patch, and one staging patch for performance:
My last test environment:
OpenGL renderer string: AMD Radeon (TM) RX 480 Graphics (POLARIS10 / DRM 3.18.0 / 4.13.0-1-amd64, LLVM 5.0.0)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.4.0-devel (git-b926da241a)
Interestingly, this freeze seems to be Polaris specific. Users with Vega cards didn't manage to reproduce it. Same with older GCN 1.0 cards such as R9 M375 using amdgpu.ko.
So can it be a bug in amdgpu itself then?
A correction, apparently Vega users are still getting the freeze, but unlike the Polaris case, they are able to exit the game without the whole system hanging (may be because Vega supports GPU reset better).
Tested it with Linux 4.15rc5 and new amdgpu.dc=1 (to enable new display code). The freeze still happens.
Created attachment 137009 [details]
GALLIUM_DDEBUG dumps during the GPU freeze
I run TW3 with GALLIUM_DDEBUG=10000 (10 second delay for GPU hang detection). It detected the hang when it actually happened (I also had to build umr debugger from source, since Mesa complained otherwise that umr isn't found).
I attach produced dumps, please check if it helps identifying the issue. See also included debug.log for console output. Let me know if it can be run in some other way to get more information.
Starting from Wine 3.3, the patch for invisible monsters that's causing the freeze is in Wine source, so you can test regular stock Wine from 3.3 and newer to narrow down the freeze using the attached save above.
I still get the freeze with the following:
OS: Debian testing x86_64 (kernel 4.15.4).
OpenGL renderer string: AMD Radeon (TM) RX 480 Graphics (POLARIS10 / DRM 3.23.0 / 4.15.4-rcu, LLVM 5.0.1)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.1.0-devel (git-51562ea7a0)
Proposed workaround MESA_EXTENSION_OVERRIDE=-GL_ARB_framebuffer_no_attachments prevents the freeze, but also avoids fixing the actual bug with invisible monsters.
I managed to narrow it down to building Wine with -march=znver1 that I used for AMD Ryzen. Without that, it's not freezing.
Actually, scrap that. I've just got another freeze even without znver1.
I got a new Sapphire Pulse Vega 56, and when using it - no freezes, I tested multiple times. It's possible, that with RX 480 it exposed some kind of hardware defect, hard to tell.
For the record - the freeze also happens when using R600_DEBUG=nir on current mesa from git (5a75019ad0). I also have RX 480.