tuffee88 / d3d12ProxyEdrDx11_0

Totally naive app using proxy/dll forwarding to try and get Elden Ring running on DX12 hardware with Feature level 11_0 (f.e. Nvidia Kepler GPUs)
279 stars 43 forks source link

Hey tuffee, the game uses the d3d12.dll file in c:windows/system32 only, is it safe to replace it with yours? #58

Open moehammm opened 1 year ago

moehammm commented 1 year ago

When running the game I searched the handles it used. It uses the .dll file found only in Win/Sys32, no matter what I place in the game's directory it still uses the main one. But I noticed 2 things that it uses, I placed a d3d11.dll and it used it (it crashed; was also using the d3d12.dll) and it used the d3d12Core.dll that I placed in the game directory (can I rename one of your files to d3d12Core to spoof the game?).. Anyways tried replacing the main sys32 .dll with one of your file but access was denied, should I go and do it? Just wanna do one last test before deleting the game forever..

The game is fifa 23 Edit: Tried it, didn't work due to EA anti-cheat. Probably could've, due to EA's incompetency, but the AC won't let me load into the game, because it detected an "abnormal file"

tuffee88 commented 1 year ago

Please don't replace the Sys32 one - this won't work as we ultimately redirect almost all calls to this dll.

Is there any way you can try without anti cheat ?

moehammm commented 1 year ago

Without anti-cheat the game won't launch, it's mandatory unfortunately. When I replaced it, I closed every app that used it as seen via ProcessExplorer (epic launcher and Nvidia) then replaced the file and a mess happened, ea launcher didn't launch until installing vcredist (needed vcruntime140_1.dll), I installed it, launched the game again, the anti-cheat wen't on no errors but when the game screen starts, it fails due to anti-cheat, and displayed a warning that "some files were tampered with".

Can I force the game to use your d3d12.dll?

The debugView doesn't show that much of what's happening either, only these two,

No further details, nothing about what DX used or if it encountered any errors. I think at this point it's just the game, it does a hardware check, if it sees a lower Dx FL it won't run, because the debugger shows nothing right? On process explorer it runs on d3d11

Please don't replace the Sys32 one - this won't work as we ultimately redirect almost all calls to this dll.

Is there any way you can try without anti cheat ?

moehammm commented 1 year ago

[7304] [0110/155615.417:ERROR:gpu_init.cc(426)] Passthrough is not supported, GL is disabled [14904] SetProcessDPIAwareness failed. (Access is denied.) [18312] [2023.01.10-12.56.27:230][467]LogRunningAppService: Display: New foreground app D:/Program Files (x86)/FIFA 23/ [18312] [2023.01.10-12.56.52:850][ 16]LogSlate: Request Window 'Epic Games Launcher' being destroyed [18312] [2023.01.10-12.56.52:901][ 16][MainRouter] RedirectToUrl('/null') [18312] [2023.01.10-12.56.52:942][ 16]~SCommunityPortalMainImpl UEPVM:2 [18312] [2023.01.10-13.28.38:832][869]FCommunityPortalWinPlatform::GetApplicationPerformanceState failed not supported [Err:87] [18312] [2023.01.10-12.56.52:943][ 16]FCommunityPortalWinPlatform::SetApplicationPerformanceMode to: 0 [18312] [2023.01.10-12.57.09:617][373]LogRunningAppService: Display: Dead foreground process [17492] D:/Program Files (x86)/FIFA 23/EAAntiCheat.GameServiceLauncher.exe for app D:/Program Files (x86)/FIFA 23/ [18312] [2023.01.10-12.57.09:617][373]LogRunningAppService: Display: New foreground process [3576] D:/Program Files (x86)/FIFA 23/FIFA23.exe for app D:/Program Files (x86)/FIFA 23/ @tuffee88

tuffee88 commented 1 year ago

You probably can - it's just not going to be as straightforward as dropping the dll file in a folder somewhere, if you're interested in investigating further dll injection or other dll hooks might make for a good starting point.

