Emulator Issues #10289
closedAdreno 506 with Vulkan Graphic Issue on Wind Waker
0%
Description
Game Name?
The Legend of Zelda : Wind Waker
Game ID? (right click the game in the game list, properties, info tab)
GZLP01
MD5 Hash? (right click the game in the game list, properties, info tab, MD5 Hash: Compute)
9841cc876fb7be6c61ead51deeabf280
What's the problem? Describe what went wrong.
When playing Wind Waker with Vulkan on Adreno 506, it does not render correctly. OpenGL ES backend works well.
YouTube link for the demonstration video is on the bottom.
What steps will reproduce the problem?
On Android phone with Adreno 506 and latest GPU blob (for Android 7.1) :
- Pick Vulkan as video backend
- Start Wind Waker (Other games seems to work well)
Which versions of Dolphin did you test on? Does using an older version of Dolphin solve your issue? If yes, which versions of Dolphin used to work?
Not Working: Dolphin 5.0-3617
No other versions were tested as this seemed like a driver issue.
What are your PC specifications? (CPU, GPU, Operating System, more)
OS: Android 7.1
Chipset: Snapdragon 625
GPU: Adreno 506
Device: miko (Xiaomi RedMi Note 4X)
Is there any other relevant information? (e.g. logs, screenshots,
configuration files)
YouTube link for the issue : [[https://youtu.be/U6_ldqk5m5Y]]
Updated by blubberdiblub over 7 years ago
Looks as though the Z buffer doesn't properly get cleared between frames.
Updated by ThE_MarD over 7 years ago
Heyyo, the issue isn't just Adreno 506, it's the whole Adreno 5xxx series. Doing some research on it? It's not even just an Android issue. It happens on AMD GPUs for desktop as well.
https://stackoverflow.com/questions/35995198/vulkan-failing-to-clear-depth
https://community.amd.com/thread/205798
I'm no coder but it does seem like the issue should be fixed within Dolphin Emulator Vulkan implementation as I've tried ReteoArch, Vainglory Vulkan Beta, NFS No Limits and Olympus Rising and none of them suffer this bug on my Adreno 530.
Updated by min050820 about 7 years ago
Any updates on this?
If no one is gonna work on here, please let me know what function is suspicious.
I've never worked with Vulkan but I guess I could try, given the SO link.
Updated by Stenzek about 7 years ago
Assuming it's what I was seeing on my Nexus 6P, pretty sure it's a driver issue, although I'm not 100% sure. Basically, clearing the buffer seems to have no effect. I doubt it's a barrier problem, because I've tried even flushing the command buffer and inserting overkill barriers and it still doesn't clear. Perhaps we're the only ones using 32-bit depth buffers, and that's the issue?
Anyway, I have a "fix" here, but it's at the cost of performance, so I never PR'ed it: https://github.com/stenzek/dolphin/commit/9c95b25da4a896c2e6d13244e62cfe2fbee40cbb
I don't have an android environment set up correctly, so if you like, you could try switching the depth buffer format. Should be in Constants.h, but there might be a few other places that need to be changed.
Updated by min050820 about 7 years ago
Yeah, changing the depth buffer format did the trick. Although I get "Panic Alert: Unhandled pixel format", it renders fine. I have changed depth buffer to "D16_UNORM", and depth as color buffer to "R16_UINT" (because UNORM was unsupported on my hardware).
It'd be great if someone made the patch for upstream and merge it.
Updated by min050820 about 7 years ago
By the way, I changed 'depth as color' only because I wasn't sure if I should change it along. I never tested with other options.
Updated by Stenzek about 7 years ago
Thanks for testing and confirming the issue.
However, such a change is not going to get merged into master Dolphin. We need the 32-bit depth buffer in order to represent the depth range of the GC/Wii accurately, and having two paths here significantly complicates things. Especially as Dolphin is not at fault here, the driver is advertising support for a format which it cannot handle properly. Furthermore, it would only 'help' a single broken driver, where most devices are not capable of emulating games at full speed anyway.
IMO you would be better off making a small repro case and supplying it to Qualcomm, and hoping they fix their driver. I'm way too busy at the moment to do this, but I could potentially create one at some point as well.