Skip to content

Version 0.13 - Hypnotoad

Pre-release
Pre-release
Compare
Choose a tag to compare
@misyltoad misyltoad released this 09 Jul 14:18
· 1813 commits to master since this release

Ribbit, here is 0.13 for you all. It's been a while since we marked a stable release 🐸

🐸🐸 Hypnotoad commands you to download! 🐸🐸

Features

  • Implemented fixed function
    • Includes everything except lighting, texcoord transforms, spheremap texcoords and constant texture arg.
    • Works well enough for most games if you can deal with with them being fullbright.
  • Better fallback for D16_S8, going to D24_S8 if it is not supported rather than D32
  • Implemented GetGammaRamp
  • Implemented ColorFill
  • Added a way to workaround resource hazards
    • d3d9.hasHazards = True to enable hazard checks -- only necessary on AMD
  • Implemented disjointed timestamp queries
  • Implemented Hardware Cursor support (for games like old WoW and Guild 2)
  • Implemented implicit samplers for PS 1.x (ie. cubemaps/volume textures)
  • Respect ordinal indices for exports of the DLL (may help with some anti cheats or older games)

Better Performance

  • Use a push constant for the Alpha Test Reference
  • Only dirty a clip plane if it is enabled
  • Avoid redundant vertex buffer changes (@doitsujin)
  • Offload input layout creation to command stream (@doitsujin)
  • Only update input assembly state if necessary (@doitsujin)
  • Avoid referencing dxvk device in BindSamplers
  • Constant uploading optimizations (via. ranges & dirtying)
  • Implemented async. presentation
  • Avoid some unnecessary syncs with CS thread
  • Use new DXVK signals as frame sync events
  • Enabled early discard for ACO compiler

Bug Fixes

  • D3D9
    • Clamp reference counting, avoid it wrapping around
      • Fixes a crash in Star Wars: The Force Unleashed
    • Use a private reference for auto depth stencil
      • Fixes another crash in Star Wars: The Force Unleashed
    • Normalized floating point inputs given to us (ie. remove NaNs)
      • Fixes a glowy man in Mass Effect: 2
    • Fixed a bug in GDI code where things would not be updated after being modified
    • Fixed the range of returned elements in GetDeclaration
      • Fixes a bug in Assassin's Creed
    • Correct mip view indices for framebuffer
      • Fixes black rendering in Lego Star Wars Saga
    • Normalize mipmapLodBias in range -15.0f to 15.0f and round to nearest .5
      • Avoids invalid state and stops runaway pipeline creation for games that using mip fading (a better solution instead of rounding would be good here)
    • Fix fast path for StretchRect occasionally firing when it shouldn't
      • Fixes wacky colours in GTA: SA
    • Use BC2 for DXT2 rather than BC1 which was incorrect
    • Fix crash on SWVP shaders
    • Correct range check in SetRenderState to mirror native behaviour
      • Fixes crash in SWTFU
    • Disable the READONLY lock flag for games in the Risen series
      • Fixes black rendering as they use it incorrectly
  • DXSO (Shaders)
    • Fixed a bug when parsing shaders that used relative indices for control flow ops.
    • Account for header token in bytecode size
      • Fixes games that readback their own shaders
    • Correct EXPP implementation
    • Fixes spots in HDR in TESIV: Oblivion, Fallout Series
    • Correct LIT implementation

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! <3

- Josh 🐸 ❤️ ~