Software 42750 Published by

Joshua Ashton has announced a new version of D9VK, a Vulkan-based DirectX 9 translation layer for WINE based on DXVK



Features

Rebased upon latest DXVK 1.4.4! ????????
Improved performance when locking D3DPOOL_DEFAULT textures via. dirty tracking to avoid unnecessary waiting and copies.
Improved performance by avoiding throwing out D3DUSAGE_DYNAMIC buffers on unlock.
Allow DISCARD on non-D3DUSAGE_DYNAMIC resources, which may improve perf in some cases (mirrors native behaviour.)
Other misc. locking changes.
Implemented D3DRS_POINTSIZE, D3DRS_POINTSIZE_MIN, D3DRS_POINTSIZE_MAX, D3DRS_POINTSCALE_A, D3DRS_POINTSCALE_B, D3DRS_POINTSCALE_C, D3DRS_POINTSCALEENABLE and D3DRS_POINTSPRITEENABLE.
Implemented D3DRS_SHADEMODE.
Fixes some GameMaker titles.
Implemented shader predication (experimental).
Compressed down and improved normalization of fixed function shader keys.
Implemented a new, more efficient method of hazard tracking enabled for all titles.
Removes the now-redundant d3d9.hasHazards option.
Improved perf. by respecting access type across all of WaitForResource.
Improved perf. by checking for resource usage before before syncing with the thread in WaitForResource. (mirrors D3D11 change)
Faked AMD for CS:GO to bypass NVAPI
Note: You still cannot play CS:GO with D9VK or Proton w/ VAC due to signature checks! (You will be dumped into -insecure on launch.)
Improve perf by removing duplicate blend state sent to the CS.
Generate adapter LUIDs when Vulkan does not provide them.
Spoof device/vendor for Halo 2
Fixes it falling into an invalid render path on some systems where it'd render degenerate tris for fullscreen passes.
Fixes it showing annoying unsupported driver/device messages on startup.

Bug Fixes

Implemented d3d9.invariantPosition option.
Enabled this for Halo 2, as otherwise imprecision messes up depth test on NV.
Disabled D3DLOCK_DISCARD and D3DLOCK_NOOVERWRITE for anything other than D3DPOOL_DEFAULT pool
Fixes flickering in Halo CE.
Retry setting display mode without frequency if it fails.
Fixes Battlefield 2 CTD.
Respected projection texture stage flag in PS 1.x
Fixes Psychonauts' video projections and shadows in some older titles.
Apply given swizzle to texture sample ops.
Affects a lot of games, pretty silly oversight on my behalf.
Disabled alpha test if alpha to coverage is active.
Fixes the spoopy ghosty people in Alan Wake 2.
Zero-initialized output registers that get used
The Sims 2 sometimes only writes to .x of them, but reads .yzw and expects 0.
Fixed a bug where StretchRect would fail if the dst sample count was != 1.
Fixes Anno 1404 and Halo 2's player customizer notably.
Fixed handling of Z extent with POSITION_T, notably wrt. depth testing being enabled.
Fixes Manhunt.
Use VK_BLEND_FACTOR_ONE when with an X8 render target and wanting to get DESTALPHA/INVDESTALPHA.
Try-catch all of Present, not just the presentation.
Fixes a bug where if recreation failed the application would crash.
Fixed the return value for failed presentations.
Set the driver version to INT64_MAX rather than UINT64_MAX.
Some games, such as Halo 2, interpret this as signed data.
Fixed a bug where multiple mips were exposed in RT views causing validation errors.
Fixed the wrong view being used in the generateMipMaps call.
Default invalid/OOR blend factors to ZERO rather than ONE
Fixes lighting in Payday 2.

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
You: for your love and support and helping me get to where I am today! :red_heart:

Thank you and Enjoy!