jp7677 / dxvk-nvapi

Alternative NVAPI implementation on top of DXVK.
MIT License
373 stars 35 forks source link

NVAPI does not work with Diablo 4 #191

Closed cg666 closed 3 months ago

cg666 commented 3 months ago

Hello,

When running Diablo 4 DLSS is not available in the game. Game is launched with DXVK_ENABLE_NVAPI=1

Im using Proton EGG Roll 9.10 and update nvapi.dll with release 0.7.1.

I notice that NVAPI failed to initialized from games logs (_FenrisDebug-X.txt) : [Prism] NvApi failed to initialize

dxvk-nvapi.log shows several message like this :

NvAPI_QueryInterface (0xf1ea1980): Unknown function ID

Full logs attached

_FenrisDebug-7.txt dxvk-nvapi.log

Let me know if I can improve logs.

Thank you

Saancreed commented 3 months ago

Hi, I just tried D4 on my own machine where I have DLSS working and looking at your game logs and comparing to mine I see something interesting. Mine look more or less like this (with some irrelevant stuff omitted):

Build VersionEx: 1.4.4.55523 (19474419-19475604)
Initializing graphics subsystem...
dpi = 96 96
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_common_0 -api bootstrap
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_common_0 -api update -type dll -gpuarch 0x190 -optional
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_dlss_0 -api bootstrap
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_dlss_0 -api update -type dll -gpuarch 0x190 -optional
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_dlss_g_0 -api bootstrap
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_dlss_g_0 -api update -type dll -gpuarch 0x190 -optional
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_reflex_0 -api bootstrap
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_reflex_0 -api update -type dll -gpuarch 0x190 -optional
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_common_0 -api bootstrap
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_common_0 -api update -type dll -gpuarch 0x190 -optional
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_pcl_0 -api bootstrap
[…]][streamline][warn][…]ota.cpp:426[getOTAPluginForFeature] Could not find version matching for plugin: common_0
[…]][streamline][warn][…]ota.cpp:426[getOTAPluginForFeature] Could not find version matching for plugin: dlss_0
[…]][streamline][error][…]ota.cpp:136[execThreadProc] Failed to create process C:\windows\system32\nvngx_update.exe -cmsid 0 -feature sl_pcl_0 -api update -type dll -gpuarch 0x190 -optional
[…]][streamline][warn][…]ota.cpp:426[getOTAPluginForFeature] Could not find version matching for plugin: dlss_g_0
[…]][streamline][warn][…]ota.cpp:426[getOTAPluginForFeature] Could not find version matching for plugin: reflex_0
[…]][streamline][warn][…]ota.cpp:426[getOTAPluginForFeature] Could not find version matching for plugin: common_0
[…][streamline][warn][…]ota.cpp:426[getOTAPluginForFeature] Could not find version matching for plugin: pcl_0
[Prism] Gpus detected (index 0 will be used):
    - NVIDIA GeForce RTX 4080 Laptop GPU (0x10de|0x27e0)
[Prism] Displays detected for current gpu:
    - Generic Non-PnP Monitor (2560x1600)
[Prism] RemoteDesktopSession is false
[Prism] NvApi failed to initialize
[Prism] Created Dx12 device
[…][streamline][error][…]sl.cpp:668[operator ()] Feature 'kFeatureDLSS_G' requires GPU hardware scheduling to be enabled in the OS
[Prism] Raytracing is disabled
*************

This [Prism] NvApi failed to initialize message appears to be misleading as it is printed even for me where NvAPI obviously loads and works fine. However, your logs have some other concerning messages there:

E 2024.07.13 09:51:43.120087 0  [Game] [11-51-43][streamline][error][tid:220][0s:087ms:624us]commonentry.cpp:702[getNGXFeatureRequirements] ngxResult failed 0xbad00002
W 2024.07.13 09:51:43.120122 0  [Game] [11-51-43][streamline][warn][tid:220][0s:087ms:662us]dlssentry.cpp:213[updateEmbeddedJSON] Failed to obtain DLSS min spec requirements from NGX, using SL defaults
…
E 2024.07.13 09:51:43.242547 0  [Game] pmAftermathError::LogResult: Unsupported driver version - requires at least an NVIDIA R495 display driver. - Error : Invalid, SystemCode : 0x00000000 (S_OK)
W 2024.07.13 09:51:43.404973 0  [Game] [11-51-43][streamline][warn][tid:220][0s:372ms:516us]commonentry.cpp:1322[slOnPluginStartup] Failed to initialize NGX, any SL feature requiring NGX will be unloaded and disabled
E 2024.07.13 09:51:43.405259 0  [Game] [11-51-43][streamline][error][tid:220][0s:372ms:806us]dlssentry.cpp:934[slOnPluginStartup] Missing NGX context - DLSSContext cannot run

This is strange, as if the game was unable to load NGX at all, not to mention that Aftermath is confused about the driver version which might point to yet another weirdness…

Anyway, please get me logs with the following environment variables:

As a sanity check, you could also verify the following things at the same time:

  1. Do you have Linux-side NVNGX installed on your system (libnvidia-ngx.so.1)? I recall some Debian and Debian-based systems failing to install libnvidia-ngx1 package when installing NVIDIA drivers but I hope we are past that now. Without this, DLSS wouldn't work anywhere on your system, not even in Linux-native applications, except maybe in some Flatpak or Snap-related scenarios.
  2. Do you have NVNGX correctly configured in your Wine prefix? By that I mean nvngx.dll and _nvngx.dll installed somewhere into it and FullPath value under HKLM\Software\NVIDIA Corporation\Global\NGXCore registry key set to point to their location? Can you check if you can successfully run other games or samples that make use of DLSS in your prefix?

dxvk-nvapi.log shows several message like this :

NvAPI_QueryInterface (0xf1ea1980): Unknown function ID

Curiously, this is the only function ID I don't recognize. The other three in your logs are known to be harmless so we can ignore them, but this one is interesting because the game does not ask for it on my system.

cg666 commented 3 months ago

[Prism] Raytracing is enabled

I was not aware that I had to copy nvngx.dll and _nvngx.dll into prefix.

It's working like a charm.

Thank you for your help.