Our pattern of exponential (more like left shift) growth in version number continues. Version 1.0 is the definitive release of d8vk with the widest possible support for Direct3D 8 games and apps on Linux. This is the first production-ready release of d8vk that has been tested against many hundreds of games with better performance and compatibility than is possible with WineD3D or d3d8to9. See benchmarks below for concrete performance metrics.
If you encounter any issues (minor or major) on any games at all, please report a bug!
Screenshots: The Elder Scrolls III: Morrowind, 3D Mark 2001 SE. Usually 1000+ FPS, but these have 8x MSAA.
Changes
- Single combined
d3d8.dll
(d3d9 is statically linked) - New custom batcher for certain drawcall-heavy games
- Support overriding vertex shader declaration for games with undefined behavior
- Vertex buffers may now be stored in the managed pool automatically for improved performance and to prevent write ordering issues
- Implemented
bem
instruction - Support compiling on MSVC
- Correct surface desc sizes based on format
- State block types are now supported and should capture the relevant state
- Allow preserving current Proton installation by @Sid127 in #51
- Support GetInfo queries
- Countless game-specific configurations and minor features and tweaks
Bug Fixes
- Fixed a bug where CreateTexture would try to wrap a null texture
- Always use at least one backbuffer by @WinterSnowfall in #91
- Fixed backbuffers not being cached or referenced by the owning device
- Fixed textures, streams, and indices not clearing on reset
- Red Faction: Disable direct buffer mapping by @WinterSnowfall in #96
- Fixed location of Direct3DCreate8 in d3d8.def
- Fixed ref counting for rendertargets, depth stencils, and textures.
- Fixed null pixel shaders not being remembered
- Fixed rendertargets and depth stencils not being cached
- Fixed error if the client tries to enable SWVP on a hardware device
- Fixed devices not being freed
- Fixed segfault on freeing device with bound textures
- Countless other fixes...
Benchmarks - 3DMark 2001 SE
Implementation | WineD3D | d3d8to9 + dxvk (2.1) | d8vk |
---|---|---|---|
Score | 97134 | 118033 | 144660 |
Car Chase - Low | 1409.1 fps | 2075.5 fps | 2017.5 fps |
Car Chase - High | 352.1 fps | 148.9 fps | 553.8 fps |
Dragothic - Low | 1510.4 fps | 1853.3 fps | 2016.9 fps |
Dragothic - High | 807.6 fps | 792.3 fps | 1167.4 fps |
Lobby - Low | 1278.5 fps | 1528.5 fps | 1545.7 fps |
Lobby - High | 585.6 fps | 523.3 fps | 778.4 fps |
Nature | 1012.4 fps | 1708.6 fps | 1943.4 fps |
Fill Rate - Single Texture | 80163.2 MTexels/s | 64208.1 MTexels/s | 62904.5 MTexels/s |
Fill Rate - Multitexturing | 159903.7 MTexels/s | 97900.4 MTexels/s | 96772.7 MTexels/s |
High Poly Count (1 light) | 1335.1 MTris/s | 2217.0 MTris/s | 2375.5 MTris/s |
High Poly Count (8 lights) | 1267.6 MTris/s | 2092.4 MTris/s | 1853.5 MTris/s |
Environment Bump Mapping | 526.9 fps | 1430.8 fps | 2333.4 fps |
DOT3 (Normal) Mapping | 2025.1 fps | 1608.9 fps | 2331.6 fps |
Vertex Shader | 727.2 fps | 788.7 fps | 846.9 fps |
Pixel Shader | 1220.9 fps | 1059.8 fps | 1337.1 fps |
"Advanced" Pixel Shader | 4066.1 fps | 2808.6 fps (broken) | 2544.7 fps |
Point Sprites | 1193.9 MSprites/s | 1071.4 MSprites/s | 987.5 MSprites/s |
Default settings, except textures set to 32-bit due to a Wine bug / RTX 3080 Ti Laptop / Run in a Wine Desktop window on GNOME with background apps, so performance is somewhat variable. I've seen higher numbers than even these.
Notes
- You no longer need to install
d3d9.dll
for d8vk to work. - DXVK-Native builds (#15) are unfortunately not yet available.
New Acknowledgements
- @WinterSnowfall for their continued dedication to assist with this project
- @mrdeathjr28 for testing numerous games
- @Sid127 for revamping the installation script
Acknowledgements
- @Joshua-Ashton for creating DXVK's D3D9 frontend (a.k.a d9vk) and providing infinite support <3
- @doitsujin for creating DXVK, including the DXVK backend
- @WinterSnowfall, @Blisto91, Esdras Tarsis, @K0bin, @CME42, @TheComputerGuy96, for their extensive contributions and assistance
- Everyone in the Linux Gaming Dev Discord server who helped with testing, QA, and community stuff
- Everyone who's tried out d8vk and submitted issues or feedback. Thanks immensely for your help! We couldn't do it without you.
- Big thanks to everyone who's worked on other implementations of d3d8, including:
And remember to have fun!
Thank you all,
Jeff