github WinterSnowfall/d7vk v1.8
Version 1.8

16 hours ago

This release rolls out a lot of game fixes, but more importantly introduces two new major features.

First and foremost, we've added proper support for ProcessVertices calls, (bravely) implemented on the CPU by @CkNoSFeRaTU. This has fixed rendering in a sleuth of games across all supported APIs (see the changelog below for more details).

The second major change is that we have ditched proxied presentation entirely and replaced it with legacy presentation. For those of you yet unaware what proxied presentation entailed, in short, it represented our way of dealing with a particular nasty, though sadly not uncommon, form of DDraw interoperability. Early D3D games sometimes relied on blitting images (e.g. GUI elements, text, various overlays, buttons, decorations) on top of an already rendered image, acting as a sort of compositor within the confines of DDraw surfaces.

Proxied presentation dealt with the problem by making sure D7VK image content was synced back to DDraw for this cursed "compositing", however the presentation of the resulting final image was left to WineD3D (or Windows native DDraw), which usually meant using an OpenGL swapchain, with no possibility of a DXVK HUD in sight.

Here is an example of both proxied presentation (left), and the newly introduced legacy presentation (right):

Warhammer: Dark Omen v1.7.1 Warhammer: Dark Omen v1.8
WDO_171 WDO_18

Legacy presentation now additionally takes the final processed/"compositied" image from DDraw and uploads it back to D7VK one last time for presentation with Vulkan. As you can imagine, this involves yet another full image blit, so it is slower, however not much slower in practice. Don't expect to play any of these games in 4K though. The added benefit is, of course, access to the DXVK HUD, the possibility to use all Vulkan tooling you can imagine, and direct control over presentation, which includes applying frame rate limits, controling VSync status, presentation timings etc. Overall performance on this new presentation path is expected to improve slightly in the coming releases.

Keep in mind that legacy presentation is only needed by games which resort to this legacy DDraw "feature set", and should only ever be used for compatibility reasons. Forward looking games, making use of the D3D APIs as intended (at least when any hope for scalable performance was the aim), which means solely GPU driven textured draws, do not need any sort of special "hand holding".

Fixes/additions:

  • Implemented proper handling of ProcessVertices on the CPU (thanks to @CkNoSFeRaTU). This has fixed rendering issues in Forsaken, Resident Evil, Praetorians, Hidden & Dangerous, Escape from Monkey Island, Tomb Raider: The Last Revelation and other titles.
  • A new legacy presentation path was introduced to replace proxied presentation, which has enabled fixes for missing video content, loading screens and/or missing menu elements in Blade of Darkness, Sacred, Lands of Lore III, Codename: Outbreak, FIFA 2001, FIFA '99, Simon the Sorcerer 3D etc. All games which were previously presented with WineD3D now get full DXVK HUD support, as well as framerate limits and other adjustments where needed (see the config.cpp file for affected titles, since the list is prohibitively long).
  • Following some investigation by none other than @CkNoSFeRaTU, an issue causing missing terrain in Age of Wonders II / Age of Wonders: Shadow Magic has been tracked down and resolved.
  • Also following an "anonymous tip" from @CkNoSFeRaTU, we've fixed an oversight in D3D light handling which caused broken lights in X: Beyond the Frontier and X: Tension. Both titles are now working correctly.
  • Fixed an issue which caused missing intro playback in Divine Divinity.
  • Fixed missing pause menu backgrounds in Tomb Raider III.
  • Fixed an oversight which caused a startup crash in Hype: The Time Quest.
  • Thanks to @CkNoSFeRaTU, we've worked around a scaling issue in Resident Evil which caused background image line artifacts.
  • Resolved a regression involving depth stencil copies, by rebasing against latest upstream DXVK (see doitsujin#5596)
  • Added builtin config profiles with fixes for many games, including, but not limited to POD, Prince of Persia 3D, Jurassic Park: Trespasser.

ProcessVertices, the bane of D3D

Upstream DXVK has always had a largely bare bones ProcessVertices implementation, which was insufficient for the extended use it was seeing in D3D7 and earlier D3D APIs. As a result, many games were simply missing geometry or rendering barely anything. These issues are now fully fixed thanks to @CkNoSFeRaTU. Here are a couple of highlights from the extended list mentioned above:

Tomb Raider: The Last Revelation Praetorians
Tomb4 Praetorians

Integer scaling? Is that a PS1 thing I'm too PC to comprehend?

Some early PS1 ports had a very approximate way of handling their scaling calculations, but drivers and hardware at the time were more lenient of slight errors, so the problems went unnoticed. Here's an example of Resident Evil background artifacting, now worked around in D7VK, but exhibiting line artifacts in other implementations and generally on all modern GPUs, even on Windows:

Resident Evil - WineD3D Resident Evil - D7VK v1.8
RE_WineD3D RE_D7VK

Needles to say, I'm fairly happy with the numerous fixes we've rounded up this time, and will actually go back to replaying Praetorians now, since it's one of my favorite real time tactics games of all times. I hope there's something exciting in this one for everyone, but if not, well, there's always the next release.

Don't miss a new d7vk release

NewReleases is sending notifications on new releases.