M6800 not using dGPU or switchable graphics

Discussion in 'Dell Latitude, Vostro, and Precision' started by Phantom_Wolf, Feb 21, 2020.

Tags:
  1. Phantom_Wolf

    Phantom_Wolf Newbie

    Reputations:
    0
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    5
    I recently got a used M6800 and repaired it. Most things works fine, but one thing that really bothers me is that the laptop never uses the dGPU or switchable graphics.

    At first, it came with a K3100M. I installed Windows 10 Pro, updated to the latest version and installed the Quadro drivers from Dell itself. But I noticed games render quite bad, so I swapped the K3100M with a GTX 970M that has already arrived. I'll admit I did not check CPU/GPU usage, and this will become a burden later.

    I installed the 970M with a modified NVIDIA driver with .inf changes. The version is 442.19 and it installed successfully. Device manager is able to find it, and there's options to right click on a program and select run with NVIDIA processor. Just to be safe, I also set in the NVIDIA control panel to use the NVIDIA processor by default.

    I launched a game and noticed it's still the same frame rate, the GTX 970M can't be that bad. I checked task manager and confirmed it's because it's using the iGPU. I tried disabling the iGPU, but now it's even worse. The GTX 970M is still detected, but it's running the Microsoft Basic Display Adapter!

    Someone suggested disabling switchable graphics in the BIOS, but doing that disables both the iGPU and dGPU, leaving me with the basic display adapter yet again. In Windows' Display settings, I noticed that the internal screen will always run on the iGPU. So I tried connecting an external display via HDMI.

    It worked, the display is running off of the dGPU according to Display settings. If I set the external display as main display, then games and 3D applications render properly now, and I can confirm in MSI Afterburner, Task Manager and OCCT that the dGPU is being used.

    I tried installing the latest Intel Graphics drivers from Dell. I also set the Intel Graphics mode to best performance. There's only 1 power setting in Windows which is Balanced. I should also mention that I run on AC power, though I do have a battery. Plugging in the battery and disconnecting AC doesn't seem to solve the issue.

    Here's also a funny thing. If I run a stress test in Kombustor with the external display, it correctly renders and uses the dGPU. But when I unplug the external display and it falls back to the internal display, it's still running with the dGPU and rendering properly! This also works with OCCT. But when trying this with games, it will crash when unplugging the external display.

    I'd like someway to fix this issue. It's normal for the iGPU to be the one driving the laptop display, but Optimus should switch it to the dGPU when load is detected. Power efficiency is really not my main concern, I'd just like to be able to game on the go.

    A really crappy solution could be to use a decoy active signal adapter to make a 'fake' display, then move the game window to the internal screen, but that's kind of pointless.

    Anyone has any ideas what could be wrong?

    Someone also suggested it's because of Windows 10 that Optimus is no longer supported. I'll be trying an older Windows 7 ISO and maybe the K3100M with older drivers to see if it works at another time.
     
  2. Aaron44126

    Aaron44126 Notebook Prophet

    Reputations:
    783
    Messages:
    4,607
    Likes Received:
    1,431
    Trophy Points:
    231
    Windows 10 works fine with Optimus. I am using it on my M6700, with Quadro M5000M. Other users have gotten it working with all manner of NVIDIA cards.

    If you are using a 970M and Optimus is not working, then you modded the INF incorrectly. This is a common problem. I assume that you substituted your hardware ID in for another one that was already in the file. If you pick one from a system that doesn't support Optimus to replace, you will wind up with Optimus not working in your resulting configuraiton. I ran into this when I first installed the Quadro M5000M and it took me a while to understand what was going on.

    Unfortunately I can only offer you a fix if you are running a Quadro card. (They are easier to figure out since they have been in other Precisions; I have never done this for a GeForce card.) However, I can point you in the right direction and maybe you can find an appropriate hardware ID to replace in the INF.

    Here is an example for me.
    I have Quadro M5000M. The hardware ID reported in Device Manager is PCI\VEN_10DE&DEV_13F8&SUBSYS_153F1028&REV_A1.

    Going to the NVIDIA driver INF file, I can find these entries for Quadro M5000M near the bottom of nvdmwi.inf.
    NVIDIA_DEV.13F8.06DA.1028 = "NVIDIA Quadro M5000M"
    NVIDIA_DEV.13F8.16DA.1028 = "NVIDIA Quadro M5000M"

    Hmm... Two choices.
    Following these references, I can find these two lines further up in the file.
    %NVIDIA_DEV.13F8.06DA.1028% = Section047, PCI\VEN_10DE&DEV_13F8&SUBSYS_06DA1028
    %NVIDIA_DEV.13F8.16DA.1028% = Section049, PCI\VEN_10DE&DEV_13F8&SUBSYS_16DA1028

    OK, one of them references "Section047" and one of them references "Section049".
    Definitions of these sections can be found in the file by searching for "[Section047]" or "[Section049]" (with brackets).
    Each one contains a list of option definitions.

    Now, Section047 contains this important line:
    NvSupportMSHybrid = 1
    Section049 does not have this line.

    So the appropriate mod for me is to change this line so that its hardware ID matches the one that I am getting from device manager.
    %NVIDIA_DEV.13F8.06DA.1028% = Section047, PCI\VEN_10DE&DEV_13F8&SUBSYS_06DA1028 => %NVIDIA_DEV.13F8.06DA.1028% = Section047, PCI\VEN_10DE&DEV_13F8&SUBSYS_153F1028

    I actually just find all occurrences of PCI\VEN_10DE&DEV_13F8&SUBSYS_06DA1028 and replace with PCI\VEN_10DE&DEV_13F8&SUBSYS_153F1028, because there are multiple occurrences in the INF file (for different Windows OS versions). This single find-and-replace is the only mod that I need to make to have things working properly.

    If I were to instead change the one on the line referencing Section049 (which has a different hardware ID, PCI\VEN_10DE&DEV_13F8&SUBSYS_16DA1028), I would end up in a situation where the driver would install properly but graphics switching would not be working. It turns out that Section047 is the one for Precision 7710 / Quadro M5000M / Optimus enabled, and the Section049 one is the one for Precision 7710 / Quadro M5000M / Optimus disabled, so it makes sense that one works with Optimus and one does not.


    So, figure out which section your INF mod is referencing and check to see if it has the line:
    NvSupportMSHybrid = 1

    If it does not, just adding that line is not enough to get things working. (There are other options in the section that matter and I do not know which ones are necessary to get Optimus working.) You need to instead find a section that has this line and slap your hardware ID on the reference to it.


    I have this post which explains how to interpret the hardware ID for your mod.
    http://forum.notebookreview.com/thr...0-owners-thread.820539/page-254#post-10937563
     
    Last edited: Feb 21, 2020
    Phantom_Wolf likes this.
  3. Phantom_Wolf

    Phantom_Wolf Newbie

    Reputations:
    0
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    5
    Thanks Aaron44126! I don't have time these few days so will return to check on it in a few days.

    I did however have enough time to take a look at my driver .inf files. I found that I used Section043 because it was the first one that matched my device ID. Just like you suggested I searched for Section043, and it doesn't have NvSupportMSHybrid! Unfortunately for the GTX 970M, there's a few different Section IDs, 7 of them I think and more than one has NvSupportMSHybrid, unlike the M3/4/5kM which only has 2 options for each. I'll have to do some research and experimenting later and not just choose any Section ID.

    Looking forward to get the mod started and hope it will work!

    On a side note, the GTX 970M works well when on external display, it can actually reach 100% without throttling. Interestingly, the 970M VRM is a lot taller than the Quadro VRMs, so the heatsink couldn't actually sit properly. I was scared, but looks like it works for now. Someone did recommend getting a diagonal cutter to cut the heat sink so I'll be doing that. Interestingly enough, someone also posted in this forum a long time ago of some 'prototype' heat sinks that don't have a notch in the middle, so you can fit the 970M and 980M properly. He sold them for $100 each though so I'd rather get diagonal cutters. Out of topic, but an interesting talk on M6800 and GPUs nonetheless.
     
  4. Phantom_Wolf

    Phantom_Wolf Newbie

    Reputations:
    0
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    5
    I got it!

    I found that Section043 is what I used previously, and it doesn't have Optimus. There's 5 more GTX 970M entries and they use Section044, Section045 and Section046. Using a string compare tool, I can only see that the difference between the 3 is data files, otherwise they all have Optimus unlike Section043.

    So I fixed my .inf files (Actually found a mistake in my previous .inf line too) and re-installed the driver, it now works! Kind of at least. Now if I right click on a program and click on run with NVIDIA processor, it does indeed use the dGPU.

    But, Optimus doesn't kick in by default. Even if I'm on AC, it will start with the iGPU by default. My understand is, you're supposed to start with iGPU by default but switch to dGPU when load is detected. I might be wrong though, have to admit this is my first laptop. I'll play with the power settings and see how it goes.

    In the meantime, thanks for the help Aaron!
     
  5. Aaron44126

    Aaron44126 Notebook Prophet

    Reputations:
    783
    Messages:
    4,607
    Likes Received:
    1,431
    Trophy Points:
    231
    That's not how it works. The NVIDIA driver chooses whether a program will run on the iGPU or dGPU when the program first starts, based on app profiles included with the driver. After the program is started, it will not switch GPUs. Common graphics-heavy apps and games are supposed to default to the dGPU, but if your app does not, you can override the NVIDIA driver's behavior for your app. The easiest way to do this is in Windows 10 settings.

    Start → Settings → System → (scroll down) Graphics settings
    Add a profile for your app, hit options, and set it to run on the high-performance GPU.
    You have to close and restart your app for changes to take effect.

    (You can also do this in the NVIDIA control panel under "Manage 3D settings"; the interface is a little more clunky but there are more options. Settings in the NVIDIA control panel will override settings in the Windows 10 settings app if they conflict.)
     
Loading...

Share This Page