Project using proxy function and dll forwarding to try and get Elden Ring running on DX12 hardware with Feature level 11_0
To be honest I just got really pissed that Elden Ring crashes with the famous WSOD (White Screen of Death) on my GPU, I never imagined that I'd actually get something working :-)
So this is it:
This project tries to do the following in order to maybe get Elden Ring working for your old non-supported D3D_FEATURE_LEVEL_11_0/ 11_1 GPUs:
Build this project with Visual Studio 2019 using the x64 target OR just grab the dll file from the Github release here:
Steps 2 & 3 are now OPTIONAL: If d3d12_original.dll is not present in the game folder the system d3d12.dll (from system32) will be used.
OPTIONAL: Grab the real d3d12.dll and d3d12core.dll from your windows/system32 folder, place both dlls in the Elden Ring game folder (where eldenring.exe is located)
OPTIONAL: RENAME the real d3d12.dll to d3d12_original.dll (the one inside the game folder, NOT the dll in windows/system32)
Place the new "fake" d3d12.dll in the Elden Ring game folder (where eldenring.exe is located)
Disable EasyAnti-Cheat:
Try to launch Elden Ring, now you should get past the white screen :-)
The WSOD is just a symptom and apparently has different causes - only try this if you exhausted all other possible causes any your GPU is the likely culprit
You'll need to disable EasyAnti-Cheat & Online-Play won't work, see instructions above
If you're having problems or are just interested how this works I suggest to use DebugView (https://docs.microsoft.com/en-us/sysinternals/downloads/debugview) and watch the eventlog while launching Elden Ring, you should see some debug messages from the proxy dll like this:
D3D12CreateDevice - LoadLibrary Result: xxxx
D3D12CreateDevice - Proxy function called !
D3D12CreateDevice - Original function address queried
D3D12CreateDevice - CallResult: xxx
-> this is the return code of D3D12CreateDevice and can be used to check for error messages (see https://docs.microsoft.com/en-us/windows/win32/direct3ddxgi/dxgi-error)
If you're experiencing issues after passing the WSOD try running this game via Vulkan using vkd3d-proton (especially on AMD cards):
So far I've received success reports for the following GPUs:
According to user reports this works for some cards with Assassin's Creed Valhalla and Death Stranding and Far Cry 6 too
The whole project is very likely not a good example how to do something like this, so use with caution !
Due to the function hooking techniques employed the Debug and Release binaries might exhibit different behaviour (see source comments for more details)
To debug render issues Microsoft PIX (https://devblogs.microsoft.com/pix/) should work (use the attach to process option)
ReShade should also work - if 1.) the system32 d3d12.dll is used (so no d3d12_original.dll in the game folder, omit setup steps 2,3) and 2.) Microsoft PIX support is not loaded (if you have PIX installed simply rename WinPixGpuCapturer.dll and ReShade should work)
I just thought this might be helpful for other people stuck on Nvidia GTX 6xx or 7xx series GPUs, no guarantees or anything !
If this helped you please consider donating some beer money (won't be used for Coffee, I promise)