Anti-Cheat and friends are usually a problem with anything like that so you might have better luck if you get a copy of the game without these intact (if that's available somewhere).

Anyhow, did you check that the game starts using the WARP software renderer (you can force usage via dxcpl) ?

moehammm commented 1 year ago

I am intrested, because like more than 30% of us who bought the game on pc couldn't even run it, so i'd really love to help. Regarding anti-cheat, there isn't any pirated versions to this game since 2019 because pirates and devs have a trend to hate it (hate anything related to ea), so 0 f's given about it. Unless I find a cheater and ask them how they bypass it and cheat even online.

The WARP software I think I knew I could force the dx I want, but I have the file but it doesn't allow me to change anything. Or the whole tab is missing idk why! I might be using a wrong file? idk but never did find the cpl even online.

moehammm commented 1 year ago

@tuffee88 hey tuffee, found the dxcpl, not sure how to use it properly :)

tuffee88 commented 1 year ago

Take a picture at the linked screenshot, this should make things easier: https://filestore.community.support.microsoft.com/api/images/10ae3edd-310a-4e04-9e7c-157f24335e6e

You first add the game's .exe file via "Edit List" and then check the "Force WARP" checkbox in the lower right corner -> This should force using the WARP software renderer, which should allow you to launch the game if this is really a DX12 Feature-Level problem.

moehammm commented 1 year ago

image @tuffee88 That happens when forcing WARP Tried the disable FL upgrade, didn't work also.. I could get you what happens from the debugger, but nothing really except Epic launcher "DeviceNotCompatible" "SetApplicationPerformance = 0"

moehammm commented 1 year ago

@tuffee88 hey, disabled AC error check from registry (don't know if it does anything) but still the game didn't work -thought it's the AC detecting lower FLs and breaks the game becasue I found on DebugView logs that the app suddenly crashes because the AC stops working-..

But I found this from Microsoft: "For Direct3D 12, it’s no longer possible to backtrack from a device to the IDXGIAdapter that was used to create it. It’s also no longer possible to provide D3D_DRIVER_TYPE_WARP into D3D12CreateDevice. To make development easier, you can use IDXGIFactory4 to deal with both of these. IDXGIFactory4::EnumAdapterByLuid (designed to be paired with ID3D12Device::GetAdapterLuid) enables an app to retrieve information about the adapter where a Direct3D 12 device was created. IDXGIFactory4::EnumWarpAdapter provides an adapter which can be provided to D3D12CreateDevice to use the WARP renderer.",

can you help me applying it? Is it saying that WARP from DXCPL doesn't work with Dx12 so I have to do it manually? Am I getting it right?

moehammm commented 1 year ago

@tuffee88 hey, I tried local .dll redirection (by creating a app.local.exe), it works on most apps but not the main FIFA.exe (it won't load any d3d12, neither the original nor yours, only system's d3d11 and it crashes), how can I overcome this obstacle, I think this is the last obstacle to use your .dll and test it.. Hope to hear from you soon..

tuffee88 commented 1 year ago

You'll probably have to mess with the DLL loading order for this to work - however even with the proxy dll loaded this doesn't mean that the game will work, most likely it still won't.

I suggest you have a look at the debug output (using DebugView) when you try to launch the game with the DirectX Debug Layer forced to on (dxcpl -> just uncheck everything exept the "Force on" option in the upper part of the window).

You'll hopefully see at least one try that starts with "D3D12 ERROR:" - which should give you a much better chance to figure our what's actually causing FIFA 23 not to work.

moehammm commented 1 year ago

@tuffee88, did it and it did not display anything related to D3D! these are the lines and they appear on any setting I choose, that's why I think it is not a feature level issue, I guess I might be wrong, I know you know better it won't work, but I think it's worth a shot, just to at least diagnose at 100% sure rate.. (I'm an MD that's why I'm obssesed lol)

[3168] [0123/053443.213:ERROR:gpu_init.cc(426)] Passthrough is not supported, GL is disabled [8416] Profiler was prevented from loading notification profiler due to app settings. [8416] Process ID (decimal): 8416. Message ID: [0x2509].

[11976] [2023.01.22-13.31.00:984][281]LogRunningAppService: Display: New foreground process [9044] D:/Program Files (x86)/FIFA 23/FIFA23.exe for app D:/Program Files (x86)/FIFA 23/ [11976] [2023.01.22-13.31.00:984][281]LogRunningAppService: Display: New foreground app D:/Program Files (x86)/FIFA 23/ [11976] [2023.01.22-13.31.00:984][281]LogRunningAppPresenceHandler: Display: No foreground apps with monitored presence: clearing override presence [11976] [2023.01.22-13.31.02:018][303]LogPortalPublishTime: Started tracking playtime for f5deacee017b4b109476933f7dd2edbd:50477a7917a4492e8f3f7f463d962932:Lime [11976] [2023.01.22-13.31.24:954][786]LogEOSMessageService: Error: Unable to find port.

