Tue, 25 Jul 2017

Mantel

pre-alpha 1730 devlog


The “AMD Radeon” Release

Originally this release was supposed to reintroduce actual gameplay. However, unexpected medical issues in my family came up and left me with only 6 days of development time over the last 2 weeks. I also learned that the game still crashes on some AMD GPUs, even with newer drivers, so I got one of those problematic GPUs and focused on fixing AMD related bugs and postpone the gameplay until the next release.

My priorities are always to fix hardware-incompatibilities or other game crashing/breaking bugs first. Only after those have been ironed out I will add new features or other improvements.

Good news: for users of AMD GPUs this is a big release, since it allows them to actually start the game!

Bad news: for users of nVidia GPUs there is nothing new in this release.

Using Vulkan Is a Dream

The initial problem with AMD GPUs was that I used a VertexFormat which is only supported by nVidia: VK_FORMAT_R16G16B16_UINT. But the beauty of Vulkan are its validation layers: they immediately output an error, telling me exactly I was doing wrong. After a slight rearrangement of data and using VK_FORMAT_R16G16B16A16_UINT instead the problem was fixed within minutes.

No more errors or warnings from the validation layers. Everything was fine, up and running .. Or not..

Using Vulkan Is a Nightmare

Then I noticed a graphical glitch in the UI which only happened while certain layouts were displayed. It had a strange triangular pattern, as if it were a synchronization error: using the UI’s output texture as input in another stage, while the GPU was still rendering it. At least that is what I thought based on the patterns, and since synchronization errors are one of the most common and elusive mistakes using Vulkan.

After inserting PipelineBarriers all over the place, most of them redundant and not helping at all, the validation layers not reporting anything and wasting nearly 2 days I finally found the source for the glitch: a buffer overflow. With great power…

In retrospect I wonder why nVidia hardware never had any problems, since the buffer overflow happened there as well. But I really like that AMD hardware had those rendering artifacts, otherwise the buffer overflow would still be in there.

Using Vulkan Is an Even Bigger Nightmare

And then things become even harder to debug. The game crashed randomly. Still no warnings or errors from the validation layers. The worst thing was that those crashes happened inside the graphics driver and quite often the driver could not recover, resulting in a unrecoverable black screen and a hard-reset was necessary. This meant that iterating (trying to close in on the bug) took ages because of the constant reboots. It was only yesterday evening, after days, that I finally found the source of the bug and a way to fix it. And this time it really was a synchronization bug. But it only surfaced because of a very strange timing structure in the AMD driver. A behavior I still do not understand and which results in stuttering.

The only workaround for this stuttering is disabling V-Sync in the options.


Enable Javascript to see comments