Software 42359 Published by

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





Features

  • Implemented the ability to use more than 4GB VRAM on 32-bit applications.
    • Helps greatly in modded Skyrim/Oblivion, etc.
  • Enabled async presentation across all vendors
  • Removed an unncecessary CS sync point in query data retrieval
  • Minor query flushing improvements
  • Improve internal time measurement (use new platform-specific clock)
    • Works around MinGW's high_resolution_clock being absolutely terrible.
  • Deferred MANAGED + SYSTEMMEM buffers upload until PrepareDraw time
    • Fixes performance in Risen and Legend of the Heroes: Trails of the Sky.
  • Implemented D3DTA_CONSTANT
    • Fixes bloom rendering in SpinTyres/Mudrunner
  • Improved D3D9Ex compatibility/specifics
    • Handled ResetEx vs. Reset nuance.
  • Misc. code cleanup/refactoring
  • Made WRITEONLY buffers mapped directly
    • May improve performance, but also works around a game bug in CS:GO where it was still writing to the buffer after it was unlocked.
  • Implemented SetDialogBoxMode
  • Implemented vertex blending
  • Implemented indexed vertex blending (including for SWVP)
  • Remade the sampler count HUD to use the new more extensible HUD system
  • Minor performance improvements wrt. binding shaders, binding input layouts and constant uploading
  • Added option d3d9.dialogBoxMode, which can be enabled to disable D9VK taking exclusive fullscreen

Bug Fixes

  • Correctly handled a w == 0 quirk for POSITION_T
    • Fixed Sun Flares in GTA: SA.
  • Fixed NaN/INF light attentations rendering incorrectly (@CME42)
    • Fixes Virtual Vodka demo by Fairlight.
  • Fixed ending TIMESTAMPDISJOINT queries
  • Removed exposing VCACHE for Nvidia (matches native) and updated the values to what modern cards expose.
  • Fixed memory tracking behaviour for D3D9Ex
  • Fixed Vampire: The Masquerade Bloodlines launching on machines with high amounts of VRAM
    • Worked around a game bug, it was creating textures until it couldn't anymore to measure VRAM amount.
  • Fixed mirrors in Max Payne 2.
    • Implicitly saturated some fixed function operations
  • Fixed user videos on TVs in The Sims 2.
    • Worked around a game bug where they would display black if X4R4G4B4 was exposed as a potential RT format.
  • Fixed Silent Hunter 3 rendering.
    • Fixed function texture transform paddings now behave as 1 in range of the actual input to what the rasterizer texcoord, and 0 outside of that.
  • Fixed aspect ratio in Senran Kagura Shinovi Versus
    • Worked around a game bug where if any ultra-wide modes were exposed (even though the game is 16:9 only) it would chose them by disabling non 16:9 modes for that game.
  • Fix width/height for "partial presentations" that we do.
  • Fixed Dungeons and Dragons: Dragonshard rendering as black
    • It was writing to FOG but it didn't have FOG enabled which we weren't treating properly.
  • Fixed shadows in Crysis rendering incorrectly
    • The Microsoft documentation for the TEXKILL op is incorrect, all 4 components are used when the shader is SM2 or above.
  • Fixed a potential race that could happen in ProcessVertices
  • Fixed Metal Slug X crash to startup
    • A bug in this old version of ANGLE lists D3DFMT_D32 as a possible depth format but then proceeds to not handle it in the OpenGL conversion, causing an UNREACHABLE to occur and thus a crash.
    • Disabled D3DFMT_D32 for this game.
  • Fixed autosculpt in Need for Speed: Carbon
    • Mark MANAGED as needing an upload in Lock rather than Unlock, the game relies on this quirk as it doesnt unlock it until after the frame but still expects you to see the preview by locking it.
  • Carried over the The Sims 2 app profiles over to the spinoff titles (@nelsonjchen)
  • Fixed black trees in Risen 1
    • Position needed to be marked as invariant.
  • Fixed the default value for COLOR0 in vertex shaders to be vec4(1)
  • Fixed a bug where the slot bits for default shader outputs were being incorrectly applied and therefore incorrectly patched by the backend causing them to be replaced with vec4(0)

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.

Download