Bug 104193

Summary: [radeonsi] The Witcher 3 freezes the system (POLARIS10)
Product: Mesa Reporter: Shmerl <shtetldik>
Component: Drivers/Gallium/radeonsiAssignee: Default DRI bug account <dri-devel>
Status: RESOLVED MOVED QA Contact: Default DRI bug account <dri-devel>
Severity: normal    
Priority: medium CC: 0xe2.0x9a.0x9b, cwidmer, l.jirkovsky, mirh, onli
Version: git   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: The Witcher 3: rotfiends radeonsi freeze
GALLIUM_DDEBUG dumps during the GPU freeze

Description Shmerl 2017-12-10 14:28:25 UTC
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.

See https://bugs.winehq.org/show_bug.cgi?id=43872#c8

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: 

https://raw.githubusercontent.com/wine-compholio/wine-staging/master/patches/wined3d-buffer_create/0001-wined3d-Do-not-pin-large-buffers.patch

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)
Comment 1 Shmerl 2017-12-21 15:42:09 UTC
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?
Comment 2 Shmerl 2017-12-24 00:29:47 UTC
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).
Comment 3 Shmerl 2017-12-29 04:53:22 UTC
Tested it with Linux 4.15rc5 and new amdgpu.dc=1 (to enable new display code). The freeze still happens.
Comment 4 Shmerl 2018-01-28 19:21:55 UTC
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.
Comment 5 Shmerl 2018-03-02 21:37:31 UTC
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.
Comment 6 Shmerl 2018-03-04 01:38:52 UTC
I managed to narrow it down to building Wine with -march=znver1 that I used for AMD Ryzen. Without that, it's not freezing.
Comment 7 Shmerl 2018-03-04 02:58:25 UTC
Actually, scrap that. I've just got another freeze even without znver1.
Comment 8 Shmerl 2018-03-23 01:37:18 UTC
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.
Comment 9 Lukas Jirkovsky 2018-03-25 17:21:02 UTC
For the record - the freeze also happens when using R600_DEBUG=nir on current mesa from git (5a75019ad0). I also have RX 480.
Comment 10 Christian Widmer 2018-07-25 18:50:35 UTC
It seems I have also just hit this bug. I am able to trigger hangs on my Sapphire Nitro+ Radeon RX 580 Special Edition on the first fight with ghouls after Geralt awakes from his dream at the beginning of the game using wine 3.13. It does not happen all the time, but when I do the fight a few times, there is eventually a point where it freezes.

I am using mesa git on commit c3eaf8fe5746e5b29a46a076247ba072c84e2ec5 and kernel 4.17.9 with the Gentoo patchset.
Comment 11 GitLab Migration User 2019-09-25 18:01:12 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/mesa/mesa/issues/1290.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.