The age of performance improvements is over. The time of load optimizations has come.
This somewhat uneventful release has seen a lot of under-the-hood work to push down overhead around object creation, destruction, caching and copy paths, which has resulted in general improvements to loading/startup times. Some titles can see a big impact, with loading times cut in half or more... that being said, they weren't typically a problem in early D3D to begin with.
A few remaining performance-related tweaks have also crept in, but we're talking about areas firmly lodged into diminishing returns. If anything, the codebase is now a lot more manageable and maintainable as a result, though there aren't any particularly flashy performance jumps to showcase this time.
Among the titles improved in this release you'll find amazing games, such as:
| Empire Earth: The Art of Conquest | Resident Evil 2 |
|---|---|
![]() |
![]() |
Still, I thought it would be interesting to point out that with D7VK v2.x, we are now operating in a very different performance envelope altogether, where comparisons to the not-that-long-ago v1.x days make little sense.
Some quick benchmarking of D7VK v2.1 on a Lunar Lake/Core Ultra 7 256V thin & light, with a 37 W shared CPU + GPU TDP (while on battery power, I might add) got me very similar 3DMark '99/2000 scores to D7VK v1.12 benchmarked on a RTX 4070, with a 200 W TDP. I've not included any numbers as we've had plenty of that in the v2.0 release, but I hope you get the point.
If you're still using a v1.x D7VK release for whatever reason, please do upgrade, otherwise you're missing out on a lot of performance, regardless of what GPU/CPU you are using, but especially if you're on an older CPU.
Fixes/additions:
- Reduced the overhead of object creation (by trimming down lifecycle tracking), which has improved loading/startup times overall, with a visible impact in a variety of games, across all supported APIs.
- Fixed a use-after-free bug on attached depth stencil surface release, which, strangely, was only hit with MSVC/clang compiled binaries (thanks to @NemesisElectron for bringing it to my attention). This has fixed a crash on startup in Arx Fatalis.
- Added an optional direct path for
GetDC/ReleaseDCcalls, which might improve performance in games that are heavy users of such calls. Note that this path also has the potential to slow things down even more, depending on what the game does, so your mileage may vary. While an increase of FPS in Arx Fatalis has been observed during gameplay, by about 5-10%, it unfortunately comes with a noticeable performance drop when rendering the main menu. A classic example of "you can't have your cake and eat it too". - Added an optimistic path for the early initialization of D3D7/6 vertex buffers, which eliminates any frametime spikes on initial object access. This, however, isn't always possible, so it's an optimization entirely dependent on game behavior.
- Further optimized logging use to reduce CPU overhead and the overall memory footprint, this time with little to no impact on benchmarks (it might have a positive impact on performance in CPU limited scenarios on (very) slow CPUs).
- Slightly improved the performance of surface uploads/downloads, as well as devised a few more tricks to ignore needless transfers in certain cases. This yields a minor, but noticeable performance increase in Blade of Darkness, Knight Rider, Silent Hunter II and possibly other titles when "god rays" are rendered.
- Tweaked DDraw objects and helper libraries to have less of an overhead when D7VK acts as a simple forwarding proxy to DDraw. This is primarily aimed at DDraw-only games which will be forwarded to WineD3D/Windows native DDraw entirely, but D7VK D3D-related DDraw operations will also benefit from slightly less overhead as a result.
- Added an alternate pixel center config option, along with a fixed function implementation, which has fixed background image artifacts in Resident Evil 2 (retail release). The option will, for any practical purpose, act like the similarly named ancient ATI/Nvidia driver option from the Windows 9x/XP era, shifting pixel center alignment by half a texel. Note that there's no reason to use the workaround outside of known misbehaving applications, as it WILL cause artifacting, especially on any rendered text.
- Improved overall performance in Project I.G.I. and Sonic World DX by using managed vertex buffers.
- Worked around suboptimal buffer access patterns in Empire Earth (:The Art of Conquest), improving CPU-bound performance when a lot of units are in view.
- Worked around missing main menu backgrounds in MechWarrior 3.
- Thanks to @CkNoSFeRaTU, we now have non-SSE2 ProcessVertices() fallback helpers, which are used when compiling for ARM architectures. They are known to be slower and have only been introduced for comparative testing or an otherwise academical purpose (there are no ARM-native DDraw games, of course).
- Fixed a bug which caused DDraw surface description corrections to be applied erroneously, which in turn might have caused improper surface type/format mappings in the DXVK backend.
- Added support for
R3G3B28-bit color surfaces, thanks to @CkNoSFeRaTU. This is kept disabled by default, however, as in most cases a lack of support forces games to switch to 16-bit color formats, which improves image quality. A second reason for keeping it disabled is the fact that such surfaces can outright fail on creation in certain cases, due to a WineD3D limitation. - Extended the 8-bit mode masking config option to filter out any 8-bit color modes reported by DDraw during display mode enumeration.
- Optimized device cap(abilities) struct copies and caching, along with device enumeration, which improves performance in cases where games abuse such calls. This has reduced the initial startup time in Empire Earth (up to intro playback) to about one second, down from 3-4 seconds.
As always, enjoy, and should you come across any bugs, especially when trying out more obscure early D3D titles, do report them please.

