NVIDIA Optimus enablement

Started by
17 comments, last by NightCreature83 6 years, 7 months ago
11 hours ago, NightCreature83 said:

Can you list what dxDiag says if it tells you the NV chip is render only it has no output things to enumerate.

What do you mean with this?

Furthermore, it is also possible to have an integrated and dedicated GPU in a desktop where the dedicated GPU is not connected to any monitor (just used as GPGPU chip, no output). In this case, you want the integrated GPU.

🧙

Advertisement

He means you should just post your DxDiag.txt from your machine. I'd be curious to see whether we've detected your machine as hybrid or not.

These days, Optimus doesn't really exist, it's a Windows-implemented hybrid graphics solution. The only piece that's still left up to the individual GPU vendor is determining which applications should be affected by hybrid and should use the discrete GPU, vs which ones shouldn't. And when I say "these days," I mean since Windows 8.1.

When your machine is classified as hybrid, and your app qualifies for the discrete GPU, then the OS will fake the output connections to make the system appear as you describe - with outputs connected to the discrete GPU, making it enumerate first. We'll also do the things necessary to optimize presenting in such a configuration, and enable fullscreen mode even though that kind of indirect connection.

Ok, here is a Dropbox link (+- 78k lines)

🧙

Hm, I don't see any problems there. Are you sure you're exporting that symbol out of your exe (and not, e.g. a renderer dll)? Is nvinit or nvinitx getting loaded when you run your app?

2 minutes ago, SoldierOfLight said:

Are you sure you're exporting that symbol out of your exe (and not, e.g. a renderer dll)?

The symbol is exported in a .cpp file of a static .lib which is used by my .exe.

Since you mentioned this, I started moving the export to a .cpp of the .exe itself (NVIDIA GPU is selected and has an output). But it also works when I move the export to another .cpp of my static .lib. Based on these observations and the fact that it worked once, I looked at the changes to the .cpp file for which it does not work anymore. Apparently, I moved all declarations from this file. So basically:


#include "rendering\rendering.hpp"
extern "C" {
    __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}
extern "C" {
    __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
}

is all what is left in the file. "rendering.obj" is still generated by the compiler. So could the linker be the culprit?

 

Anyway, thanks to everyone who looked into this.

🧙

Quote

Card name: Intel(R) HD Graphics 5500
Manufacturer: Intel Corporation
Chip type: Intel(R) HD Graphics Family
DAC type: Internal
Device Type: Full Device  
        
Card name: NVIDIA GeForce GTX 960M
Manufacturer: NVIDIA
Chip type: GeForce GTX 960M
DAC type: Integrated RAMDAC
Device Type: Render-Only Device

You can see here that the NV chip is not connected to any real outputs and as mentioned earlier the OS fakes all of this stuff for you. I did a dx diag on a desktop PC and the "Device Type" lines dont show up in that log, which to me means all devices in there are Full devices. Besides you dont really want to transport your framebuffer over PCI-E to display each time.

If the GPU is used as GPGPU you dont need it to output anything that is true but its also most likely not doing rendering work at that moment in time.

 

My NV 970M GTX says the same thing Render-Only Device, this means that most things work but stuff like VR is impossible. It can render everything but the latency of the VR kit itself is so bad you cant use it.

Worked on titles: CMR:DiRT2, DiRT 3, DiRT: Showdown, GRID 2, theHunter, theHunter: Primal, Mad Max, Watch Dogs: Legion

2 hours ago, NightCreature83 said:

My NV 970M GTX says the same thing Render-Only Device, this means that most things work but stuff like VR is impossible. It can render everything but the latency of the VR kit itself is so bad you cant use it.

How do GTX 1060M etc. "VR-Ready" notebooks handle VR in the presence of an integrated and dedicated GPU?

🧙

They actually have dedicated output paths to HDMI, so in the case of the hybrids they all run the external outputs over the iGPU which adds a frame delay to the frame being rendered. Also there is no 1060m NVidia did away with the mobile lineup and just sticks desktop grade chips in the laptops now (maxwel2 already paved the way for that its why a 970m is so powerful and is actually comparable to a 960 desktop chip).

For video and display purpose this doesnt matter that much but for VR it does because the tracking needs to match the frame rendering.

This is why its important that if you have a laptop and you want to buy a VR kit you check its VR Ready.

Worked on titles: CMR:DiRT2, DiRT 3, DiRT: Showdown, GRID 2, theHunter, theHunter: Primal, Mad Max, Watch Dogs: Legion

This topic is closed to new replies.

Advertisement