Nsight 5.3/5.4 crash in ID3D10Multithread::SetMultiThreadProtected

Since version 5.3 Nsight crashes during the DirectX initialization phase of our application on startup.

The crash dump shows that the last call on our part is ID3D10Multithread::SetMultiThreadProtected(TRUE). After that it crashes with a 0xC0000005 access violation inside Nvda.Graphics.Interception.dll.

ID3D10Multithread* multi = nullptr;
ID3D11DeviceContext* hwDevice = m_pImmediateContext;
hwDevice->QueryInterface( __uuidof(ID3D10Multithread), (void **)&multi );
if( multi != nullptr )
{
->  multi->SetMultithreadProtected(TRUE);
    multi->Release();
}

The crash reporter doesn’t seem to be able to send the crash dump directly, so I had to upload it somewhere else (crash dump generated with Nsight 5.4.0.17240).

Crash Dump: https://ufile.io/7jfuw

Can you make any meaningful use of this?

Regards

Hi,

I’m sorry for the problem you met, please provide more information for investigating the problem:

  • GPU, OS, driver info
  • Can we have your sample to do some local repro, then we can identify the crash quickly?

Thanks,
Letitia

Hi,

sorry for the delay. I’ve been on vacation for the last week.

Specs of my machine:

GeForce GTX 1080 Ti (Zotac) / Driver version 384.94
Intel Core i5-2500K
Windows 7 Professional
32 GB RAM

The issue is persistent between Visual Studio 2012 through to Visual Studio 2017.

Sadly I can not provide you with the exact repro sample. I could try to recreate it with basic DirectX means, but that might take a while. And I’m not sure if it will be reproducible that way.

I had hoped the dump might have been sufficient to narrow the issue down.

Regards

Hi letitia,

you can easily reproduce this issue with any DX11 SDK sample. Just add the following code after D3D11CreateDevice:

ID3D10Multithread *multi = 0;
    
    // Crashes with NSight! Fine without.
    g_pImmediateContext->QueryInterface(__uuidof(ID3D10Multithread), (void **)&multi);

    // Doesn't crash with or without NSight.
    //g_pd3dDevice->QueryInterface( __uuidof(ID3D10Multithread), (void **)&multi );
    
    if (multi != NULL)
    {
        multi->SetMultithreadProtected(TRUE);
        multi->Release();
    }

There are some things I would like to add:

First, I had no problems with NSight 5.3/5.4 until I decided to update my Win 7 x64. Before no windows updates were applied. So it is nearly impossible for me to find the relevant update(s) but I find it very interessting and noteworthy.

Second, NSight 5.2.x doesn’t return an ID3D10Multithread object when it is queried from the immediate context. All newer versions do.
But maybe this isn’t supposed to be the way to go to be somehow thread safe. From what I know calls to DeviceContexts are not thread safe at all. So calling MultithreadProtection() on the immediate context doesn’t make sense to me. Would be nice if someone could explain what difference can be expected with that.
Thanks in advance.

Bye.