A new version of D9VK, a Vulkan-based DirectX 9 translation layer for WINE based on DXVK has been released
Features
Improved Performance
Entirely rewritten texture code
Should be faster in every instance and correct some memory errors.
SystemMem textures are system-mem only and have no image, copies to real textures (ie. DEFAULT) are done when needed, reducing video memory and improving performance.
Refactored and rewritten presentation and swapchain code
Includes support for vsync + proper fullscreen w/ mode setting. Fixes other issues also.
Contiguous surface allocation
Improves stuttering in games which spam and abuse CreateTexture (eg. A Hat in Time, League of Legends)
Improve determining when we should wait on textures.
Optimized image views by avoiding creating duplicates and instead dually referencing existing ones if SRGB formats do not exist for the given D3D9 format.
New Features
Build
You can now choose what modules to build, if you so desire.
Queries
Minor query optimisations
Implement D3DQUERYTYPE_VERTEXSTATS
Alpha to Coverage
Supports both the AMD/NV driver hacks
Fixes hair in Final Fantasy [some roman numeral].
May improve appearance of other games also
Cursor Position Setting
The cursor position is correctly set/flushed when the application desires (immediate or at Present time)
Partial support for Presentation Rects
Fixes the fact that A Hat in Time doesn't recreate its backbuffer when making the resolution go down. (pls fix devs ️)
Resolve Z
The AMD resolve-z hack has been implemented.
Initial Data
Added support for CreateTexture InitialData in the shared handle for D3DPOOL_SYSTEMMEM.
Fixes CS:GO
GDI Interop
There is now experimental support for GetDC/ReleaseDC.
Version Info
Correct version info is now reported in the DLL, this should satisfy some anti-cheats.
GetStreamSourceFreq got implemented (by Rhedox)
Bug Fixes
D3D9
We now hold a reference to the auto depth stencil created by device Reset, some applications depended on this (ie. Gothic III)
Minor query fixes
Fixes for initializing both regular and lazy alloced resources
Fixes "punch card" issue in The Sims 3
Fix for stride returned for ATI1/2 formats not respecting Mip
Don't apply view sample swizzle on depth views (fixes some validation errors)
Fixed vsync + fullscreen issues
Corrected some cursor bugs where it would vanish in, for eg. GW2
In theory, some OOM issues may be corrected.
Fixed R8G8B8 fixup not working properly in some instances.
Fix mode order being incorrect.
Some extra undocumented interfaces are now stubbed and exposed (ie. Direct3DCreateShaderValidator9, PGSPError, etc)
Corrected refcounting for surfaces and fixed a bug where sometimes invalid memory would be used/deleted there.
Fixed a bug where UpdateSurface would pass an incorrect extent to Vk.
Fixed a bug where RestoreDisplayMode would fail
Fixed FP precision being set invalidly on x64 MSVC builds.
Fixes for multisample state not being bound in some instances causing no rendering.
DXSO (Shaders)
Fixed a GPU hang in some games on RADV. This has been fixed with discard deferral.
Notes
Please do not use wine's d3d9x or d3dcompiler with d9vk. They make invalid API calls and generate bad shaders. I cannot stress this enough.
If you are compiling with MinGW, please use the dwarf2 exception patch to improve performance.
Acknowledgements
ドイツ人 (doitsujin): for creating the base of the project, DXVK
Rhedox and CME: for helping with debugging
VKx and Frog Family Discords: for helping with testing
Thank you and Enjoy!