Since @pchome made that standalone meson compile version of nvapi, i have been experimenting a wee bit with various stuff there. The question could be if there is something to be done to "fix" nvapi so it more or less gets useful for those weird nvapi cases.
I do not own a game that have any serious issues with this, and searching here kinda ended up in a non-conclusive 100% way to recreate problems (for me), cos i dont want to buy 4-5-6 games just to test. I would lub some feedback on what game "is the worst" if you are not faking AMD card, and setting dll-overrides for nvapi to "disabled".
What i have experienced so far, is as ppl have described, and that is even if you fake AMD card, and the nvapi.dll exist, it will end up being used anyway.
I have added a few fake things to the nvapi source, and i know it wont actually DO any hardware setting changes, but maybe faking calls and returning "sane" answers is enough for a few games? Worth a test in my book i guess.
https://github.com/SveSop/nvapi_standalone
Grab it, compile it and test it. (Script explanation in the README).
The absolutely awesome thing about this standalone source (big thanks pchome) is that when installed via dll-overrides, you just compile and replace the install folder to test a "new version", so its easy to fiddle with.
As of now, I have just faked as much of my GTX970 as possible (easily changed, and if interested i can explain how). I do not think it really matters much tho, but its a fun experiment. I have zero coding experience, so if obvious errors or ways to do things easier is spotted, tips are most welcome :+1:
What i would love tho, is for a comparison of WINEDEBUG="-all,+nvapi" logs between the regular staging nvapi and mine, especially for games that have huge issues with this. Probably best to post it as issues on my GIT. Eg. "wine-staging.log" "wine-nvapi-standalone.log", so i can try to pinpoint if there is anything obvious that COULD help.
Not saying it actually will solve anything, but hey.. fun project nevertheless.
PS. To make sure the game/app does what it can to use nvapi, you should put this in the dxvk.conf file:
dxgi.nvapiHack = False (Requires RECENT git - cf9de54 or newer) Or ofc you can override it with:
dxgi.customDeviceId = 10de
dxgi.customVendorId = 13c2
in the dxvk.conf file.
The problem is that games actually use the D3D11 extensions that NvAPI provides.
Those would have to be implemented in DXVK and I'm pretty sure doitsujin doesn't want to do that.
UE4 for example uses:
NvAPI_D3D11_BeginUAVOverlap
NvAPI_D3D11_EndUAVOverlap
NvAPI_D3D11_SetDepthBoundsTest
CryEngine uses:
NvAPI_D3D11_CreateFastGeometryShaderExplicit
Some other games might even be relying on something like
NvAPI_D3D11_MultiDrawInstancedIndirect to render some geometry that might be straight up missing if you just implement a stub.
@K0bin Do you have an example game/demo i could test for this? I tested some UE4 "engine demos", but they did not poll for this, so it might not be the "engine", but perhaps something turned on per game perhaps?
I just looked at the source code of UE4.
My main issue with nvapi is that it adds even more stuff that's going to break games and makes debugging a pain. Implementing some of the D3D11 extensions in DXVK wouldn't even be that hard, wiring them up to nvapi probably also wouldn't be that hard, but you'd have to get everything right - the DLL loading and initialization mechanism, reporting device capabilities, and then of course the plumbing that's needed to implement the extensions. And we already know that the wine-staging implementation does break games.
And getting everything right is kind of hard when half of it isn't even documented. It's not a public API, and we shouldn't treat it like one.
@SveSop If you want something to play with, Batman Arkham Knight implements two Nvidia gameworks features called "Interactive Paper Debris" and "Interactive Smog & Fog". Both features combine DX11 with NVidia PhysX. PhysX itself works on wine staging, use Fluidmark to verify this. Arkham Knight currently fails when these features are enabled because nvcuda.dll.cuD3D11GetDevice is stubed in nvapi. See also https://github.com/doitsujin/dxvk/issues/788
Please be also aware of: https://github.com/doitsujin/dxvk/issues/580
Edit: Typo.
Wine Staging doesn't implement the CUDA<->D3D interop necessary for PhysX and even this was implemented, it wouldn't work with DXVK.
It's a lot of functions that are not public yeah.. But there are quite a few documented functions that atleast describe their functions on the nvapi dev reference page: https://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/index.html
This is ofc mostly for reporting, and not actual internal functions and what the functions DO, but implementing REAL functioning nvapi in Linux probably wont be easy (Ie. having apps do overclocking and whatnot). It probably could come a long way with implementing stuff from the nvctrl.lib available for someone with a tad more programming experience than me using google and nano ;)
https://github.com/NVIDIA/nvidia-settings/tree/master/src/libXNVCtrl
I am not talking "true" dx11 functions here, but possibly use nvctrl to actually grab stuff from the driver in some way? Dunno..
@doitsujin
And we already know that the wine-staging implementation does break games.
Probably due to NvAPI_D3D11_SetDepthBoundsTest doing something wrong.
Previously, enabled nvapi breaks :bat::man::tm: games and Just Cause 3 for me, but now I'm using locally patched version w/o NvAPI_D3D11_* functions (auto reported as unimplemented(?)).
And I have no issues so far, I even have working PhysX in Batman* games.
Of cause there is still non-working cuda D3D1* stuff, therefore "Simulate water on GPU" && "Nvidia gameworks" options won't work.
So, if it's possible to make this few (one?) D3D1* functions in nvapi to work correctly with DXVK -- this already would be a huge progress.
I'm not just talking about it breaking DXVK here, it also breaks the dx9 version of Skyrim iirc. Probably others, too.
https://www.guru3d.com/files-get/monster-hunter-official-benchmark-download,1.html
Seems to be a cryengine demo thingy that generates a lot of
0087:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x139550c, 0, 0.000000, 1.000000)
0087:err:nvapi:NvAPI_D3D11_SetDepthBoundsTest Failed to get wined3d device handle!
So, does the function just perform a test on the wined3d device, and report back to the demo the result? Or does it change the way wined3d renders something :)
EDIT:
Oh yeah.. it DOES change something ref. dlls/d3d11/device.c
Some Nvapi D3D11 extensions might have equivalent functions on Vulkan. So there is no need for Nvapi at all, just add what is compatible with Vulkan and for all drivers. I also like api uplifting (like the one D3D9_to_11 attempted to do making D3D9 games multi threaded), there is no reason to want to reproduce D3D11's exact behavior.
Some Nvapi D3D11 extensions might have equivalent functions on Vulkan
Almost everything in NvAPI can either implemented using core Vulkan or using an equivalent NV_* Vulkan extension.
So there is no need for Nvapi at all, just add what is compatible with Vulkan and for all drivers.
There is no NvApi at all on Linux and the relevant parts of NvApi interact with the D3D11 driver which DXVK basically replaces. So we knew from the start that this is the only way to implement that.
like the one D3D9_to_11 attempted to do making D3D9 games multi threaded
That project is dead and it's impossible to multi thread D3D9 properly. D3D9 is an api thats not designed for multithreading and thus you can't use multiple threads in an implementation of it. The entire rendering depends on the order of commands from start to finish.
there is no reason to want to reproduce D3D11's exact behavior.
There is a very good reason to reproduce D3D11s exact behavior: compatibility. There are some exceptions but if you don't implement D3D11s exact behavior, games won't work.
their is a guy with a project call DXUP its working with DX9 games on Shader 1 or something so dont know much about it check it out
https://github.com/Joshua-Ashton/dxup
That project is dead and it's impossible to multi thread D3D9 properly. D3D9 is an api thats not designed for multithreading and thus you can't use multiple threads in an implementation of it. The entire rendering depends on the order of commands from start to finish.
That is not entirely true. D3D9 does support multithreading if you give it a flag called D3DCREATE_MULTITHREAD which essentially locks the device every time you call anything with it.
(like the one D3D9_to_11 attempted to do making D3D9 games multi threaded), there is no reason to want to reproduce D3D11's exact behavior.
I don't think you understand what a thread is. You can't just magically make things multithreaded by using a wrapper -- it requires changing the engine, not the rendering interface. Besides, we return success codes and other values, things can't magically thread if we aren't just firing and forgetting.
their is a guy with a project call DXUP its working with DX9 games on Shader 1 or something so dont know much about it check it out
https://github.com/Joshua-Ashton/dxup
My main target right now is SM2/2B.
(like the one D3D9_to_11 attempted to do making D3D9 games multi threaded), there is no reason to want to reproduce D3D11's exact behavior.
I don't think you understand what a thread is. You can't just magically make things multithreaded by using a wrapper -- it requires changing the engine, not the rendering interface. Besides, we return success codes and other values, things can't magically thread if we aren't just firing and forgetting.
I understand that if you uplift D3D9 calls to D3D11 ones, they will be run on more threads by default. Now if that breaks the game it's another matter. The same if you convert D3D9 textures to a simple 2D D3D11 surface, because that is basically what 9 technology is for 11. I also understand that if D3D11 likes to do a certain thing in one thread an Vulkan likes to do it in two, then you can try letting DXVK to uplift that in two. Now if that breaks 1/2 games then you revert, but if breaks 1/10 then you keep it and work around the 1/10.
Sorry but everything in that comment is wrong.
if you uplift D3D9 calls to D3D11 ones, they will be run on more threads by default
No they wont.
The same if you convert D3D9 textures to a simple 2D D3D11 surface, because that is basically what 9 technology is for 11.
As long as the texture formats match this is pretty straightforward and should just work.
I also understand that if D3D11 likes to do a certain thing in one thread an Vulkan likes to do it in two
Unlike D3D9 or 11 Vulkan is very explicit and allows the application to use as many threads as it wants. The application also has to handle synchronization though and certain things are serial by nature.
then you can try letting DXVK to uplift that in two
DXVK just uses a single thread for rendering (there's also a couple for the state cache and one for command list fences but lets ignore those). D3D11 doesn't allow DXVK to use more than that because of the way it works. You can't 'uplift' that and the fact that Vulkan supports as many threads as you like is irrelevant here.
Sorry but everything in that comment is wrong.
if you uplift D3D9 calls to D3D11 ones, they will be run on more threads by default
No they wont.
The same if you convert D3D9 textures to a simple 2D D3D11 surface, because that is basically what 9 technology is for 11.
As long as the texture formats match this is pretty straightforward and should just work.
I also understand that if D3D11 likes to do a certain thing in one thread an Vulkan likes to do it in two
Unlike D3D9 or 11 Vulkan is very explicit and allows the application to use as many threads as it wants. The application also has to handle synchronization though and certain things are serial by nature.
then you can try letting DXVK to uplift that in two
DXVK just uses a single thread for rendering (there's also a couple for the state cache and one for command list fences but lets ignore those). D3D11 doesn't allow DXVK to use more than that because of the way it works. You can't 'uplift' that and the fact that Vulkan supports as many threads as you like is irrelevant here.
It was an example! You can uplift anything. If one api can to do 1 think with 1 call and the other can do 5 the convert this way and save power. Or is there something that you can convert to 16 bits with 2x benefit on newer gpus, do it. Or can you hack use Async Compute, do it. And goes on and goes on.
Then how about submitting a PR that allows perfect multi-core scaling in D3D11? Nvidia's and AMD's Windows driver teams might also be interested.
It's quite obvious that you don't have the slightest idea what you're even talking about, please stop and stay on topic.
@pchome
And I have no issues so far
Well, in Metro 2033 (original) I have issues w/ nvapi enabled in dx11 mode.
I thought dxvk has a nvapi hack that spoofs all Nvidia cards to look like AMD cards
@pchome do you know what exactly is going on on that front?
If anyone is seriously interested in fixing up nvapi and wiring it up to DXVK, I can implement the required features (like depth bounds, UAV overlap, multi draw indirect) in DXVK and provide an interface to use them, but I think the first step would be to actually get a basic implementation to run that doesn't support any of the D3D extensions (and reports it to the application accordingly).
@doitsujin
Sorry, I don't fully understand your question.
But if you asking what wrong with the game - I don't know, but it can be figured out by WINEDEBUG="+nvapi,+nvcuda".
Sources: https://github.com/wine-staging/wine-patched/tree/master/dlls/nvapi
https://github.com/wine-staging/wine-patched/tree/master/dlls/nvcuda
I can name three titles where DXVK (or nv*.dlls) fails: Just Cause 2 (nvcuda, Simulate water on GPU), Batman AK (nvcuda?, Nvidia gameworks) and nv*?, Metro 2033 (ADVANCED PhysX option don't meter).
If you want me to provide such logs -- I'll do it.
But if you asking what wrong with the game - I don't know, but it can be figured out by WINEDEBUG="+nvapi,+nvcuda".
Well yes, can you provide the logs?
Current chapter, no glitches w/ nvapi enabled (Oo): steam-43110-nvidia.log
Loading different chapters to find out: steam-43110-nvidia-2.log
Loading directly to glitchy chapter ("Hunter"): steam-43110.log
Edit: suspect : https://github.com/wine-staging/wine-patched/blob/master/dlls/nvcuda/nvcuda.c#L1713
Ok, so that's because they use Cuda for... what exactly? PhysX?
Is there a way to tell a game that cuda is unavailable, e.g. by disabling nvcuda?
Ok, so that's because they use Cuda for... what exactly? PhysX?
There is lamps and fog (dust) ... Maybe I can blow on it to check out if it interact ? :)
Is there a way to tell a game that cuda is unavailable, e.g. by disabling nvcuda?
Yes, I simply disabling entire nv*.dll's by WINE overrides.
PhysX?
https://wiki.winehq.org/Wine-Staging_CUDA
For games there is also a separate NVIDIA library called PhysX which makes use of CUDA and provides some predefined physic simulations.
Hiding CUDA support from applications can be done by deactivating the nvcuda.dll through winecfg. Open winecfg, go to the Libraries tab, add an override for nvcuda and change it to disable by pressing the edit button. If you would like to re-enable the support, you just need to remove this line again.
Edit: I'm actually doing this through .config/protonfixes/localfixes/43110.py (https://github.com/simons-public/protonfixes)
from protonfixes import util
def main():
""" Metro 2033
"""
util.protontricks('d3dcompiler_47 d3dx11_42 d3dx11_43')
#util.disable_dxvk()
#util.disable_esync()
#util.disable_d3d11()
util.disable_nvapi()
Metro 2033 , 1280x720 shots.
dx11 nvapi ON:

dx11 nvapi OFF:

dx9 nvapi OFF:

dx9 nvapi ON (moved forward a bit):

So nvapi breaks even for dx9. But only in this location so far. Now I moving forward w/ dx11 && nvapi enabled, and no such issues encountered. Maybe I'll meet such glitches again in next room w/ lamp, newspapers and a carpet on the wall...
@doitsujin
If anyone is seriously interested in fixing up nvapi and wiring it up to DXVK, ...
Well, gamers can't/won't help you. We are all interested in, but only few of us can really help.
E.g. I know what need to be fixed for Just Cause 2 to work, but I don't know how.
unimplemented)Maybe I'm right, maybe not. But I'm want this to be fixed.
So I'll be happy w/ DXVK specific patch to nvapi, if it possible.
_As for "counters" -- I dont care about counters, sorry @SveSop, nvctrl will likely work, but commonly it don't used outside testing tools, and will work only for Nvidia blob users. So due to my laziness, or common sense, there is no such patches in my repo._
@pchome Yeah, the reason for fiddling with this was mostly for fun from my part, and one that reported he got a "too old driver" thing when using nvapi (Cos default nvapi reports a very very old driver string). So i started fiddling with it as a learning experience.
I am trying to implement nvctrl atm as you can pull memory/gpu usage and loads of stuff from that, but so far i dunno how to do it, as i just get a unhandled page fault after implementing a function reading from the libXNVCtrl library. (It's probably some crap i do wrong tho, if you even can make wine dll's use functions from linux libraries like that?)
nvapi provides cuda, so if a game wants to use physx/cuda functions, nvapi "reports" this (through nvcuda i guess). There is ofc no problem just ditching everything of this, but if it COULD be implemented, it could possibly yield some benefit? Not sure how d3d11 <-> cuda ties together, but dxvk might not play nicely with that?
Creating "dummy" nvapi.dll's that just provide a NVAPI_LIBRARY_NOT_FOUND as a reply from the NvAPI_Initialize sometimes makes apps give up, but i have seen stuff like eg. monitoring apps that keeps polling functions and get replies nevertheless (and don't give up, so it might cause lower fps).
So to make sure nvapi is "never" used, you need 1: Fake AMD card (as already default), 2: dll-override to "disabled" for the nvapi(family) dll's, 3: Possibly dummy "fake" dll's that does not provide functions.
Why? Cos programmers do stuff they do. Take WoW for instance, the WoW log (gx.log) references Detected NvAPI and checking if it's valid..., but i am not able to find ANY nvapi functions being called, even tho i think this might also be listed when you fake AMD card. Probably some weird remnant text blob that has not been removed, even tho nvapi is not actually used? I think we will find stuff like this from many games still....
If anyone would like to do some experiments with nvctrl, i have a simple snippit i have made from various examples i found.
Requires libxnvctrl-dev package to compile. nvidia documentation here: https://github.com/NVIDIA/nvidia-settings/tree/master/src/libXNVCtrl
nvinfo.c.gz
Compile with: gcc -O2 -fPIC nvinfo.c -lX11 -lXNVCtrl -o nvinfo
running ./nvinfo should produce something like:
GeForce GTX 970
GPU Load: 1%
GPU temp: 42 C
Coolers: 1
Sensors: 1
Total vram: 4096 MB
GPU Clock: 135 MHz
MEM Clock: 324 MHz
And as i said above, i have had no luck (with my non-existing programming skills) to implement these functions to nvapi to actually provide "real" gpu load and stuff. There is not near as much info in the nvctrl library compared to nvapi tho, but as i said.. it would be fun to be able to run eg. heaven and have live nvapi updates of gpu temp/usage/whatnot :)
Figured out how to do it.. Atleast was able to implement showing real gpu and memory mhz via nvapi. (Tested with GPU Caps Viewer).
Gonna see if i can implement more stuff (even tho i know it wont fix dxvk performance issues by doing so).
I am pretty sure there is a different way of handing the XNVCTRLQueryAttribute(display... function, cos to get it working, i need to do a XOpenDisplay, read the data, and then XCloseDisplay(display)
This seems rather brutal, cos i THINK this kind of means spawning a X11 display of some sort, but this should aldready be done by the winedrv or whatever. Any idea how i could get NVCtrl to use the "already open display"? The function is called each time the app/game polls for this, so it seems to be a somewhat slow way of doing it.
I see the nvapi get_video_memory function seems to do this via a wined3d_mutex_lock() and unlock, but i cant seem to use eg `XNVCTRLQueryAttribute(wined3d..' or similar stuff.. Tips are welcome :)
Got some more NVCtrl functions in. Seems to be working, although i am not really happy with the connection/disconnection to X-screen function mentioned above. Tips are welcome.
So far this seems to work:
GPU Load %
GPU Memory amount
GPU Name
Bios version
Driver and branch version
GPU Vendor:Device ID's
GPU Temp
GPU / Memory clocks

Some more NVCtrl usage updates, so currently "seems to work" list is:
GPU Load %
GPU Memory amount
GPU Name
GPU BusID
Bios version
Driver and branch version
GPU Vendor:Device ID's
GPU Temp
GPU / Memory clocks
Video Memory usage
Video Memory controller utilization
Get shader/cuda cores from NVCtrl
Read GPU Voltage
Calculate GPU fan speed
Anyone tested this on a different card than GTX970? (As it no longer "fakes" one, but should read data from NVCtrl).
In case anyone is still interested in wiring up D3D11 extensions to nvapi, DXVK supports some interfaces to do that (already used in AGS):
Hell. Why am I doing this? My curiosity turned into pain.
I replaced everything but the trace in NvAPI_D3D11_SetDepthBoundsTest with call to DXVK's SetDepthBoundsTest, but have no luck to get it work.
Tested on mentioned Monster Hunter Online Benchmark:
NvAPI_D3D11_SetDepthBoundsTest disabled).err: DxvkImage::DxvkImage: Failed to bind device memoryerr: DxvkMemoryAllocator: Memory allocation failederr: DxvkSubmissionQueue: Failed to sync fence: VK_ERROR_DEVICE_LOSTNvAPI_D3D11_SetDepthBoundsTest enabled, w/o errors, last log output:
info: Presenter: Actual swap chain properties:
Format: VK_FORMAT_B8G8R8A8_UNORM
Present mode: VK_PRESENT_MODE_IMMEDIATE_KHR
Buffer size: 640x480
Image count: 4
warn: DXVK: No matching border color found for (1e+10,1e+10,1e+10,1e+10)
0041:trace:nvapi:nvapi_QueryInterface (7aaf7a04)
0041:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x7bbfb6a4, 0, 0.000000, 1.000000): stub
0041:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x7bbfb6a4, 1, 0.000000, 1.000000): stub
Is there any lightweight tests for NvAPI_D3D11_SetDepthBoundsTest ?
Wine test implements only check for NVAPI_INVALID_ARGUMENT.
EDIT: Okay, my fault. Getting "device" interface I trying to use "context" interface.

TBH, I don't know how to detect this SetDepthBoundsTest changes visually. All this "chromatic aberrations"(?), "DoF", etc. and small resolution makes the whole scene a bit weird.
Additional logging sample
0045:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0xe3e6c504, 1, 0.010000, 0.962355): dxvk
0045:fixme:nvapi:NvAPI_D3D11_SetDepthBoundsTest DXVK extension support: 1
0045:fixme:nvapi:NvAPI_D3D11_SetDepthBoundsTest DXVK set DBT: 1
0045:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0xe3e6c504, 0, 0.000000, 1.000000): dxvk
0045:fixme:nvapi:NvAPI_D3D11_SetDepthBoundsTest DXVK extension support: 1
0045:fixme:nvapi:NvAPI_D3D11_SetDepthBoundsTest DXVK set DBT: 0
0045:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0xe3e6c504, 1, 0.992950, 0.994257): dxvk
0045:fixme:nvapi:NvAPI_D3D11_SetDepthBoundsTest DXVK extension support: 1
0045:fixme:nvapi:NvAPI_D3D11_SetDepthBoundsTest DXVK set DBT: 1
0045:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0xe3e6c504, 0, 0.000000, 1.000000): dxvk
0045:fixme:nvapi:NvAPI_D3D11_SetDepthBoundsTest DXVK extension support: 1
0045:fixme:nvapi:NvAPI_D3D11_SetDepthBoundsTest DXVK set DBT: 0
SetDepthBounds is normally used for performance improvements while rendering the same thing, so visually you should not be able to observe a difference. You should be able to see a perf difference when the range isn't 0, 1 however.
Yes, thanks, I googled a bit already and tried to understand how it work.
Anyway, I can't see any noticeable difference in a very few UE4 games from my library. Maybe +1fps, or just placebo effect.
Still looking for "lightweight" benchmark, which will show the difference, maybe early UE4.
I have a bunch of problems with MHO benchmark, and can't get any numeric result from it.
You can hack up the range so everything gets discarded - that should let you validate that the feature is doing something.
You can also look at the Vk command stream to see if vkCmdSetDepthBounds is being called with the right arguments - that should be sufficient testing for your change.
@pchome
Could you provide a snippit of the code you replaced NvAPI_D3D11_SetDepthBoundsTest function with for me to test?
@pchome
Maybe +1fps, or just placebo effect.
That's basically what it does in Resident Evil 2 with the AGS imlementation as well. It's consistently better, but not by much (2% at best).
@ahuillet
You can hack up the range so everything gets discarded
My knowledge of graphics programming is limited. Is "everything" mean 0,0 ?
@SveSop
Could you provide a snippit of the code you replaced NvAPI_D3D11_SetDepthBoundsTest function with for me to test?
My curren code is a mess, still wanted to do some cleanups before sharing, but should be something like this:
NvAPI_D3D11_SetDepthBoundsTest
static NvAPI_Status CDECL NvAPI_D3D11_SetDepthBoundsTest(IUnknown *pDeviceOrContext, NvU32 bEnable, float fMinDepth, float fMaxDepth)
{
ID3D11Device *d3d11_device;
ID3D11DeviceContext *ctx;
ID3D11VkExtDevice *dxvk_ext_device;
ID3D11VkExtContext *dxvk_ext_context;
TRACE("(%p, %u, %f, %f): dxvk\n", pDeviceOrContext, bEnable, fMinDepth, fMaxDepth);
if (!pDeviceOrContext)
return NVAPI_INVALID_ARGUMENT;
if (0 > fMinDepth || fMinDepth > fMaxDepth || fMaxDepth > 1)
{
ERR("(%p, %u, %f, %f): Invalid argument!\n", pDeviceOrContext, bEnable, fMinDepth, fMaxDepth);
return NVAPI_OK; /* Hack: Don't crash games */
/*return NVAPI_INVALID_ARGUMENT;*/
}
if (FAILED(IUnknown_QueryInterface(pDeviceOrContext, &IID_ID3D11VkExtDevice, (void **)&dxvk_ext_device)))
{
ERR("Failed to get DXVK extension device handle!\n");
return NVAPI_ERROR;
}
if(!ID3D11VkExtDevice_GetExtensionSupport(dxvk_ext_device, D3D11_VK_EXT_DEPTH_BOUNDS))
{
ERR("DXVK extension not supported!\n");
return NVAPI_ERROR;
}
if (FAILED(IUnknown_QueryInterface(pDeviceOrContext, &IID_ID3D11Device, (void **)&d3d11_device)))
{
ERR("Failed to get DXVK device handle!\n");
return NVAPI_ERROR;
}
ID3D11Device_GetImmediateContext(d3d11_device, &ctx);
if (FAILED(IUnknown_QueryInterface(ctx, &IID_ID3D11VkExtContext, (void **)&dxvk_ext_context)))
{
ERR("Failed to get DXVK context handle!\n");
return NVAPI_ERROR;
}
ID3D11VkExtContext_SetDepthBoundsTest(dxvk_ext_context, bEnable, fMinDepth, fMaxDepth);
return NVAPI_OK;
}
widl generator
idl_generator = generator(widl,
output : [ '@[email protected]' ],
arguments : [ target_arch, '-o', '@OUTPUT@', '-D__WINESRC__', '@EXTRA_ARGS@', '@INPUT@' ])
+ #include "dxvk.h" in the nvapi.c file.
@pchome
Was the dxvk.h header file supposed to be included in the .zip?
No, dxvk.h generated from dxvk.idl. That's why widl generator sample included.
Edit: or just do $ widl dxvk.idl.
So is dxvk.h generated during the build, and then able to be used as a #include statement cos it IS being "built"? Or is it just a "this is how you CAN generate it, and you put it in the /include folder"?
Cos i might be missing another statement for the meson.build to point to some include folder i guess.
(Yes, i can generate it manually like you say with widl, and then manually put the dxvk.h file in /include, but i am unsure if that was the purpose)
So is dxvk.h generated during the build
Yes. idl just easier to deal with. As you can see it's almost identical to the original header file from dxvk-ags, so easier to modify/update.
But if you want to put the dxvk.h file in /include, then do it. Not a big deal.
I added the generation to meson.build as you described (i think atleast), and building got no error... but adding #include dxvk.h to nvapi.c got me a «not found» error.
So maybe i need to add somthing to my meson include_dir statement or something?
Or does building this with meson mean its automatically included without needing #include statement? (Sorry for being thick about it hehe)
Will look some more into it after the weekend tho
.../dlls/nvapi> $ ls
dxvk.idl meson.build nvapi.c nvapi.spec tests
@pchome
Well.. its not easy for me because i am stupid.
Could i have a snippid from your top meson.build file where you declare such things as widl = find_program('widl')?
Cos i suspect you might have some nvapi_dll = declare_dependency or something there that actually generate the dxvk.h file... Cos just adding idl_generator.process('dxvk.idl'), to the dlls/nvapi/meson.build file does not seem to actually generate anything useful for me i think?
I did NOT put the dxvk.h header in /include, as you say it should be generated from meson. :)
Or i could just generate it manually and copy it manually to /include rather than fiddle with meson (that i have no clue what i am doing it seems) for endless hours :)
Could i have a snippid from your top meson.build file where you declare such things as widl = find_program('widl')?
cpu_family = target_machine.cpu_family()
target_arch = cpu_family == 'x86_64' ? '-m64' : '-m32'
widl = find_program('widl')
idl_generator = generator(widl,
output : [ '@[email protected]' ],
arguments : [ target_arch, '-o', '@OUTPUT@', '-D__WINESRC__', '@EXTRA_ARGS@', '@INPUT@' ])
Or i could just generate it manually and copy it manually to /include rather than fiddle with meson (that i have no clue what i am doing it seems) for endless hours :)
this
@pchome Thanks :)
I must have done some typo or some shiat, but redoing from fresh it worked. Sorry for the noise.
This was the commit i ended up with: https://github.com/SveSop/nvapi_standalone/commit/3e6bcc5c1984648bd1dabc0eb9aec04ee2cc1c6b
So, i did some testing with Monster Hunter Benchmark with DXVK https://github.com/doitsujin/dxvk/commit/1dadba3cce86547bce07cfc3a9edbcbb2bc24696 , and the logs read stuff like
004e:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x13c8238, 1, 0.988695, 0.992234): dxvk
004e:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x13c8238, 0, 0.000000, 1.000000): dxvk
004e:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x13c8238, 1, 0.929018, 0.981536): dxvk
004e:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x13c8238, 0, 0.000000, 1.000000): dxvk
004e:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x13c8238, 1, 0.998172, 0.998413): dxvk
004e:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x13c8238, 0, 0.000000, 1.000000): dxvk
So i think its atleast doing something so far.
Comparably i got these results:
Monster hunter benchmark w/nvapi disabled : score: 21430, avg: 97.9 fps, min: 58.4 fps
Monster hunter benchmark w/this option: score: 21665, avg: 98.9 fps, min: 57.5 fps
Probably within the error margin, so i am interested in tweaking this some more :)
Is there a game that is "broken" with current staging implementation of nvapi and dxvk that "must" fake AMD card via dxvk?
I don't know if those are broken (probably are) but generally all things UE4 try to use NvAPI.
Unreal Engine 4 requires nvapi to be present, I'm not sure if the staging implementation is broken or not. Probably is because UE4 uses the depth bounds test.
Would "Redout" be a possible test candidate for this?
https://github.com/ValveSoftware/Proton/issues/1374
This is afaik default "spoofed as AMD" atm right? But is it a UE4 game? (Is not listed on the https://wiki.unrealengine.com/Unreal_Engine_Games#Unreal_Engine_4 list tho).
Or would something like https://www.techpowerup.com/download/unreal-engine-4-elemental-tech-demo/ suffice as a test?
The tech demo tends to be fine. I think one of the first games where issues started popping up was Dragon Quext XI.
https://www.techpowerup.com/download/unreal-engine-4-elemental-tech-demo/
Although interesting as a test, it does not seem to use any nvapi calls at all. Log reports LogSynthBenchmark:Display: Adapter Name: 'GeForce RTX 2070' so it is registering a nVidia adapter, but no calls to nvapi.dll is being made.
If anyone want to test for laughs & gigglez, download it on the page, and extract to wherever you find useful in your wineprefix. Run Elemental.exe to start it.
You should edit ./Elemental/Saved/Config/WindowsNoEditor/GameUserSettings.ini with your resolution, and add this:
[/Script/Engine.Engine]
bSmoothFrameRate=false
MinSmoothedFrameRate=0
MaxSmoothedFrameRate=0
to the ./Elemental/Saved/Config/WindowsNoEditor/Engine.ini file to avoid capping at 62fps.
I recently checked EffectsCave, RealisticRendering, Reflections, ShooterGame and Temple Mobile UE4 tech demos, but none of them using Depth bounds test.
There is The Awesome Adventures of Captain Spirit is a free preview to Life is Strange 2 which uses NvAPI_D3D11_SetDepthBoundsTest.
Also, here is the UE4 games list.
p.s. don't forget about dxgi.nvapiHack = False
Strange..
I set up a new wineprefix with dxvk and custom nvapi. I have checked that nvapi is doing what it does by running a small nvapi test proggy i have made that does some calls and print the values. (If interested, i can provide source if anyone is into testing nvapi). I have mainly used this to compare what a "real" machine responds when doing the calls.
Anyway. I installed Steam, and then installed https://store.steampowered.com/app/845070/The_Awesome_Adventures_of_Captain_Spirit/. The game starts and runs just fine.
However, there is no nvapi calls being made while the game runs. I do get some nvapi calls when Steam starts up:
0030:trace:nvapi:DllMain (0x7c420000, 1, (nil))
0030:trace:nvapi:nvapi_QueryInterface (150e828)
0030:trace:nvapi:NvAPI_Initialize ()
0030:trace:nvapi:nvapi_QueryInterface (33c7358c)
0030:trace:nvapi:nvapi_QueryInterface (593e8644)
0030:trace:nvapi:nvapi_QueryInterface (694d52e)
0030:trace:nvapi:get_thunk_function (694d52e)
0030:fixme:nvapi:unimplemented_stub function 0x694d52e is unimplemented!
0030:trace:nvapi:nvapi_QueryInterface (375dbd6b)
0030:trace:nvapi:get_thunk_function (375dbd6b)
0030:fixme:nvapi:unimplemented_stub function 0x375dbd6b is unimplemented!
0030:trace:nvapi:nvapi_QueryInterface (d22bdd7e)
0030:trace:nvapi:NvAPI_Unload ()
0030:trace:nvapi:DllMain (0x7c420000, 0, (nil))
Ending in NVAPI_Unload means Steam app is unloading it tho, so maybe, just maybe i need to create something for those functions.
So far, it seems that these are the functions:
nvapi_QueryInterface (33c7358c) = /* NvAPI_Diag_ReportCallStart, not needed */
This function is disabled, so i dunno what it does.
Same with:
nvapi_QueryInterface (593e8644) = /* NvAPI_Diag_ReportCallReturn, not needed */
Dunno if "not needed" actually IS not needed tho :)
The next calls:
nvapi_QueryInterface (694d52e) = NvAPI_DRS_CreateSession
I have not made a function for this, so the call goes "unanswered" really.. but i think that this is the profile loading bit (nVidia gaming profiles).
NVAPI_INTERFACE NvAPI_DRS_CreateSession | ( | NvDRSSessionHandle * | phSession | )
And
nvapi_QueryInterface (375dbd6b) = NvAPI_DRS_LoadSettings
NVAPI_INTERFACE NvAPI_DRS_LoadSettings | ( | NvDRSSessionHandle | hSession | )
I dunno if loading those profiles is "needed", but i would not really think so. Other than that, no nvapi calls are being made after i actually start the game.
I did not test this with Proton, but might set that up if you actually KNOW NvAPI_D3D11_SetDepthBoundsTest is being used for the free game.
(And yes, dxgi.nvapiHack = False is set in my config file)
I made a log file backup for +nvapi trace, during last run. Since all those TRACE outputs ended w/ "dxvk" :
$ grep dxvk ~/.log/Proton/steam-845070-nvidia.log | wc -l
"Random" lines:
$ grep dxvk ~/.log/Proton/steam-845070-nvidia.log | tail -n 100 | head -n 5
0068:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x7dffed90, 1, 0.001787, 0.002176): dxvk
0068:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x7dffed90, 0, 0.000000, 1.000000): dxvk
0068:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x7dffed90, 1, 0.003107, 0.004313): dxvk
0068:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x7dffed90, 0, 0.000000, 1.000000): dxvk
0068:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x7dffed90, 1, 0.003470, 0.003621): dxvk
I used the vanilla nvapi patches + depth bounds patch for testing.
+loaddll to check what was actually loaded.
d3dcompiler_47 and force_gpu=nvidia(this) winetricks verbs.
No other specific changes was made for this game.
Some thoughts about measuring fps changes in a real game: Wine's WINEDEBUG="+fps" likely will not work, so maybe modified DXVK Hud or Vulkan monitor layer will do the same.
Like:
p.s. vkconfig useful tool for quick "load/unload" an layer.
Right. When launching a game directly in a wineprefix that will launch steam "to run", it seems as some wine process crashes, but the game actually continues launching. The problem then is ofc that no log data is created.
Same thing happens if i launch steam, and then launch the game in the same prefix for some reason. In windows this is no problem ofc, but everything wine tends to blow donkey balls, so yeah.. guess i will have to do some manual juggling with proton that i would rather not "customize".
(No, i do not currently have a custom-compile-setup for making my own proton)
Time to hit the sack i think.. Game starts if i do no debug logging, but as soon as i put "WINEDEBUG": "+nvapi", in the user_settings.py file, the game just exits upon launching and nothing happens.
Some spam of:
0051:fixme:dbghelp:elf_search_auxv can't find symbol in module
0051:fixme:dbghelp:elf_search_auxv can't find symbol in module
0051:fixme:dbghelp:elf_search_auxv can't find symbol in module
0051:fixme:dbghelp:elf_search_auxv can't find symbol in module
0051:fixme:dbghelp:elf_search_auxv can't find symbol in module
0051:fixme:dbghelp:elf_search_auxv can't find symbol in module
0051:fixme:dbghelp:elf_search_auxv can't find symbol in module
pid 18053 != 18052, skipping destruction (fork without exec?)
in the steam-845070.log file.
This is with Proton 4.2-9 tho.
Try to compile nvapi for Proton 4.2 using proton's winegcc. Well, that's a problem w/o custom proton.
Wine 4.2 probably could help.
FYI, anyway I already wrote this ...
You don't need custom proton or so, don't make things overcomplicated.
```patch
--- a/proton
+++ b/proton
@@ -208,7 +213,10 @@
else:
env[ld_path_var] = lib64dir + ":" + libdir
-env["WINEDLLPATH"] = lib64dir + "/wine:" + libdir + "/wine"
+if "WINEDLLPATH" in os.environ:
+ env["WINEDLLPATH"] = os.environ["WINEDLLPATH"] + ":" + lib64dir + "/wine:" + libdir + "/wine"
+else:
+ env["WINEDLLPATH"] = lib64dir + "/wine:" + libdir + "/wine"
if "PATH" in os.environ:
env["PATH"] = bindir + ":" + os.environ["PATH"]
```
</details> and use e.g. `WINEDLLPATH="/path/to/lib64/nvapi:/path/to/lib/nvapi"`
WINEDEBUG="+navpi" set in user_settings.py (copy from user_settings.sample.py)$ tail -F /tmp/dumps/*.txt ~/steam-845070.log in separate terminal for immediate output@pchome
- do several hundreds →
#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include <X11/extensions/XTest.h>
int main() {
Display *dpy = XOpenDisplay(NULL);
KeyCode keycode = XKeysymToKeycode(dpy, XK_D);
for (int i=0; i<10; i++) {
XTestFakeKeyEvent(dpy, keycode, True, 0);
XTestFakeKeyEvent(dpy, keycode, False, 0);
XFlush(dpy);
}
XCloseDisplay(dpy);
return 0;
}
$ gcc key.c -o key_test -lXtst -lX11
$ ./key_test
Maybe this will work directly from the Vulkan layer.
Try to compile nvapi for Proton 4.2 using proton's winegcc. Well, that's a problem w/o custom proton.
Wine 4.2 probably could help.
I will try this, maybe some bindings nvapi <-> winedebug that does not exist when proton is built without this perhaps? Ill experiment a bit with this. I could try retrofitting the custom nvapi set with wine-devel and see if the logging crashes then aswell as a test :)
Well, i dunno how to "use proton's winegcc", as this is something you need to build when building Proton from scratch i think? (I do not have any winegcc in ~/.steam/steam/steamapps/common/Proton 4.2/dist/bin)
Cos there is some debug changes between my regular winegcc and proton's then ref:
0028:trace:loaddll:load_builtin_dll Loaded L"C:\\windows\\system32\\nvapi64.dll" at 0x7f5024670000: builtin
wine: Call from 0x7bc612cc to unimplemented function ntdll.dll.__wine_dbg_header, aborting
wine: Call from 0x7bc612cc to unimplemented function ntdll.dll.__wine_dbg_header, aborting
Bah... guess i will need to spend some time setting up a proton build when i get the time to do it.. Never touched Archlinux tho, but that is perhaps the best bet? https://github.com/Tk-Glitch/PKGBUILDS/tree/master/proton-tkg
So, see you in 2-3 months when i figure that out...
Use Wine 4.2 to build, I bet it will work.
Also, I posted my builds in Proton's issues : winelib nvapi, in case you want to test depth bounds code as is.
EDIT: If you ever built Wine from sources -- try https://github.com/ValveSoftware/wine/tree/proton_4.2 sources, no big difference. Or even just configure and build tools only.
@pchome
- do several hundreds →
> Maybe this will work directly from the Vulkan layer.
https://gist.github.com/pchome/d921830565d91514654093593a4a0483
Adjusted sample, can run in background and wait for Shift + d, then will "press" more "d"s in current window. Not tested in real game, though.
Use Wine 4.2 to build, I bet it will work.
Also, I posted my builds in Proton's issues : winelib nvapi, in case you want to test depth bounds code as is.
EDIT: If you ever built Wine from sources -- try https://github.com/ValveSoftware/wine/tree/proton_4.2 sources, no big difference. Or even just configure and build
toolsonly.
I "only" build wine from source (i say "only" cos i also have the system installed, but dont really ever use it), so if proton_4.2 source can be built just as "regular" wine ill do that and see if the debug problem is solved. Thx for the tip :)
fps_log_util.zip - key.c sample and sample script to calculate min/avg/max fps from an log file (e.g. 1976.00 / 2226.33 / 2332.00).
fps_log_layer.zip - modified monitor layer, should log strings like monitor:13508 FPS = 2204.00 (first number is a current frame).
I'll try to combine everything and test on "Captain Spirit" later.
@pchome
Oki.. i must be doing something horribly wrong i guess.. I am kinda dumb like that, and need to be spoonfed whatever minor info :)
I compiled the wine-4.2 version from the git link you gave (from proton git). No problems with that. I then replaced my systems /opt/wine-devel folder with this new 4.2 compile from proton. Upon compiling nvapi, i get all kinds of missing header files, and a multitude of missing .idl files.
My SYSTEM installed wine, is wine-devel-4.11 (yes, ofc i moved the WineHQ version back to /opt/wine-devel after the testcompile). This is what meson.build finds when it finds winegcc, widl and so on. Maybe something ELSE is at play when it comes to the "proton" source of this winetree?
I tested running "GPU Caps Viewer" program in my regular testing wineprefix, with the proton-4.2 wine version, and nvapi got the same debug error, and did not work there. Nvapi works fine if i use wine-devel-4.11 from WineHQ tho, so me thinks there is more at play other than 4.2->4.11 no?
@pchome
I did figure it out, and it was some include files in my nvapi source that was "too new" and thus pointing to other include files that i guess exist in wine > 4.10 or something..
I am going to work on making a "lite" version of the custom nvapi i have been fiddling with, cos for gaming one would not need temps/fanspeeds+++, but i am going to keep getting the REAL adaptername and driver and such, cos there are incidents where "GTX-999" or whatever staging nvapi "fakes" is not usable, aswell as the rather low driver version also make games complain at times. Grabbing the real version would imo be a +
Next thing would ofc also be to make a reproducible benchmark to tweak this SetDepthBoundsTest too :)
I am going to work on making a "lite" version of the custom nvapi ...
So maybe it worth to backport and PR some of your changes to wine-staging nvapi, as this "lite" version. Then you'll probably get more feedback and support.
_Also, the REAL driver version actually isn't REAL, games will expect Windows driver version._
p.s.
@pchome
- do several hundreds →
> Adjusted sample, can run in background and wait for Shift + d, then will "press" more "d"s in current window.
Again :smile: . Playing with gamepad I completely forgot that "D" key is a "shuffle right", not the "rotation" :man_shrugging:
Also, the game don't even reacting on "zero" delay (int XTestFakeKeyEvent(display, keycode, is_press, delay)). Some kind of threshold, I suppose. The key should be "pressed" for mush longer time.
So, probably XTestFakeRelativeMotionEvent should be used instead. Maybe +/- rel to X (REL_X event). I'll fix and share this, eventually.
I am going to work on making a "lite" version of the custom nvapi ...
So maybe it worth to backport and PR some of your changes to wine-staging nvapi, as this "lite" version. Then you'll probably get more feedback and support.
_Also, the REAL driver version actually isn't REAL, games will expect Windows driver version._
Well.. i am willing to bet that when a game checks driver versions, it is in a > X version manner, and not a list of "approved drivers". A "set list" of drivers would mean constant updates, and that is just not happening.
Unless you can provide an example of a game that requires a particular driver and nothing else, i feel it is the proper way to do this. "Faking" a driver version in nvapi would mean constant updates... (And you see how well that has gone for wine-staging version of nvapi and its driver version).
I found a nvapi function that this game (Awesome Adventures of Captain Spirit) calls for.
NvAPI_D3D11_IsNvShaderExtnOpCodeSupported
https://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/group__dx.html#ga02b540450d23167169998182787e92ea
I am not sure how to figure out HLSL support vs vulkan and whatnot..
https://github.com/SveSop/nvapi_standalone/blob/lite/dlls/nvapi/nvapi.c#L1075-L1095
Basically its a call from the game asking if a certain "opcode" is supported.
https://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/nvShaderExtnEnums_8h.html
I played a bit with nvapi too and tried to create something based on dxvk-ags. To my own surprise it even enables depth bounds test for the one UE4 game I have. I'm not sure if it really is faster since there is no in-game benchmark, but at least it hasn't gotten worse ;)
For the curious:: https://github.com/jp7677/dxvk-nvapi
Depth bounds test usually only has a minor impact on performance (e.g. in Resident Evil 2 it's only 2-3%).
Yes, very likely that this is here also the case, though would be cool to have some confirmation that it does have effect. My only actual confirmation now are lot of log statements when the call has succeeded (when adding such a log line) ;)
The only benchmark i know that utilizes the depth bounds test is Monster Hunter Online Benchmark from https://www.guru3d.com/files-details/monster-hunter-official-benchmark-download.html
When i have tested with the nvapi implementation i´ve been diddling with, i have found it <1% difference, and that might just aswell be within the margin of error.
@jp7677 You could do some testing with that benchmark if you want? Compare with and without the nvapi implementation, changing dxgi.nvapiHack setting as a comparison (and probably disable nvapi.dll´s to be sure)
@K0bin Do you remember which UE4 version uses NvAPI_D3D11_BeginUAVOverlap/NvAPI_D3D11_EndUAVOverlap and/or what the condition are for using them? The one UE4 game I have (ACC) is based on 4.22, there I haven't seen any calls for these methods.
CAT Interstellar - one more "small" UE4 game for testing depth bounds test. Currently free-to-play.
Game: The Flame in the Flood (318600)
Engine: UE4
NvAPI calls: uses only NvAPI_D3D11_SetDepthBoundsTest function (after initialization).
I tested patched nvapi from wine-staging and dxvk-nvapi.
Both winelib builds, both gave +2fps boost (in some places).
NvAPI_Initialize DXVK-NVAPI-a232b4b+: OK
NvAPI_D3D11_SetDepthBoundsTest: Succeeded
0058:trace:nvapi:DllMain (0x7f61f41e0000, 1, (nil))
0058:trace:nvapi:nvapi_QueryInterface (150e828)
0058:trace:nvapi:NvAPI_Initialize ()
0058:trace:nvapi:nvapi_QueryInterface (33c7358c)
0058:trace:nvapi:nvapi_QueryInterface (593e8644)
0058:trace:nvapi:nvapi_QueryInterface (7aaf7a04)
0058:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x5555564645e0, 1, 0.011925, 0.013000): dxvk
0058:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x5555564645e0, 0, 0.000000, 1.000000): dxvk
0058:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x5555564645e0, 1, 0.011972, 0.013263): dxvk
...
@doitsujin
Any chance we can get more information from DXVK in the similar way (interfaces)?
For example:
Would be good if we could avoid additional dependencies.
You can get all the information from IDXGIAdapter::GetDesc (not so much the nvapi hack, but the vendor id and that really should be enough in this case). You can retrieve the dxgi adapter by first querying IDXGIDevice from the d3d11 device and then using IDXGIDevice::GetParent.
@pchome Thanks a lot for confirming the few fps extra.
Regarding your second question, I don't think that's a good idea. NVAPI has a lot (really a lot) methods to query the device topology. It would be a hell of a job to implement this. Even when doing so, what would you eventually gain? Looking at UE4 Engine, this game uses NVAPI only for querying SLI and HDR status. Both are not supported with DXVK, thus returning "not-implemented" is much saner than e.g. pretending that DXVK knows about SLI.
In my opinion an NVAPI on top of DXVK should really just support the extensions DXVK provides for running games faster/better, but no extra bling-bling. UE4 engine handles "not-implemented" correctly, dunno about other engines.
@pchome as a sidenote, I'm seeing in your dxvk-nvapi git describe status (DXVK-NVAPI-a232b4b+) that you have local modifications. Should I add some ignores or did you really edited something? I'm building using docker, so I'm not sure if the current ignores are sufficient.
@doitsujin
Thanks for the info, I'll try.
@jp7677
I have no plans to implement whole nvapi API, just basic functions, required by the other games/engines to reach NvAPI_D3D11_SetDepthBoundsTest. Or just "good to have", like IIRC Unigine Superposition launcher, which should display VRAM size.
I also have no plans to support my wine-staging nvapi hacks, I'll happily use dxvk-nvapi, if you plan to support it and it became good enough to not fail here and there.
For example, I tested Monster Hunter Online using your implementation, and it fails. While runs fine with wine-staging nvapi (patched). So it's either my fault (incomplete winelib hack) or missed functionality, I'll try to figure out.
Should I add some ignores or did you really edited something?
I added some code and files in the local repo clone, required for winelib build (I have no mingw installed). Just ignore this status.
For example, I tested Monster Hunter Online using your implementation, and it fails. While runs fine with wine-staging nvapi (patched). So it's either my fault (incomplete winelib hack) or missed functionality, I'll try to figure out.
Please let me know if you know where it fails.
@pchome To actually reply: thanks for providing your "real" use case, that already sounds much more sane than what your initial question suggested ;).
dxvk-nvapi is for now just a personal experiment for me. It works for ACC, thus likely also for other UE4 games, I haven't looked much further cause all other games in my library (not that big) already run very much perfectly graphics-wise. I have though looked briefly into Batman Arkham Knight, but implementing the CUDA-DX11 interop is way out of my league.
@jp7677
that already sounds much more sane than what your initial question suggested ;).
Sorry for my bad English :man_shrugging:
I guess, almost all my questions/suggestions on github are much more sane than what I wrote by the words :smile:
Please let me know if you know where it fails.
Just a guess, before I'll actually figure out where is the problem, but unlike UE4 some games doing a lot of calls on nvapi initialization, and for unimplemented functions there is NvAPI_Status CDECL unimplemented_stub(unsigned int offset) call, which return NVAPI_ERROR, not just nullptr directly. Or, maybe, an other "magic" in void* get_thunk_function(unsigned int offset).
For MHO benchmark (the very beginning, "..." is the stub for non-nvapi log part):
0009:trace:nvapi:DllMain (0xf7800000, 1, (nil))
0009:trace:nvapi:nvapi_QueryInterface (150e828)
0009:trace:nvapi:NvAPI_Initialize ()
0009:trace:nvapi:nvapi_QueryInterface (33c7358c)
0009:trace:nvapi:nvapi_QueryInterface (593e8644)
0009:trace:nvapi:nvapi_QueryInterface (5e8f0bec)
0009:trace:nvapi:get_thunk_function (5e8f0bec)
0009:fixme:nvapi:unimplemented_stub function 0x5e8f0bec is unimplemented!
...
0009:trace:nvapi:nvapi_QueryInterface (f951a4d1)
0009:trace:nvapi:NvAPI_GetDisplayDriverVersion ((nil), 0x34e044)
0009:trace:nvapi:nvapi_QueryInterface (9abdd40d)
0009:trace:nvapi:NvAPI_EnumNvidiaDisplayHandle (0, 0x34e024)
0009:trace:nvapi:NvAPI_EnumNvidiaDisplayHandle (1, 0x34e024)
0009:trace:nvapi:nvapi_QueryInterface (4b708b54)
0009:trace:nvapi:NvAPI_D3D_GetCurrentSLIState (0xe6114164, 0x34e028)
...
0009:trace:nvapi:nvapi_QueryInterface (150e828)
0009:trace:nvapi:NvAPI_Initialize ()
0009:trace:nvapi:nvapi_QueryInterface (6c2d048c)
0009:trace:nvapi:get_thunk_function (6c2d048c)
0009:trace:nvapi:nvapi_QueryInterface (1053fa5)
0009:trace:nvapi:nvapi_QueryInterface (f951a4d1)
0009:trace:nvapi:nvapi_QueryInterface (9abdd40d)
0009:trace:nvapi:nvapi_QueryInterface (20de9260)
0009:trace:nvapi:get_thunk_function (20de9260)
...
There is mostly pointless to actually implement ALL of nvapi functions imo... BUT there are examples out there of games that query the driver version and card id if nvapi is found, so SOME functions is needed.
There was a case with someone running World of Warcraft with wine-staging a while back, and WoW stopped complaining about "too old driver". This is because the staging implementation of nvapi have some old 388.xx or whatnot driver version (cant remember on the top of my head).
The nvapi implementation i did queries a lot of stuff like gpu temp, frequency and whatnot, and was mostly for proof of concept, but is not really useful for other than testing. The "lite" branch i put up only have driver version, card id + "disabled sli" and stuff like that. (And the NvAPI_D3D11_SetDepthBoundsTest implementation).
Having a "slimmed down" version that provides the basics of needed stuff could be useful, but only if it actually gives a performance advantage. 2-5% increase would imo warrant implementation, but probably needs some more testing.
Game engines probably have sparse documentation of what it actually implements and the impact of such implementation is tho. So far i only know of UE4 and Cryengine actually using this for something performancewise, but there are other games (like WoW) that uses it to grab driver info and some other things.
Using DXVK to provide this info would perhaps not have a huge overhead like using NVML library have?
@jp7677 Since i have repeatedly been told by someone important in here what an utter asshat i am at reading c++ code, i fear i cannot contribute much to your code, but you are free to gander whatever source i have to get some ideas :)
MHO is unfortunately x86. I did the meson bits for an x86 build, but the benchmark isn't calling NvAPI_Initialize here, just loading nvapi and then unloading.
0009:trace:loaddll:load_native_dll Loaded L"C:\\Program Files (x86)\\Monster Hunter Online Benchmark\\Monster Hunter Online Benchmark\\Bin32\\nvapi.dll" at 0x65040000: native
NvAPI_DllMain
NvAPI_DllMain
0009:trace:loaddll:free_modref Unloaded module L"C:\\Program Files (x86)\\Monster Hunter Online Benchmark\\Monster Hunter Online Benchmark\\Bin32\\nvapi.dll" : native
No idea why it is doing that. (Nvapi hack is false)
(The DXVK issue list is probably not the best place to discuss this any further since this is getting somewhat off-topic.)
@pchome I've added the bit and pieces for an x32 build. Together with https://github.com/jp7677/dxvk-nvapi/commit/da83a256ec0d2d1b05f555d8823eebe7af12a100 nvapi.dll is loaded correctly and SetDepthBoundsTest is correctly used.
NvAPI_Initialize DXVK-NVAPI-da83a25: OK
NvAPI_D3D_GetCurrentSLIState: Not implemented
NvAPI_D3D11_SetDepthBoundsTest: Succeeded
@jp7677
I can confirm successful launch for winelib build too.
_BTW, my hacks to wine-staging nvapi implementation was focused on hardware PhysX support, and was created/collected based on "real" games/apps requirements (FluidMark, GPU_Caps_Viewer and a few PhysX games from my library). But, I guess, dxvk-nvapi is good enough for me to use with DXVK. I'll try to use it by default._
p.s. just in case you want to add winelib build support: dxvk-nvapi.winelib.patch.txt
You probably may want to polish this hack a bit, also *.spec and cross files required (can be found in known places). Note: additional compiler flags: --no-gnu-unique -DNOMINMAX -fpermissive either in the cross files or meson.build.
@pchome Well, I'm feeling honored ;)
Regarding winelib support, to be honest I would prefer to keep the build system limited as it is now.
Hi,
Any idea on how to get Beyond Two Souls working ? Actually it get the "0180:err:nvapi:NvAPI_D3D11_SetDepthBoundsTest Failed to get wined3d device handle!".
I tried to disable nvapihack, and use jp7677 native nvapi64, but if i do this i get another error :
"warn: D3D11DeviceContext::QueryInterface: Unknown interface query"
I'm on wine-staging 5.10 with dxvk 1.7 (i tried with 1.6 too for now but not work either). Will try older version awaiting response
@Ski-lleR I can't comment on the game itself, but are you sure that you are using the native version of nvapi64? Do you see any console output from nvapi, e.g. from initialization (from https://github.com/jp7677/dxvk-nvapi/blob/master/src/nvapi.cpp#L88)?
Yeah i do have the output from nvapi, here what i get in first :
NvAPI_QueryInterface 0xad298d3f: Called with unknown offset
NvAPI_Initialize DXVK-NVAPI-v0.1.2: OK
Well i tried with old wine version, actually the game just work fine with wine-stating 5.9 without dxvk, just have to bisect to found the regression.
But i would also like to find why it not work with dxvk ^^
Edit : actually i just caused the problem myself, it's the prefix upgrade from 5.9 to 5.10 who caused the problem. I cleaned up the prefix, now it work fine on 5.10 staging with dxvk.
@Ski-lleR
You could also try my nvapi "lite" version for DXVK that have the SetDepthBoundsTest function.
https://github.com/SveSop/nvapi_standalone/releases/tag/0.2L
I would say it requires newer nVidia driver (typically of the 440 branch), and probably wine-staging-5.9 or thereabouts.
Either compile yourself (require meson/ninja ++), or try the binaries.
Setup with WINEPREFIX=/your/wine/prefix ./setup_nvapi.sh install (kind of same as installing DXVK with symlinks).
There is also fake-dll's included in case there is a game that actually checks version of the nvapi.dll's and such (that i think may happen in rare cases). This requires a bit more fiddling (replacing wineprefix fake-dll's + copy the dll.so's into your binary wine folder and such).
Other than that, the other solution is probably to make sure your dxvk.conf file contains: dxgi.nvapiHack = True , or not at all, since the default is "True". Further you should also disable the following .dll's
nvapi.dll
nvapi64.dll
nvcuda.dll
nvcuvid.dll
nvencodeapi.dll
nvencodeapi64.dll
(Or build wine without nvapi support at all)
This is because SOME games load the .dll's if they are found regardless of detected AMD gfx card.
Some games can gain something like 1-2% performance increase by using the nvapi library, but mostly it is of no huge benefit, and creates more hassle than just disabling nvapi altogether... and this is why this is not really "snapped up" as a thing...
Edit : actually i just caused the problem myself, it's the prefix upgrade from 5.9 to 5.10 who caused the problem. I cleaned up the prefix, now it work fine on 5.10 staging with dxvk.
Does it also uses SetDepthBoundsTest from nvapi (whichever implementation)?
Edit : actually i just caused the problem myself, it's the prefix upgrade from 5.9 to 5.10 who caused the problem. I cleaned up the prefix, now it work fine on 5.10 staging with dxvk.
Does it also uses SetDepthBoundsTest from nvapi (whichever implementation)?
I don't know, it's the first time i saw this message on wine output. But with the clean profile the message appear too, it's just different without your nvapi, so i assume it use it. Well the profile was almost pretty "clean", cause i use one per game, and this one require no override or any specific trick, it simply not survived the wine prefix upgrade.
@SveSop
Thanks for all the additional info, so for future case i know how to deal with this. Will just continue without nvapi cause the game have no problem so far.
I don't know, it's the first time i saw this message on wine output. But with the clean profile the message appear too, it's just different without your nvapi, so i assume it use it. Well the profile was almost pretty "clean", cause i use one per game, and this one require no override or any specific trick, it simply not survived the wine prefix upgrade.
If this method is used by this game similar like UE4 does, you should see a confirmation once on the console f(rom https://github.com/jp7677/dxvk-nvapi/blob/master/src/nvapi.cpp#L34)
If it used correctly, you should see a confirmation once on the console f(rom https://github.com/jp7677/dxvk-nvapi/blob/master/src/nvapi.cpp#L34)
Without nvapi override :
0178:err:nvapi:NvAPI_D3D11_SetDepthBoundsTest Failed to get wined3d device handle!
0178:fixme:nvapi:unimplemented_stub function 0x6c2d048c is unimplemented!
With :
NvAPI_GetErrorMessage -1: OK
warn: D3D11DeviceContext::QueryInterface: Unknown interface query
So no confirmation
With "nvapi_lite" and running "Monster Hunter World Benchmark" it reads:
0160:trace:nvapi:nvapi_QueryInterface (7aaf7a04)
0160:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x1a885b0, 0, 0.000000, 1.000000): dxvk
0160:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x1a885b0, 1, 0.000000, 1.000000): dxvk
0160:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x1a885b0, 0, 0.000000, 1.000000): dxvk
0160:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x1a885b0, 0, 0.000000, 1.000000): dxvk
0160:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x1a885b0, 1, 0.000000, 1.000000): dxvk
0160:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x1a885b0, 1, 0.999954, 0.999958): dxvk
0160:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x1a885b0, 0, 0.000000, 1.000000): dxvk
0160:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x1a885b0, 1, 0.999571, 0.999594): dxvk
0160:trace:nvapi:NvAPI_D3D11_SetDepthBoundsTest (0x1a885b0, 0, 0.000000, 1.000000): dxvk
(And loads more throughout running)
And from what i gather "working correctly"... although it is hard to quantify the difference, as you cant really disable nvapi when using nVidia hardware in Windows to test the "real" difference.
I think i ended up with around 1-2% increase when running with this under wine/dxvk.
If it used correctly, you should see a confirmation once on the console f(rom https://github.com/jp7677/dxvk-nvapi/blob/master/src/nvapi.cpp#L34)
Without nvapi override :
0178:err:nvapi:NvAPI_D3D11_SetDepthBoundsTest Failed to get wined3d device handle!
0178:fixme:nvapi:unimplemented_stub function 0x6c2d048c is unimplemented!With :
NvAPI_GetErrorMessage -1: OK
warn: D3D11DeviceContext::QueryInterface: Unknown interface querySo no confirmation
Out of curiosity, could you post all console output from nvapi? Afaik the DXVK warning should also contain a GUID, could you also post the full warning?
That said, I guess the game uses more of nvapi than just the very basic stuff that UE4 needs, so you are probably better off with spoofing AMD and disabling nvapi all together (which is for good reason the default/recommendation for DXVK).
The only output i have from nvapi is this at start :
NvAPI_QueryInterface 0xad298d3f: Called with unknown offset
NvAPI_Initialize DXVK-NVAPI-v0.1.2: OK
Then i got spammed with during all the play :
NvAPI_GetErrorMessage -1: OK
warn: D3D11DeviceContext::QueryInterface: Unknown interface query
warn: db6f6ddb-ac77-4e88-8253-819df9bbf140
Thanks. Yeah, I guess the game wants to use far more than just simple setdepthboundstest from nvapi. I can only find a reference to that offset (0xad298d3f) within the Renderdoc source code and there it is passed on to nvapi. So no idea and I would again suggest to just spoof AMD, thus set nvapihack to the default, and disable nvapi like described here https://github.com/doitsujin/dxvk/wiki/Common-issues#nvapi
Since i don't have an nvidia card, that's what i do, disabling nvapi. Ive first started by providing nvapi assuming it will get ride of any nvapi message, but that's not the good way to follow.
And after reading the common issue, i see game make use of nvapi when detecting NVIDIA card, so in the end is this the game that don't use good code to detect gpu, or a wine bug ?
Well, according to your logs you seem to use either native or built-in nvapi. Could you try with export WINEDLLOVERRIDES="nvapi,nvapi64=d" to actually prevent wine to load any nvapi/nvapi64 library?
It's just because the log are from before ive set the dll override to disabled.
I'm not entirely sure I understood what you mean. But yeah, if disabling nvapi got you rid of these nvapi log spam, then you can assume that the game just looks for an nvapi.dll or nvapi64.dll to be present and uses it right away when having found it.
Since i don't have an nvidia card, that's what i do, disabling nvapi.
Heh... Yeah, i wonder why nvapi did not work without a nVidia card...
I must have missed that crucial bit of information some place i guess.
That supposed to be a good news? :smiley:
That supposed to be a good news? smiley
Not really anything revolutionary new there i tho. They still have not made all the "call addresses" public, and most of that someone already have posted random places anyway, but picking it from IDA and whatnot.
Some of the "guessed functions" implemented for the few functions i have looked at has been mostly correct anyway.
But in all fairness, getting stuff confirmed might absolutely help those interested :) So its a step in the right direction for sure!
Example from running GPUCapsViewer:
0009:trace:0009:trace:nvapi:get_thunk_function (329d77cd)
0009:fixme:nvapi:unimplemented_stub function 0x329d77cd is unimplemented!
The function address 329d77cd is not to be found in the SDK, so that does not help... However, on one of the "various places", i have found what function it calls. (which is not present in the SDK either).
So yeah, a step in the right direction, but not "soon you will have a fully working nvapi for linux".
I must admit i have not tested that many things the last few months, cos i am not sure the benefit of actually having a function made outweighs the dxgi.nvapiHack = True in DXVK. Maybe if was needed for HDR or some other stuff it could be nice?
I am willing to fiddle more with it, and if ppl had good examples where a game either does not work, or is severely bugged/slowed by using dxgi.nvapiHack = False along with the wine-staging implementation of nvapi, that would be valuable. The only example i know i have done some testing with is the SetDepthBoundsTest and using MonsterHunter World demo I found it maybe to be like a 1% increase (probably within a random margin of error..) vs. using nvapiHack and fake AMD card.
Maybe for GSync? Anyone know of a game not working with GSync because of missing nvapi implementation for wine?
So yeah, a step in the right direction, but not "soon you will have a fully working nvapi for linux".
Eeeh...Yeah i can imagine it's far from seeing fully working PhysX in Batman Arkham Knight
So yeah, a step in the right direction, but not "soon you will have a fully working nvapi for linux".
Eeeh...Yeah i can imagine it's far from seeing fully working PhysX in Batman Arkham Knight
Well, i do know that atleast for some apps, nvapi calls give the app things like
NvAPI_GetPhysicalGPUFromGPUID
and depending on said app/game it would either use GPU to do physx rendering, or cpu. So if AK calls nvapi, get none/wrong reply, CPU will be used for physx rendering. The wine-staging nvapi gives the correct reply on a nVidia gpu afaik, but i would think if you use the default dxvk.conf setting of dxgi.nvapiHack = True (or not configured), it would use CPU rendering.
Last time i've checked this particular game when enabling nvapi parts of PhysX (in-game Settings not available and looks like disabled, i mean like interactive fog) if you try to force them through config file - game will crash.
However rest of PhysX options works fine.
(of course CUDA packages was properly set and wine-staging used, earlier games with usual implementation of non-nvapi PhysX work just fine with GPU acceleration as well)
I've added forwarding to the other DXVK D3D11 extensions and some basic system information stuff to https://github.com/jp7677/dxvk-nvapi
I've added new binaries for easy usage. Please let me know if you see something that uses BeginUAVOverlap/EndUAVOverlap or MultiDrawInstancedIndirect/MultiDrawIndexedInstancedIndirect through NVAPI. I would love to test if it makes a difference. Until now I have only seen SetDepthBoundsTest through NVAPI.
@jp7677
Thx for your efforts! :+1:
Tested with Batman Arkham Knight above, in-game settings for interactive fog still not available though, rest of PhysX seems to work as before, pretty much.
When i exited game there were some fatal error, not sure how to test it further, but i definitely haven't seen that one before so it must be caused by dxvk-nvapi, please tell me how i can provide more info on that.
Please let me know if you see something that uses BeginUAVOverlap/EndUAVOverlap or MultiDrawInstancedIndirect/MultiDrawIndexedInstancedIndirect through NVAPI.
How can i test it?
PhysX has nothing to do with this project.
How can i test it?
Ideally games that use it should be slightly faster. There shouldnt be any visual difference.
As far as i understand those options in this particular Batman game are only available if game can see that:
I'm sure that first 2 i meet, tested it with multiple other games under wine-staging
Ideally games that use it should be slightly faster.
Very hard to say, as for me game worked pretty damn good before and after dxvk-nvapi
@keybreak Thanks a lot for giving it a try.
Regarding Batman AK, basically what @K0bin says. The game wants to use NVAPI for NVIDIA shader extension (NV_EXTN_OP_VOTE_BALLOT and NV_EXTN_OP_FP16_ATOMIC). DXVK does not know about these extensions, thus dxvk-nvapi returns that these are not supported, thus nothing should be different.
(Interesting note, when I return that these extension are supported and return Ok for NvAPI_D3D11_SetNvShaderExtnSlot, I can see some visual artifacts in the benchmark. I would have expected a crash in that case. The DXVK logs contains no hint of anything unsupported. Though reading https://developer.nvidia.com/unlocking-gpu-intrinsics-hlsl there seem to be some magic behind the scenes.
Batman AK does not use NVAPI for any of the methods that are currently forwarded to DXVK. You should at least see a statement printed on the console like NvAPI_D3D11_SetDepthBoundsTest: OK when a program uses it.
The last two gameworks features (interactive fog, etc) would also need an nvcuda implementation afaik.
So there is no viable way to use / force Interactive fog / Paper debris for this game on Linux? :disappointed:
Batman AK does not use NVAPI for any of the methods that are currently forwarded to DXVK. You should at least see a statement printed on the console like NvAPI_D3D11_SetDepthBoundsTest: OK when a program uses it.
Yep, i don't see it in log... :thinking:
The last two gameworks features (interactive fog, etc) would also need an nvcuda implementation afaik.
That's interesting, i thought nvcuda already working, if you do all that
https://forum.endeavouros.com/t/linux-gaming/7339/2#heading--linux-gaming-advanced-physx
Though reading https://developer.nvidia.com/unlocking-gpu-intrinsics-hlsl there seem to be some magic behind the scenes.
As always...Nvidia with it's voodoo magic :rofl:
Here's my test on:
Click to expand
lutris-wrapper: Batman Arkham knight
Running /home/x133/.PlayOnLinux/wine/linux-amd64/5.11-staging/bin/wine /home/x133/.PlayOnLinux/wineprefix/Batman_Arkham_knight/drive_c/Games/Batman Arkham knight/Binaries/Win64/BatmanAK.exe -nologo
Initial process has started with pid 344805
Game is considered started.
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
DXVK-NVAPI v0.2
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
NvAPI Device: GeForce GTX TITAN X (450.66.0)
NvAPI Output: \\.\DISPLAY1
NvAPI_Initialize: OK
NvAPI_QueryInterface 0x33c7358c: Unknown function ID
NvAPI_QueryInterface 0x593e8644: Unknown function ID
NvAPI_QueryInterface NvAPI_Stereo_CreateConfigurationProfileRegistryKey: Not implemented method
NvAPI_GetErrorMessage -3: OK
DXVK-NVAPI v0.2
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
NvAPI Device: GeForce GTX TITAN X (450.66.0)
NvAPI Output: \\.\DISPLAY1
NvAPI_Initialize: OK
NvAPI_QueryInterface NvAPI_EnumNvidiaUnAttachedDisplayHandle: Not implemented method
NvAPI_QueryInterface 0x264c5763: Unknown function ID
NvAPI_QueryInterface 0xfb9bc2ab: Unknown function ID
NvAPI_QueryInterface 0xc228297: Unknown function ID
NvAPI_QueryInterface 0x70d413b: Unknown function ID
NvAPI_QueryInterface NvAPI_GetPhysicalGPUFromUnAttachedDisplay: Not implemented method
NvAPI_QueryInterface NvAPI_CreateDisplayFromUnAttachedDisplay: Not implemented method
NvAPI_QueryInterface NvAPI_GetLogicalGPUFromDisplay: Not implemented method
NvAPI_QueryInterface 0xf1d2777b: Unknown function ID
NvAPI_QueryInterface NvAPI_GetLogicalGPUFromPhysicalGPU: Not implemented method
NvAPI_QueryInterface NvAPI_GetPhysicalGPUsFromLogicalGPU: Not implemented method
NvAPI_QueryInterface 0x1890e8da: Unknown function ID
NvAPI_QueryInterface 0x5380ad1a: Unknown function ID
NvAPI_QueryInterface 0x6533ea3e: Unknown function ID
NvAPI_QueryInterface 0xe083a103: Unknown function ID
NvAPI_QueryInterface NvAPI_GetAssociatedNvidiaDisplayHandle: Not implemented method
NvAPI_QueryInterface NvAPI_GetAssociatedNvidiaDisplayName: Not implemented method
NvAPI_QueryInterface NvAPI_GetUnAttachedAssociatedDisplayName: Not implemented method
NvAPI_QueryInterface NvAPI_EnableHWCursor: Not implemented method
NvAPI_QueryInterface NvAPI_DisableHWCursor: Not implemented method
NvAPI_QueryInterface NvAPI_GetVBlankCounter: Not implemented method
NvAPI_QueryInterface NvAPI_SetRefreshRateOverride: Not implemented method
NvAPI_QueryInterface NvAPI_GetAssociatedDisplayOutputId: Not implemented method
NvAPI_QueryInterface 0xc5e31a58: Unknown function ID
NvAPI_QueryInterface NvAPI_GetDisplayPortInfo: Not implemented method
NvAPI_QueryInterface NvAPI_SetDisplayPort: Not implemented method
NvAPI_QueryInterface NvAPI_GetHDMISupportInfo: Not implemented method
NvAPI_QueryInterface 0x9734f1d: Unknown function ID
NvAPI_QueryInterface 0x69c6f365: Unknown function ID
NvAPI_QueryInterface 0x67efd887: Unknown function ID
NvAPI_QueryInterface 0x41511594: Unknown function ID
NvAPI_QueryInterface 0x7fc17574: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetMemoryInfo: Not implemented method
NvAPI_QueryInterface 0x774aa982: Unknown function ID
NvAPI_QueryInterface 0x2dc95125: Unknown function ID
NvAPI_QueryInterface 0x4085de45: Unknown function ID
NvAPI_QueryInterface 0x172409b4: Unknown function ID
NvAPI_QueryInterface 0xe45002d: Unknown function ID
NvAPI_QueryInterface 0x4a82c2b1: Unknown function ID
NvAPI_QueryInterface 0x95b64341: Unknown function ID
NvAPI_QueryInterface 0xf5a0f22c: Unknown function ID
NvAPI_QueryInterface 0x9fb063df: Unknown function ID
NvAPI_QueryInterface 0x3fc9a59c: Unknown function ID
NvAPI_QueryInterface 0x23b19713: Unknown function ID
NvAPI_QueryInterface 0x357cfb24: Unknown function ID
NvAPI_QueryInterface 0x2f948148: Unknown function ID
NvAPI_QueryInterface 0x38ac3081: Unknown function ID
NvAPI_QueryInterface 0xfa2f1791: Unknown function ID
NvAPI_QueryInterface 0xe0c76dfd: Unknown function ID
NvAPI_QueryInterface 0xff8bd545: Unknown function ID
NvAPI_QueryInterface 0xe563af29: Unknown function ID
NvAPI_QueryInterface NvAPI_D3D_BeginResourceRendering: Not implemented method
NvAPI_QueryInterface NvAPI_D3D_EndResourceRendering: Not implemented method
NvAPI_QueryInterface 0x15e50fc9: Unknown function ID
NvAPI_QueryInterface 0x5d19bca4: Unknown function ID
NvAPI_QueryInterface 0xc8ff7258: Unknown function ID
NvAPI_QueryInterface 0xe5a9aae0: Unknown function ID
NvAPI_QueryInterface 0x2ac084fa: Unknown function ID
NvAPI_QueryInterface 0xf8b53c69: Unknown function ID
NvAPI_QueryInterface 0xf2a54796: Unknown function ID
NvAPI_QueryInterface 0x4aceeaf7: Unknown function ID
NvAPI_QueryInterface 0xa4ad0870: Unknown function ID
NvAPI_QueryInterface 0x64d6c83d: Unknown function ID
NvAPI_QueryInterface 0xf0f4a5e0: Unknown function ID
NvAPI_QueryInterface 0xd44d3c4e: Unknown function ID
NvAPI_QueryInterface NvAPI_D3D9_GetSurfaceHandle: Not implemented method
NvAPI_QueryInterface 0x6800f5fc: Unknown function ID
NvAPI_QueryInterface 0xc7985ed5: Unknown function ID
NvAPI_QueryInterface 0x80c9fd3b: Unknown function ID
NvAPI_QueryInterface 0x6d6fdad4: Unknown function ID
NvAPI_QueryInterface 0x754033f0: Unknown function ID
NvAPI_QueryInterface 0xcde4a28a: Unknown function ID
NvAPI_QueryInterface 0x2ab714ab: Unknown function ID
NvAPI_QueryInterface 0xdbc803ec: Unknown function ID
NvAPI_QueryInterface 0x12ee68f2: Unknown function ID
NvAPI_QueryInterface 0x18cdf365: Unknown function ID
NvAPI_QueryInterface 0xd00b8317: Unknown function ID
NvAPI_QueryInterface 0x3d7a86bb: Unknown function ID
NvAPI_QueryInterface 0x22cad61: Unknown function ID
NvAPI_QueryInterface 0xb380f218: Unknown function ID
NvAPI_QueryInterface 0xfc5a155b: Unknown function ID
NvAPI_QueryInterface 0x72b19155: Unknown function ID
NvAPI_QueryInterface 0xd5e13573: Unknown function ID
NvAPI_QueryInterface 0x13c7112e: Unknown function ID
NvAPI_QueryInterface 0xf7029c5: Unknown function ID
NvAPI_QueryInterface 0x84c9d553: Unknown function ID
NvAPI_QueryInterface 0xb476bf61: Unknown function ID
NvAPI_QueryInterface 0x89ffd9a3: Unknown function ID
NvAPI_QueryInterface 0x3111bed1: Unknown function ID
NvAPI_QueryInterface 0x5cf7f862: Unknown function ID
NvAPI_QueryInterface 0x2bbda32e: Unknown function ID
NvAPI_QueryInterface 0x3d596b93: Unknown function ID
NvAPI_QueryInterface 0x7c20c5be: Unknown function ID
NvAPI_QueryInterface 0x905f5c27: Unknown function ID
NvAPI_QueryInterface 0x6317345c: Unknown function ID
NvAPI_QueryInterface 0xc182027e: Unknown function ID
NvAPI_QueryInterface 0xa4527bf8: Unknown function ID
NvAPI_QueryInterface 0xbd4bc56f: Unknown function ID
NvAPI_QueryInterface 0x1db7c52c: Unknown function ID
NvAPI_QueryInterface 0x694bff4d: Unknown function ID
NvAPI_QueryInterface 0xbfdc062c: Unknown function ID
NvAPI_QueryInterface 0xddf5643c: Unknown function ID
NvAPI_QueryInterface 0x9d2509ef: Unknown function ID
NvAPI_QueryInterface 0x962b8af6: Unknown function ID
NvAPI_QueryInterface 0xaeaecd41: Unknown function ID
NvAPI_QueryInterface 0xb3827c8: Unknown function ID
NvAPI_QueryInterface NvAPI_D3D9_RegisterResource: Not implemented method
NvAPI_QueryInterface NvAPI_D3D9_UnregisterResource: Not implemented method
NvAPI_QueryInterface 0xe92a3cbf: Unknown function ID
NvAPI_QueryInterface 0x52417944: Unknown function ID
NvAPI_QueryInterface 0x8aac133d: Unknown function ID
NvAPI_QueryInterface 0x73eb9329: Unknown function ID
NvAPI_QueryInterface 0xae9c2019: Unknown function ID
NvAPI_QueryInterface 0xcac3ce5d: Unknown function ID
NvAPI_QueryInterface NvAPI_D3D10_SetDepthBoundsTest: Not implemented method
NvAPI_QueryInterface 0x3cea1df: Unknown function ID
NvAPI_QueryInterface 0x9ecb5c10: Unknown function ID
NvAPI_QueryInterface 0x90ab6d32: Unknown function ID
NvAPI_QueryInterface 0xa8c27fc7: Unknown function ID
NvAPI_QueryInterface 0xae6c7fb5: Unknown function ID
NvAPI_QueryInterface 0x4f0f3028: Unknown function ID
NvAPI_QueryInterface 0x5c7dbb8f: Unknown function ID
NvAPI_QueryInterface 0xbb0dda92: Unknown function ID
NvAPI_QueryInterface 0xbbc0380c: Unknown function ID
NvAPI_QueryInterface 0x76a3261a: Unknown function ID
NvAPI_QueryInterface 0x7407ac54: Unknown function ID
NvAPI_QueryInterface 0x6670b9e7: Unknown function ID
NvAPI_QueryInterface 0xae6ad564: Unknown function ID
NvAPI_QueryInterface 0x1ed3ea3f: Unknown function ID
NvAPI_QueryInterface 0x2de11d61: Unknown function ID
NvAPI_QueryInterface 0x5b803daf: Unknown function ID
NvAPI_QueryInterface 0x7a62d510: Unknown function ID
NvAPI_QueryInterface 0xda04a08b: Unknown function ID
NvAPI_QueryInterface 0xb99b688a: Unknown function ID
NvAPI_QueryInterface 0xdcda434d: Unknown function ID
NvAPI_QueryInterface 0x77c9a2d0: Unknown function ID
NvAPI_QueryInterface 0x864f7810: Unknown function ID
NvAPI_QueryInterface 0xb7f46cf3: Unknown function ID
NvAPI_QueryInterface NvAPI_D3D11_CreateDevice: Not implemented method
NvAPI_QueryInterface NvAPI_D3D11_CreateDeviceAndSwapChain: Not implemented method
NvAPI_QueryInterface 0x3119f36e: Unknown function ID
NvAPI_QueryInterface 0x919b3136: Unknown function ID
NvAPI_QueryInterface 0x7562e947: Unknown function ID
NvAPI_QueryInterface 0x988aea78: Unknown function ID
NvAPI_QueryInterface 0x9d772bba: Unknown function ID
NvAPI_QueryInterface 0xf5579360: Unknown function ID
NvAPI_QueryInterface 0xe24ceee: Unknown function ID
NvAPI_QueryInterface 0x633252d8: Unknown function ID
NvAPI_QueryInterface 0xe0b1dce9: Unknown function ID
NvAPI_QueryInterface 0x5d857a00: Unknown function ID
NvAPI_QueryInterface 0xd8cbf37b: Unknown function ID
NvAPI_QueryInterface 0x63e2f56f: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetShaderSubPipeCount: Not implemented method
NvAPI_QueryInterface 0x2eb3c140: Unknown function ID
NvAPI_QueryInterface 0x86f05d7a: Unknown function ID
NvAPI_QueryInterface 0x329d77cd: Unknown function ID
NvAPI_QueryInterface 0x4a35df54: Unknown function ID
NvAPI_QueryInterface 0xeb7af173: Unknown function ID
NvAPI_QueryInterface 0x4e2f76a8: Unknown function ID
NvAPI_QueryInterface 0xae5fbcfe: Unknown function ID
NvAPI_QueryInterface 0xb6d62591: Unknown function ID
NvAPI_QueryInterface 0xe76ada52: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetAllOutputs: Not implemented method
NvAPI_QueryInterface 0x11fbd838: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetConnectedOutputs: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetConnectedSLIOutputs: Not implemented method
NvAPI_QueryInterface 0xa3ea6f1d: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetConnectedOutputsWithLidState: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetConnectedSLIOutputsWithLidState: Not implemented method
NvAPI_QueryInterface 0x62fb1592: Unknown function ID
NvAPI_QueryInterface 0xb7476d15: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetSystemType: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetActiveOutputs: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetEDID: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_SetEDID: Not implemented method
NvAPI_QueryInterface 0x35b5fd2f: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetOutputType: Not implemented method
NvAPI_QueryInterface 0xd2277e3a: Unknown function ID
NvAPI_QueryInterface 0x36cff969: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_ValidateOutputCombination: Not implemented method
NvAPI_QueryInterface 0x4eca2c10: Unknown function ID
NvAPI_QueryInterface 0xd988f0f3: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetBusType: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetBusSlotId: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetIRQ: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetVbiosRevision: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetVbiosOEMRevision: Not implemented method
NvAPI_QueryInterface 0xe1d5daba: Unknown function ID
NvAPI_QueryInterface 0xfc13ee11: Unknown function ID
NvAPI_QueryInterface 0xb7ab19b9: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetVbiosVersionString: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetAGPAperture: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetCurrentAGPRate: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetCurrentPCIEDownstreamWidth: Not implemented method
NvAPI_QueryInterface 0x3f28e1b9: Unknown function ID
NvAPI_QueryInterface 0x3bd32008: Unknown function ID
NvAPI_QueryInterface 0xe3795199: Unknown function ID
NvAPI_QueryInterface 0x8456ff3d: Unknown function ID
NvAPI_QueryInterface 0x521566bb: Unknown function ID
NvAPI_QueryInterface 0x524b9773: Unknown function ID
NvAPI_QueryInterface 0x387b2e41: Unknown function ID
NvAPI_QueryInterface 0xed9e8057: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetVirtualFrameBufferSize: Not implemented method
NvAPI_QueryInterface 0xe4b701e3: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetQuadroStatus: Not implemented method
NvAPI_QueryInterface 0xdee047ab: Unknown function ID
NvAPI_QueryInterface 0xd4f3944c: Unknown function ID
NvAPI_QueryInterface 0x14b83a5f: Unknown function ID
NvAPI_QueryInterface 0xa4218928: Unknown function ID
NvAPI_QueryInterface 0x57f7caac: Unknown function ID
NvAPI_QueryInterface 0x51ccdb2a: Unknown function ID
NvAPI_QueryInterface 0x7975c581: Unknown function ID
NvAPI_QueryInterface 0x11104158: Unknown function ID
NvAPI_QueryInterface 0x17073a3c: Unknown function ID
NvAPI_QueryInterface 0xd8265d24: Unknown function ID
NvAPI_QueryInterface 0x25f17421: Unknown function ID
NvAPI_QueryInterface 0x32e1d697: Unknown function ID
NvAPI_QueryInterface 0xf91e777b: Unknown function ID
NvAPI_QueryInterface 0x1bd69f49: Unknown function ID
NvAPI_QueryInterface 0x6f151055: Unknown function ID
NvAPI_QueryInterface 0x7bc207f8: Unknown function ID
NvAPI_QueryInterface 0x5d7ccaeb: Unknown function ID
NvAPI_QueryInterface 0x1ea54a3b: Unknown function ID
NvAPI_QueryInterface 0x7bcf4ac: Unknown function ID
NvAPI_QueryInterface 0xda141340: Unknown function ID
NvAPI_QueryInterface 0x891fa0ae: Unknown function ID
NvAPI_QueryInterface 0x8f6ed0fb: Unknown function ID
NvAPI_QueryInterface 0x518a32c: Unknown function ID
NvAPI_QueryInterface 0x987947cd: Unknown function ID
NvAPI_QueryInterface 0xd8c4fe63: Unknown function ID
NvAPI_QueryInterface 0xa69f8e29: Unknown function ID
NvAPI_QueryInterface 0xba94c56e: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetCurrentPstate: Not implemented method
NvAPI_QueryInterface 0x88c82104: Unknown function ID
NvAPI_QueryInterface 0xfdfc7d49: Unknown function ID
NvAPI_QueryInterface 0xb23b70ee: Unknown function ID
NvAPI_QueryInterface 0xfa579a0f: Unknown function ID
NvAPI_QueryInterface 0x189a1fdf: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetDynamicPstatesInfoEx: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetThermalSettings: Not implemented method
NvAPI_QueryInterface 0x1b71d425: Unknown function ID
NvAPI_QueryInterface 0x6683ee65: Unknown function ID
NvAPI_QueryInterface 0x8cd42541: Unknown function ID
NvAPI_QueryInterface 0xaf97fe75: Unknown function ID
NvAPI_QueryInterface 0xdf0dfcdd: Unknown function ID
NvAPI_QueryInterface 0x4fcb326e: Unknown function ID
NvAPI_QueryInterface 0x30c805d5: Unknown function ID
NvAPI_QueryInterface 0x5757474a: Unknown function ID
NvAPI_QueryInterface 0xca36a3ab: Unknown function ID
NvAPI_QueryInterface 0x6dfd1c8c: Unknown function ID
NvAPI_QueryInterface 0xaed02700: Unknown function ID
NvAPI_QueryInterface 0x6bb1ee5d: Unknown function ID
NvAPI_QueryInterface 0x57d9060f: Unknown function ID
NvAPI_QueryInterface 0x5dfab48a: Unknown function ID
NvAPI_QueryInterface 0x79ad0307: Unknown function ID
NvAPI_QueryInterface 0x15658be6: Unknown function ID
NvAPI_QueryInterface 0x25201f3d: Unknown function ID
NvAPI_QueryInterface 0xa81f8992: Unknown function ID
NvAPI_QueryInterface 0x64f7d53c: Unknown function ID
NvAPI_QueryInterface 0x21e2cf70: Unknown function ID
NvAPI_QueryInterface 0x96370089: Unknown function ID
NvAPI_QueryInterface 0x6a8937c6: Unknown function ID
NvAPI_QueryInterface 0x6b8809b4: Unknown function ID
NvAPI_QueryInterface 0xb4b26b65: Unknown function ID
NvAPI_QueryInterface 0x4db019e6: Unknown function ID
NvAPI_QueryInterface 0x8a50f126: Unknown function ID
NvAPI_QueryInterface 0xf409d5e5: Unknown function ID
NvAPI_QueryInterface 0x813d89a8: Unknown function ID
NvAPI_QueryInterface 0xb539a26e: Unknown function ID
NvAPI_QueryInterface 0x76a70e8d: Unknown function ID
NvAPI_QueryInterface NvAPI_I2CRead: Not implemented method
NvAPI_QueryInterface NvAPI_I2CWrite: Not implemented method
NvAPI_QueryInterface 0x283ac65a: Unknown function ID
NvAPI_QueryInterface 0x4d7b0709: Unknown function ID
NvAPI_QueryInterface 0x76bfa16b: Unknown function ID
NvAPI_QueryInterface 0x50016c78: Unknown function ID
NvAPI_QueryInterface 0xb8249127: Unknown function ID
NvAPI_QueryInterface 0x2040ac5d: Unknown function ID
NvAPI_QueryInterface 0x1ead124c: Unknown function ID
NvAPI_QueryInterface 0x5cac215e: Unknown function ID
NvAPI_QueryInterface 0x18a35445: Unknown function ID
NvAPI_QueryInterface 0x493584d6: Unknown function ID
NvAPI_QueryInterface 0x4306deac: Unknown function ID
NvAPI_QueryInterface 0x75dd3e6a: Unknown function ID
NvAPI_QueryInterface 0x25bfb10: Unknown function ID
NvAPI_QueryInterface 0xe7b1198d: Unknown function ID
NvAPI_QueryInterface 0xfe0e5187: Unknown function ID
NvAPI_QueryInterface 0x77d8f573: Unknown function ID
NvAPI_QueryInterface 0x58337fa3: Unknown function ID
NvAPI_QueryInterface 0xdc2bd4a6: Unknown function ID
NvAPI_QueryInterface 0xa91f88eb: Unknown function ID
NvAPI_QueryInterface 0x80ebc01f: Unknown function ID
NvAPI_QueryInterface 0x11bdc4d7: Unknown function ID
NvAPI_QueryInterface 0xd9c0e326: Unknown function ID
NvAPI_QueryInterface 0xe5a518dc: Unknown function ID
NvAPI_QueryInterface 0x38a18c40: Unknown function ID
NvAPI_QueryInterface 0x2fa7e0eb: Unknown function ID
NvAPI_QueryInterface 0x3f2c5b97: Unknown function ID
NvAPI_QueryInterface 0xf0b18453: Unknown function ID
NvAPI_QueryInterface 0x578b6382: Unknown function ID
NvAPI_QueryInterface 0x8ae4b4ca: Unknown function ID
NvAPI_QueryInterface 0x3ab6a38a: Unknown function ID
NvAPI_QueryInterface 0xb7fa5440: Unknown function ID
NvAPI_QueryInterface 0x6ae878a4: Unknown function ID
NvAPI_QueryInterface 0x8682711b: Unknown function ID
NvAPI_QueryInterface 0xa5b31eb8: Unknown function ID
NvAPI_QueryInterface 0x29fbc5ea: Unknown function ID
NvAPI_QueryInterface NvAPI_SYS_GetChipSetInfo: Not implemented method
NvAPI_QueryInterface NvAPI_SYS_GetLidAndDockInfo: Not implemented method
NvAPI_QueryInterface 0xce8200e8: Unknown function ID
NvAPI_QueryInterface 0xcf00d48e: Unknown function ID
NvAPI_QueryInterface 0x1003328a: Unknown function ID
NvAPI_QueryInterface 0x6579f1c8: Unknown function ID
NvAPI_QueryInterface 0xf8181529: Unknown function ID
NvAPI_QueryInterface 0xb6ef8b9: Unknown function ID
NvAPI_QueryInterface 0x9321ca5b: Unknown function ID
NvAPI_QueryInterface 0x1bb5779a: Unknown function ID
NvAPI_QueryInterface 0xcae9a69: Unknown function ID
NvAPI_QueryInterface 0x48ec6e45: Unknown function ID
NvAPI_QueryInterface NvAPI_OGL_ExpertModeSet: Not implemented method
NvAPI_QueryInterface NvAPI_OGL_ExpertModeGet: Not implemented method
NvAPI_QueryInterface NvAPI_OGL_ExpertModeDefaultsSet: Not implemented method
NvAPI_QueryInterface NvAPI_OGL_ExpertModeDefaultsGet: Not implemented method
NvAPI_QueryInterface 0x7eb95503: Unknown function ID
NvAPI_QueryInterface 0x271ebe10: Unknown function ID
NvAPI_QueryInterface 0x1b765642: Unknown function ID
NvAPI_QueryInterface 0xe04f3d86: Unknown function ID
NvAPI_QueryInterface 0xdc27d5d4: Unknown function ID
NvAPI_QueryInterface 0xafc4833e: Unknown function ID
NvAPI_QueryInterface 0x42892957: Unknown function ID
NvAPI_QueryInterface 0xbf6c1762: Unknown function ID
NvAPI_QueryInterface 0x854ba405: Unknown function ID
NvAPI_QueryInterface 0xe7cb998d: Unknown function ID
NvAPI_QueryInterface 0xa9062c78: Unknown function ID
NvAPI_QueryInterface 0x61d7b624: Unknown function ID
NvAPI_QueryInterface 0x4144111a: Unknown function ID
NvAPI_QueryInterface 0xf98854c8: Unknown function ID
NvAPI_QueryInterface 0x3efada1d: Unknown function ID
NvAPI_QueryInterface 0x8e985ccd: Unknown function ID
NvAPI_QueryInterface 0xf36a668d: Unknown function ID
NvAPI_QueryInterface 0xf5f4d01: Unknown function ID
NvAPI_QueryInterface NvAPI_SetView: Not implemented method
NvAPI_QueryInterface NvAPI_GetView: Not implemented method
NvAPI_QueryInterface NvAPI_SetViewEx: Not implemented method
NvAPI_QueryInterface NvAPI_GetViewEx: Not implemented method
NvAPI_QueryInterface NvAPI_GetSupportedViews: Not implemented method
NvAPI_QueryInterface 0xb68f3440: Unknown function ID
NvAPI_QueryInterface 0x45aea29b: Unknown function ID
NvAPI_QueryInterface 0x5850e9: Unknown function ID
NvAPI_QueryInterface 0xb3bb0772: Unknown function ID
NvAPI_QueryInterface 0x4ecbea37: Unknown function ID
NvAPI_QueryInterface 0x55a45ad2: Unknown function ID
NvAPI_QueryInterface 0x8b8c90e4: Unknown function ID
NvAPI_QueryInterface 0xc0c4c680: Unknown function ID
NvAPI_QueryInterface 0xacce03f4: Unknown function ID
NvAPI_QueryInterface 0x7def8998: Unknown function ID
NvAPI_QueryInterface 0x29e0a109: Unknown function ID
NvAPI_QueryInterface 0x25abda26: Unknown function ID
NvAPI_QueryInterface 0xfb90bdc1: Unknown function ID
NvAPI_QueryInterface 0xfa66ed29: Unknown function ID
NvAPI_QueryInterface 0x14ff532d: Unknown function ID
NvAPI_QueryInterface 0xa97ebefa: Unknown function ID
NvAPI_QueryInterface 0x95256d18: Unknown function ID
NvAPI_QueryInterface 0x28a480cf: Unknown function ID
NvAPI_QueryInterface 0x1c0f37ab: Unknown function ID
NvAPI_QueryInterface 0x130e96d7: Unknown function ID
NvAPI_QueryInterface 0x6a56e20: Unknown function ID
NvAPI_QueryInterface 0x5a96d0f4: Unknown function ID
NvAPI_QueryInterface 0x84244524: Unknown function ID
NvAPI_QueryInterface 0xcb7b09d2: Unknown function ID
NvAPI_QueryInterface 0x977c45e6: Unknown function ID
NvAPI_QueryInterface 0xf74926f5: Unknown function ID
NvAPI_QueryInterface 0xbe5c71cb: Unknown function ID
NvAPI_QueryInterface 0x8d5ccfcc: Unknown function ID
NvAPI_QueryInterface 0x872b4463: Unknown function ID
NvAPI_QueryInterface 0xfb22d656: Unknown function ID
NvAPI_QueryInterface 0xe23b68c1: Unknown function ID
NvAPI_QueryInterface 0x35582435: Unknown function ID
NvAPI_QueryInterface 0x106ec09a: Unknown function ID
NvAPI_QueryInterface 0x2df387ad: Unknown function ID
NvAPI_QueryInterface 0x5c909191: Unknown function ID
NvAPI_QueryInterface 0x2da1e50f: Unknown function ID
NvAPI_QueryInterface 0x38af5465: Unknown function ID
NvAPI_QueryInterface 0xddb1017f: Unknown function ID
NvAPI_QueryInterface 0x8f90d07: Unknown function ID
NvAPI_QueryInterface 0xd28ea837: Unknown function ID
NvAPI_QueryInterface 0xf4306524: Unknown function ID
NvAPI_QueryInterface 0x1af3b2b7: Unknown function ID
NvAPI_QueryInterface 0x504d9215: Unknown function ID
NvAPI_QueryInterface 0x9f30e3d1: Unknown function ID
NvAPI_QueryInterface 0xa3580b83: Unknown function ID
NvAPI_QueryInterface 0xf698c5e1: Unknown function ID
NvAPI_QueryInterface 0x6a04e6ae: Unknown function ID
NvAPI_QueryInterface 0x49f86afb: Unknown function ID
NvAPI_QueryInterface 0x4b700d2a: Unknown function ID
NvAPI_QueryInterface 0x6d9651b6: Unknown function ID
NvAPI_QueryInterface 0x952e408f: Unknown function ID
NvAPI_QueryInterface 0xe8dc7acf: Unknown function ID
NvAPI_QueryInterface 0xb94b341b: Unknown function ID
NvAPI_QueryInterface 0x1c5659cd: Unknown function ID
NvAPI_QueryInterface 0x54fe75a: Unknown function ID
NvAPI_QueryInterface 0x18919887: Unknown function ID
NvAPI_QueryInterface 0x4feeb498: Unknown function ID
NvAPI_QueryInterface 0x2f5b08e0: Unknown function ID
NvAPI_QueryInterface 0x76e48826: Unknown function ID
NvAPI_QueryInterface 0x58934e9a: Unknown function ID
NvAPI_QueryInterface 0x5f6d8e71: Unknown function ID
NvAPI_QueryInterface 0xe74750e2: Unknown function ID
NvAPI_QueryInterface 0x4821ecd8: Unknown function ID
NvAPI_QueryInterface 0x13f7111e: Unknown function ID
NvAPI_QueryInterface 0xebc7a299: Unknown function ID
NvAPI_QueryInterface 0x32789091: Unknown function ID
NvAPI_QueryInterface 0x638cd19c: Unknown function ID
NvAPI_QueryInterface 0x32f707a0: Unknown function ID
NvAPI_QueryInterface 0x3df6196c: Unknown function ID
NvAPI_QueryInterface 0x801b5e51: Unknown function ID
NvAPI_QueryInterface 0x4db05311: Unknown function ID
NvAPI_QueryInterface 0xe5566f3f: Unknown function ID
NvAPI_QueryInterface 0xcbf2d7a2: Unknown function ID
NvAPI_QueryInterface 0x5d50bac8: Unknown function ID
NvAPI_QueryInterface 0xc96c4920: Unknown function ID
NvAPI_QueryInterface NvAPI_Mosaic_GetSupportedTopoInfo: Not implemented method
NvAPI_QueryInterface NvAPI_Mosaic_GetTopoGroup: Not implemented method
NvAPI_QueryInterface NvAPI_Mosaic_GetOverlapLimits: Not implemented method
NvAPI_QueryInterface NvAPI_Mosaic_SetCurrentTopo: Not implemented method
NvAPI_QueryInterface NvAPI_Mosaic_GetCurrentTopo: Not implemented method
NvAPI_QueryInterface NvAPI_Mosaic_EnableCurrentTopo: Not implemented method
NvAPI_QueryInterface NvAPI_GetSupportedMosaicTopologies: Not implemented method
NvAPI_QueryInterface NvAPI_GetCurrentMosaicTopology: Not implemented method
NvAPI_QueryInterface NvAPI_SetCurrentMosaicTopology: Not implemented method
NvAPI_QueryInterface NvAPI_EnableCurrentMosaicTopology: Not implemented method
NvAPI_QueryInterface 0xbd669b00: Unknown function ID
NvAPI_QueryInterface 0x6090c927: Unknown function ID
NvAPI_QueryInterface 0xff4e7d40: Unknown function ID
NvAPI_QueryInterface 0x3c6346cc: Unknown function ID
NvAPI_QueryInterface 0xa2a9f4ad: Unknown function ID
NvAPI_QueryInterface 0x38913465: Unknown function ID
NvAPI_QueryInterface 0xbb9ef1c3: Unknown function ID
NvAPI_QueryInterface 0x26c63de3: Unknown function ID
NvAPI_QueryInterface 0xa3e36f0a: Unknown function ID
NvAPI_QueryInterface 0x50f44fef: Unknown function ID
NvAPI_QueryInterface 0xbf739fff: Unknown function ID
NvAPI_QueryInterface 0x857186dd: Unknown function ID
NvAPI_QueryInterface 0xaafd4ebc: Unknown function ID
NvAPI_QueryInterface NvAPI_GSync_QueryCapabilities: Not implemented method
NvAPI_QueryInterface 0x971c1410: Unknown function ID
NvAPI_QueryInterface 0xaca805e6: Unknown function ID
NvAPI_QueryInterface 0x318018a0: Unknown function ID
NvAPI_QueryInterface 0x9ea851bb: Unknown function ID
NvAPI_QueryInterface 0x4c7f9e3e: Unknown function ID
NvAPI_QueryInterface 0x468abdd7: Unknown function ID
NvAPI_QueryInterface 0xc929dc63: Unknown function ID
NvAPI_QueryInterface 0x82cb26b7: Unknown function ID
NvAPI_QueryInterface 0x21821099: Unknown function ID
NvAPI_QueryInterface 0x462fc0a0: Unknown function ID
NvAPI_QueryInterface 0xe140175e: Unknown function ID
NvAPI_QueryInterface 0x42205bcb: Unknown function ID
NvAPI_QueryInterface 0xe65e001c: Unknown function ID
NvAPI_QueryInterface NvAPI_GSync_GetControlParameters: Not implemented method
NvAPI_QueryInterface NvAPI_GSync_GetStatusParameters: Not implemented method
NvAPI_QueryInterface 0xf68eb811: Unknown function ID
NvAPI_QueryInterface 0x79b85e23: Unknown function ID
NvAPI_QueryInterface 0x7d2794ab: Unknown function ID
NvAPI_QueryInterface 0xcc40cc37: Unknown function ID
NvAPI_QueryInterface 0xb0c0a5fd: Unknown function ID
NvAPI_QueryInterface 0x5e4f3b9f: Unknown function ID
NvAPI_QueryInterface 0x4af0011d: Unknown function ID
NvAPI_QueryInterface 0x9962c97c: Unknown function ID
NvAPI_QueryInterface 0xfab69565: Unknown function ID
NvAPI_QueryInterface 0xf5e10439: Unknown function ID
NvAPI_QueryInterface 0xf3b11e68: Unknown function ID
NvAPI_QueryInterface NvAPI_GPU_GetHDCPSupportStatus: Not implemented method
NvAPI_QueryInterface 0x625d3b94: Unknown function ID
NvAPI_QueryInterface 0xb82c1f09: Unknown function ID
NvAPI_QueryInterface 0x6a9c55fc: Unknown function ID
NvAPI_QueryInterface 0xc5ad6e48: Unknown function ID
NvAPI_QueryInterface 0x6f83fb5b: Unknown function ID
NvAPI_QueryInterface 0x1d5b485b: Unknown function ID
NvAPI_QueryInterface 0xe44bd59d: Unknown function ID
NvAPI_QueryInterface 0xc9116276: Unknown function ID
NvAPI_QueryInterface 0xd8bf768c: Unknown function ID
NvAPI_QueryInterface 0x680649d7: Unknown function ID
NvAPI_QueryInterface 0x2d6f7431: Unknown function ID
NvAPI_QueryInterface 0x944fc548: Unknown function ID
NvAPI_QueryInterface 0xa8064f9: Unknown function ID
NvAPI_QueryInterface 0xa0c72ee4: Unknown function ID
NvAPI_QueryInterface 0x25eeb2c4: Unknown function ID
NvAPI_QueryInterface 0x5786cc6e: Unknown function ID
NvAPI_QueryInterface 0x4071b85e: Unknown function ID
NvAPI_QueryInterface 0x7a4174f4: Unknown function ID
NvAPI_QueryInterface 0x1aad16b4: Unknown function ID
NvAPI_QueryInterface 0x568a2292: Unknown function ID
NvAPI_QueryInterface NvAPI_Stereo_DeleteConfigurationProfileRegistryKey: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_SetConfigurationProfileValue: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_DeleteConfigurationProfileValue: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_Enable: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_Disable: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_IsEnabled: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_CreateHandleFromIUnknown: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_DestroyHandle: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_Activate: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_Deactivate: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_IsActivated: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_GetSeparation: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_SetSeparation: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_DecreaseSeparation: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_IncreaseSeparation: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_GetConvergence: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_SetConvergence: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_DecreaseConvergence: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_IncreaseConvergence: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_GetFrustumAdjustMode: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_SetFrustumAdjustMode: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_CaptureJpegImage: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_CapturePngImage: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_ReverseStereoBlitControl: Not implemented method
NvAPI_QueryInterface NvAPI_Stereo_SetNotificationMessage: Not implemented method
NvAPI_QueryInterface 0x6e1042b0: Unknown function ID
NvAPI_QueryInterface NvAPI_VIO_GetCapabilities: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_Open: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_Close: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_Status: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_SyncFormatDetect: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_GetConfig: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_SetConfig: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_SetCSC: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_GetCSC: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_SetGamma: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_GetGamma: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_SetSyncDelay: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_GetSyncDelay: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_IsRunning: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_Start: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_Stop: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_IsFrameLockModeCompatible: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_EnumDevices: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_QueryTopology: Not implemented method
NvAPI_QueryInterface 0xdceceee1: Unknown function ID
NvAPI_QueryInterface 0xfa5223f2: Unknown function ID
NvAPI_QueryInterface NvAPI_VIO_EnumSignalFormats: Not implemented method
NvAPI_QueryInterface NvAPI_VIO_EnumDataFormats: Not implemented method
NvAPI_QueryInterface NvAPI_GPU_GetTachReading: Not implemented method
NvAPI_QueryInterface 0xffbc1c18: Unknown function ID
NvAPI_QueryInterface 0xfe9d3cd0: Unknown function ID
NvAPI_QueryInterface 0xb5a3e03a: Unknown function ID
NvAPI_QueryInterface 0x7ecc6268: Unknown function ID
NvAPI_QueryInterface 0xa89a2e6: Unknown function ID
NvAPI_QueryInterface 0x4b536fb5: Unknown function ID
NvAPI_QueryInterface 0xb15d7295: Unknown function ID
NvAPI_QueryInterface 0xb0095121: Unknown function ID
NvAPI_QueryInterface 0x2d68b5c0: Unknown function ID
NvAPI_QueryInterface 0x3806baaa: Unknown function ID
NvAPI_QueryInterface 0x8e875cf9: Unknown function ID
NvAPI_QueryInterface 0xc729203c: Unknown function ID
NvAPI_QueryInterface 0xd26b8a58: Unknown function ID
NvAPI_QueryInterface 0xd3a092b1: Unknown function ID
NvAPI_QueryInterface 0xfd871348: Unknown function ID
NvAPI_QueryInterface 0x8061a4b1: Unknown function ID
NvAPI_QueryInterface 0xc9175e8d: Unknown function ID
NvAPI_QueryInterface 0xb85de27c: Unknown function ID
NvAPI_QueryInterface 0xe507deda: Unknown function ID
NvAPI_QueryInterface 0xe7bed620: Unknown function ID
NvAPI_QueryInterface 0xa109a44b: Unknown function ID
NvAPI_QueryInterface 0x66583afe: Unknown function ID
NvAPI_QueryInterface 0x88330469: Unknown function ID
NvAPI_QueryInterface 0xafc95163: Unknown function ID
NvAPI_QueryInterface 0xfaaad4fa: Unknown function ID
NvAPI_QueryInterface 0xd45cdf8b: Unknown function ID
NvAPI_QueryInterface 0x93373c0f: Unknown function ID
NvAPI_QueryInterface NvAPI_SYS_GetDisplayIdFromGpuAndOutputId: Not implemented method
NvAPI_QueryInterface NvAPI_SYS_GetGpuAndOutputIdFromDisplayId: Not implemented method
NvAPI_QueryInterface 0x6564435d: Unknown function ID
NvAPI_GetDisplayDriverVersion: OK
DXVK-NVAPI v0.2
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
NvAPI Device: GeForce GTX TITAN X (450.66.0)
NvAPI Output: \\.\DISPLAY1
NvAPI_Initialize: OK
NvAPI_GetDisplayDriverVersion: OK
DXVK-NVAPI v0.2
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
NvAPI Device: GeForce GTX TITAN X (450.66.0)
NvAPI Output: \\.\DISPLAY1
NvAPI_Initialize: OK
NvAPI_GetDisplayDriverVersion: OK
NvAPI_QueryInterface NvAPI_DISP_GetGDIPrimaryDisplayId: Not implemented method
info: D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_11_0
info: D3D11CoreCreateDevice: Using feature level D3D_FEATURE_LEVEL_11_0
info: Device properties:
info: Device name: : GeForce GTX TITAN X
info: Driver version : 450.66.0
info: Enabled device extensions:
info: VK_EXT_custom_border_color
info: VK_EXT_depth_clip_enable
info: VK_EXT_host_query_reset
info: VK_EXT_shader_demote_to_helper_invocation
info: VK_EXT_shader_viewport_index_layer
info: VK_EXT_transform_feedback
info: VK_EXT_vertex_attribute_divisor
info: VK_KHR_create_renderpass2
info: VK_KHR_depth_stencil_resolve
info: VK_KHR_draw_indirect_count
info: VK_KHR_driver_properties
info: VK_KHR_image_format_list
info: VK_KHR_sampler_mirror_clamp_to_edge
info: VK_KHR_swapchain
info: Device features:
info: robustBufferAccess : 1
info: fullDrawIndexUint32 : 1
info: imageCubeArray : 1
info: independentBlend : 1
info: geometryShader : 1
info: tessellationShader : 1
info: sampleRateShading : 1
info: dualSrcBlend : 1
info: logicOp : 1
info: multiDrawIndirect : 1
info: drawIndirectFirstInstance : 1
info: depthClamp : 1
info: depthBiasClamp : 1
info: fillModeNonSolid : 1
info: depthBounds : 1
info: multiViewport : 1
info: samplerAnisotropy : 1
info: textureCompressionBC : 1
info: occlusionQueryPrecise : 1
info: pipelineStatisticsQuery : 1
info: vertexPipelineStoresAndAtomics : 0
info: fragmentStoresAndAtomics : 1
info: shaderImageGatherExtended : 1
info: shaderStorageImageExtendedFormats : 1
info: shaderStorageImageReadWithoutFormat : 1
info: shaderStorageImageWriteWithoutFormat : 1
info: shaderClipDistance : 1
info: shaderCullDistance : 1
info: shaderFloat64 : 1
info: shaderInt64 : 1
info: variableMultisampleRate : 1
info: VK_EXT_conditional_rendering
info: conditionalRendering : 1
info: VK_EXT_4444_formats
info: formatA4R4G4B4 : 0
info: formatA4B4G4R4 : 0
info: VK_EXT_custom_border_color
info: customBorderColors : 1
info: customBorderColorWithoutFormat : 1
info: VK_EXT_depth_clip_enable
info: depthClipEnable : 1
info: VK_EXT_extended_dynamic_state
info: extendedDynamicState : 0
info: VK_EXT_host_query_reset
info: hostQueryReset : 1
info: VK_EXT_memory_priority
info: memoryPriority : 0
info: VK_EXT_robustness2
info: robustBufferAccess2 : 0
info: robustImageAccess2 : 0
info: nullDescriptor : 0
info: VK_EXT_shader_demote_to_helper_invocation
info: shaderDemoteToHelperInvocation : 1
info: VK_EXT_transform_feedback
info: transformFeedback : 1
info: geometryStreams : 1
info: VK_EXT_vertex_attribute_divisor
info: vertexAttributeInstanceRateDivisor : 1
info: vertexAttributeInstanceRateZeroDivisor : 1
info: Queue families:
info: Graphics : 0
info: Transfer : 1
info: DXVK: Read 16326 valid state cache entries
info: DXVK: Using 5 compiler threads
NvAPI_D3D11_IsNvShaderExtnOpCodeSupported 7: OK
NvAPI_D3D11_IsNvShaderExtnOpCodeSupported 12: OK
NvAPI_QueryInterface 0x5526cfd1: Unknown function ID
NvAPI_D3D_GetCurrentSLIState: OK
NvAPI_D3D_GetCurrentSLIState: OK
NvAPI_QueryInterface NvAPI_D3D11_SetNvShaderExtnSlot: Not implemented method
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11DXGIDevice::QueryInterface: Unknown interface query
warn: 88399375-734f-4892-a95f-70dd42ce7cdd
warn: winevulkan detected, disabling exclusive fullscreen support
info: Presenter: Actual swap chain properties:
info: Format: VK_FORMAT_B8G8R8A8_UNORM
info: Present mode: VK_PRESENT_MODE_IMMEDIATE_KHR
info: Buffer size: 2560x1600
info: Image count: 2
info: Exclusive FS: 1
info: Setting display mode: 2560x1600@60
warn: DXGI: MakeWindowAssociation: Ignoring flags
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
info: Presenter: Actual swap chain properties:
info: Format: VK_FORMAT_B8G8R8A8_UNORM
info: Present mode: VK_PRESENT_MODE_FIFO_KHR
info: Buffer size: 2560x1600
info: Image count: 3
info: Exclusive FS: 1
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
warn: D3D11Buffer::QueryInterface: Unknown interface query
warn: 6f15aaf2-d208-4e89-9ab4-489535d34f9c
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
info: Restoring display mode: 2560x1600@60
info: Setting display mode: 2560x1600@60
Game is considered exited.
Initial process has exited.
All monitored processes have exited.
Exit with returncode 0
Also i've tried to enable manually set those options and restrict file to read only to force it:
drive_c/users/x133/My Documents/WB Games/Batman Arkham Knight/GFXSettings.BatmanArkhamKnight.xml
<OPTION Name="Interactive_Smoke" Registered="True" Type="Bool" Value="true" />
<OPTION Name="Interactive_Paper_Debris" Registered="True" Type="Bool" Value="true" />
That lead to:

lutris-wrapper: Batman Arkham knight
Running /home/x133/.PlayOnLinux/wine/linux-amd64/5.11-staging/bin/wine /home/x133/.PlayOnLinux/wineprefix/Batman_Arkham_knight/drive_c/Games/Batman Arkham knight/Binaries/Win64/BatmanAK.exe -nologo
Initial process has started with pid 348322
Game is considered started.
info: Game: BatmanAK.exe
info: DXVK: v1.7.1-2-g743f309
info: Found config file: dxvk.conf
info: Effective configuration:
info: dxgi.nvapiHack = False
info: Built-in extension providers:
info: Win32 WSI
info: OpenVR
warn: OpenVR: Failed to locate module
info: Enabled instance extensions:
info: VK_KHR_get_surface_capabilities2
info: VK_KHR_surface
info: VK_KHR_win32_surface
info: GeForce GTX TITAN X:
info: Driver: 450.66.0
info: Vulkan: 1.2.133
info: Memory Heap[0]:
info: Size: 12288 MiB
info: Flags: 0x1
info: Memory Type[7]: Property Flags = 0x1
info: Memory Heap[1]:
info: Size: 24048 MiB
info: Flags: 0x0
info: Memory Type[0]: Property Flags = 0x0
info: Memory Type[1]: Property Flags = 0x0
info: Memory Type[2]: Property Flags = 0x0
info: Memory Type[3]: Property Flags = 0x0
info: Memory Type[4]: Property Flags = 0x0
info: Memory Type[5]: Property Flags = 0x0
info: Memory Type[6]: Property Flags = 0x0
info: Memory Type[8]: Property Flags = 0x6
info: Memory Type[9]: Property Flags = 0xe
info: Memory Heap[2]:
info: Size: 246 MiB
info: Flags: 0x1
info: Memory Type[10]: Property Flags = 0x7
wine: Unhandled page fault on read access to 0000000000000000 at address 00000001408B4BAA (thread 00bc), starting debugger...
Game is considered exited.
All monitored processes have exited.
Never found the initial process' return code. Weird?
Exit with returncode 0
So there is no viable way to use / force Interactive fog / Paper debris for this game on Linux? 
That's interesting, i thought nvcuda already working, ...
I'm not that familiar with the details, but from my understanding, Cuda/Physx from wine-staging does not contain implementations for Cuda/D3D11 interop which AK would need. Though other methods, e.g. needed for tech-demos like Fluidmark are implemented. So no, currently there is no way to to use these Gameworks features on Linux. From my understanding it is not that simple to add the missing bits and pieces.
Regarding the logs, I'm using the Steam version with latest released Proton, there is much less usage of NVAPI. I wonder what happens with all that information that your version wants to query from your system ;).
I don't see the crash on my Steam version on exit either. Anyway, I remember AK crashing when using detective mode i.c.w. nvapi-hack off. I'm not sure what the current state of that issue is, but I'm sure that dxvk-nvapi won't affect/solve that. I would recommend to stay with the defaults (spoofing AMD) for this game since it does not uses any of the DXVK extensions that are forwarded by dxvk-nvapi.
PS: Feel free to shorten the logs to not spam this issue tracker to much.
Regarding the logs, I'm using the Steam version with latest released Proton, there is much less usage of NVAPI. I wonder what happens with all that information that your version wants to query from your system ;).
Yep, i'd also like to know...I only know that EPIC version is most modern / updated version of that game for today, so they must have updated some in-game nvidia libs hence changes!
Anyway, I remember AK crashing when using detective mode i.c.w. nvapi-hack off. I'm not sure what the current state of that issue is, but I'm sure that dxvk-nvapi won't affect that.
Yep, confirmed it crashes
PS: Feel free to shorten the logs to not spam this issue tracker to much.
Sorry, i though that GitHub should auto-truncate them when using code tag
My N's nvapi re-implementation is built into DXVK, it contains only minimum to function and only DXVK d3d11 interfaces are in use (for e.g. SetDepthBoundsTest). If @doitsujin will consider to include such thing in DXVK, I could polish and PR changes. It could be alternative to current nvapi hack.
Well, the real minimum is to implement just nvapi_QueryInterface rejecting every request, but no reason to include such stub into DXVK, the point is to have some benefit from what DXVK interfaces can offer.
@pchome
Well, the real minimum is to implement just nvapi_QueryInterface rejecting every request, but no reason to include such stub into DXVK, the point is to have some benefit from what DXVK interfaces can offer.
The "problem" here could be that once it is there, it will be used, and if used, the information provided should be useful. There seems to be a lot of different implementations of the usage from various games/apps, so it kinda leaves the whole ordeal somewhat of a can-o-worms in that regard. I mean - it is highly probable that if a game uses nvapi.dll once you have a nVidia card, it could "break" in unknown ways if the information provided by it is bogus...
Two other things i would venture to implement in the basic minimal approach is:
Having this as a opt-in kind of thing in the install script could be useful where it would provide some benefit. setup_dxvk.sh install --with-nvapi or something?
@SveSop
The "problem" here could be that once it is there, it will be used, and if used, the information provided should be useful. ...
No information provided.
It is literally functions group and NvAPI_D3D11_SetDepthBoundsTest.
NvAPI docs are clear in part which say "you should call nvapi_QueryInterface before using any NvAPI functions". So if we don't report any mem-info and version functions, then app should use different method to obtain such information. Sure there are apps/games which will check only nvapi.dll presence, and then trying to use random functions w/o even check return value of nvapi_QueryInterface. Anyway nvapi-hack works (except maybe for plain Wine w/o DXVK dxgi.dll), enabled by default.
Having this as a opt-in kind of thing in the install script could be useful where it would provide some benefit. setup_dxvk.sh install --with-nvapi or something?
Yes, disabled by default.
@pchome
There are a lot of weird/faulty implementations of this usage i think. Games "should" have a good way of doing it correctly - with a fallback incase correct info is not provided, but that does not mean they actually do... Then again, worst case scenario is just to use the DXVK nvapihack anyway :) Wine dxgi does not have a easy to use "fake hardware id", so it would probably mean a recompile in that case. (Who play "recent" games with wined3d these days?) EDIT: Other than d3d12 games using vkd3d tho... I can see games utilizing NvAPI to get certain raytracing functions perhaps?
It would probably be somewhat similar to the AMDAgs (dxvk-ags) thing? Slightly differently implemented by games i think, in that it is games that ship amd_ags_x64.dll, and not AMD drivers? Haven't really looked into it tbh..
@SveSop
PS. To make sure the game/app does what it can to use nvapi, you should put this in the dxvk.conf file:
Do you know where this config should be for DXk on Windows?
@SveSop
PS. To make sure the game/app does what it can to use nvapi, you should put this in the dxvk.conf file:
Do you know where this config should be for DXk on Windows?
Put the dxvk.conf file in the same folder you put the dxvk d3d11.dll file(s) (and where the .exe file is) when using windows.
Yeah, I've already figured it out.
Most helpful comment
Then how about submitting a PR that allows perfect multi-core scaling in D3D11? Nvidia's and AMD's Windows driver teams might also be interested.
It's quite obvious that you don't have the slightest idea what you're even talking about, please stop and stay on topic.