And these are the logs for EA launcher that I forced your .dll on it :)

[4480] D3D12CreateDevice - Loaded d3d12_original.dll [4480] D3D12CreateDevice - LoadLibrary Result: 7fff01e00000 [4480] D3D12CreateDevice - DEBUG: Checking Pix support [4480] D3D12CreateDevice - DEBUG: Attempt to load Pix support! [4480] D3D12CreateDevice - DEBUG: Loading Pix WinPixGpuCapturer.dll [4480] D3D12CreateDevice - Proxy function called! [4480] D3D12CreateDevice - Original function address available [4480] D3D12CreateDevice - CallResult: 0 [4480] D3D12CreateDevice - CallResult indicates SUCCESS (S_OK)

====================================================================================================================================================================

Edit: the game has its own d3d12_core.dll file I replaced it with the system32 one and I got this [10076] D3D Error 887e0003: (15592@3312718) at 00007FFD8711948F - D3D12SDKVersion from D3D12Core != requested D3D12SDKVersion.

Is this file tampereable? like the one's you've made

tuffee88 commented 1 year ago

It probably is - looks like Fifa 23 uses the new DirectX12 Agility SDK (https://devblogs.microsoft.com/directx/gettingstarted-dx12agility/).

Can you make sure that you have all the latest Windows updates installed ? And preferably install the newest Agility SDK version itself ? Chances are that this could make Fifa23 use the local installed dx12 dlls other than the ones it ships with.

moehammm commented 1 year ago

@tuffee88 I have the latest jan/2023 update, latest nvidia drivers. did the same method before and got the same error didn't know how to install Agility SDK version, i have VisualStudio2022 if it helps?! Is there anyway to contact you faster? like a discord or whatsoever? because if it runs i'm gonna buy you a cup of coffee at least Edit 2 :- nevermind I just bought a ps5.. Anyways, thanks a lot for trying to help, highly appreciated tuffee, you're a good sport! much love.

tuffee88 commented 1 year ago

Hi, sorry for the late reply - just for later reference, the latest Agility SDK can be installed from Visual Studio (using NuGet). Glad to hear that you can finally enjoy Fifa 23 ! I'll reopen this ticket so I can keep tabs on it - not a big Fifa fan but if it ever get on sale for like 10 $ I might get a copy and have a closer look myself.

egeardakoksoy commented 1 year ago

hi tuffee, i can't open fifa 23 too because i have gtx960m. If you write here in a future development or if there is something you want me to try, I would love to help. :)

moehammm commented 1 year ago

I don't mind giving you my epic and ea accounts, for the sake of the community, it has nothing on it.. or for safer approaches (I trust you but safer for me at least), I'd suggest subscribing to $5 ea play it gives you a 10-hours trial. Or I could hook you up with a seller from turkey, games are dirt cheap there.. I bought it for $12.

tuffee88 commented 1 year ago

Hi, thanks for the suggestion - ea play sounds like a good plan. I'll have a look one I get some more free time.

f4ku123 commented 11 months ago

I was trying without success but I think that if it was possible with other games, it is also possible with this one. The next fifa is likely to use a similar system (they always recycle code). I found some logs that have something about directx 12 but I don't have that much knowledge to know what it is about. I leave the path and the content in case someone sees it and it helps them to find a way.

Log 1: C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\Logs\IGOProxy_IGOProxy32.log Content:

INFO 01:56:01 a. m. 1300 Helpers.cpp: 628 Defaulf value for environment variable IGOLogDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\Logs Final value of the environment varialble IGOLogDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\Logs INFO 01:56:01 a. m. 1300 main.cpp: 22 lookup started INFO 01:56:01 a. m. 1300 DX8.cpp: 65 Looking up DX8 Offsets (32 bits) INFO 01:56:01 a. m. 1300 DX8.cpp: 102 Using display format idx=0 (format=0x00000016 / mode.Format=0x00000016) INFO 01:56:01 a. m. 1300 Helpers.cpp: 306 Defaulf value for environment variable IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache Final value of the environment varialble IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache INFO 01:56:01 a. m. 1300 DX9.cpp: 68 Looking up DX9 Offsets (32 bits) INFO 01:56:01 a. m. 1300 DX9.cpp: 106 Using display format idx=0 (format=0x00000016 / mode.Format=0x00000016) INFO 01:56:01 a. m. 1300 DX9.cpp: 46 Device=0x095DBAE0, vtable=0x095DEA3C, ptr[0]=0x70B75CF0, ptr[1]=0x70B76E80, ptr[2]=0x70B63640 INFO 01:56:02 a. m. 1300 Helpers.cpp: 306 Defaulf value for environment variable IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache Final value of the environment varialble IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache INFO 01:56:02 a. m. 1300 DX10.cpp: 64 Looking up DX10 Offsets (64 bits) INFO 01:56:02 a. m. 1300 Helpers.cpp: 306 Defaulf value for environment variable IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache Final value of the environment varialble IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache INFO 01:56:02 a. m. 1300 DX11.cpp: 63 Looking up DX11 Offsets (64 bits) INFO 01:56:02 a. m. 1300 Helpers.cpp: 306 Defaulf value for environment variable IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache Final value of the environment varialble IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache INFO 01:56:02 a. m. 1300 DX12.cpp: 70 Looking up DX12 Offsets (64 bits) INFO 01:56:02 a. m. 1300 Helpers.cpp: 306 Defaulf value for environment variable IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache Final value of the environment varialble IGOCacheDirPath is C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache

Then in the path "C:\Users\XXXX\AppData\Local\Electronic Arts\EA Desktop\IGOCache" there is a file for every DirectX feature level with the extension .igo

OreInferno commented 10 months ago

@tuffee88 @egeardakoksoy wanted to know if there's been any success with this method because I have a gtx960m as well and I'm really not enjoying having to play with 30/40fps when I know my system can run it much better

moehammm commented 9 months ago

@tuffee88 @egeardakoksoy wanted to know if there's been any success with this method because I have a gtx960m as well and I'm really not enjoying having to play with 30/40fps when I know my system can run it much better

Do you have FIFA23? From nvidia control panel, program specific settings, last one there's vulkan/opengl present method, put on prefer layer on dxgi swapchain.

And tell me if it works

OreInferno commented 9 months ago

@moehammm just tried it and it didn't work. Is there anything else I should've done before putting on prefer layer on dxgi swapchain?

OreInferno commented 9 months ago

it still doesn't pick up the nvidia gpu

moehammm commented 9 months ago

@moehammm just tried it and it didn't work. Is there anything else I should've done before putting on prefer layer on dxgi swapchain?

For me I’ve tried everything in my capacity, but couldn’t work around it. I mean I put my finger on the problem but fixing it is not my expertise.

The problem with this solution that fifa doesn’t pick tuffee’s fix .dll when it runs, it picks the one from the system32 files.

Replaced both, but the anti-cheat didn’t allow me to continue iirc. Asked tuffee to look further into it but didn’t get a reply back. I offered him my account or even an ea subscription for him to download the game to try himself but still no response. He promised to look into it though.

OreInferno commented 9 months ago

Hopefully @tuffee88 replies before the start of EAFC 24 🤞 for those of us who can't afford to get a new pc

moehammm commented 9 months ago

Hopefully @tuffee88 replies before the start of EAFC 24 🤞 for those of us who can't afford to get a new pc

I’ve got myself a ps5, best thing i’ve done tbh, no need to worry about anything, plug and play. But I really want to help the others if I can

tuffee88 commented 9 months ago

Hi guys,

sorry for the late reply, unfortunatedly I didn't have time to look into FIFA 23 due to other comittements (work, etc.). I'm hoping that I'll finally get some freetime this winter, in that case I'll definitedly have a closer look but please don't get your hopes up even if I get around the Anit-Cheat and trick the game into loading the prepared dx12 dll chances are that the game actually requires some non-supported features and just crashes :-(

Rayan-Abdullah commented 8 months ago

Hi guys,

sorry for the late reply, unfortunatedly I didn't have time to look into FIFA 23 due to other comittements (work, etc.). I'm hoping that I'll finally get some freetime this winter, in that case I'll definitedly have a closer look but please don't get your hopes up even if I get around the Anit-Cheat and trick the game into loading the prepared dx12 dll chances are that the game actually requires some non-supported features and just crashes :-(

HI buddy, as of now the FIFA 23 is cracked and the AntiCheat is also bypassed for the offline version, is there a way to run it on a dx12 (11_0) GPU. Doesn't matter offline or what just to load it and play it. Thanks

Rayan-Abdullah commented 8 months ago

@tuffee88 @f4ku123 @moehammm