OstGeneralen
OstGeneralen

Reputation: 3

Visual Studio Graphics Debugger throws read access violation exception

I'm writing a simple renderer using the d3d11 library in Visual Studio 2019 and it builds and runs fine. However when I try running the Graphics Debugger it immediately throws a read access violation for address 0x0000000000000000 ( which is clearly incorrect ).

The exception is thrown from the DXCaptureReplay dll on the line

DeviceContext.PSSetShader(InShaderToBind.Shader.PS, NULL, 1);

Where InShaderToBind.Shader.PS is a pointer to ID3D11PixelShader

It got the most weird when I out of a lack of ideas tried

int X = 0;
ID3D11ClassInstance* FakedClassInstance = reinterpret_cast<ID3D11ClassInstance*>(&X);

DeviceContext.PSSetShader(InShaderToBind.Shader.PS, &FakedClassInstance, 1);

As this will make the exception not throw until I try to capture a frame ( Which I guess makes sense as that pointer will only be valid for the scope where X is still valid )

The MSDN documentation states that NULL should be a perfectly valid argument to pass to PSSetShader ( as noted here: https://learn.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-id3d11devicecontext-pssetshader )

Any ideas for what might be going wrong?

( If I comment out PSSetShader the exception is not thrown and I can take captures )

Upvotes: 0

Views: 897

Answers (1)

Chuck Walbourn
Chuck Walbourn

Reputation: 41107

If you enable the Direct3D Debug Device, you would see in your debug output window:

D3D11 CORRUPTION: ID3D11DeviceContext::PSSetShader: Second parameter (ppClassInstances) corrupt or unexpectedly NULL. [ MISCELLANEOUS CORRUPTION #14: CORRUPTED_PARAMETER2]

NULL (or better yet nullptr) is fine for ppClassInstances only if NumClassInstances is 0. Try:

DeviceContext.PSSetShader(InShaderToBind.Shader.PS, NULL, 0);

Generally you should make sure your program runs without emitting ERROR or CORRUPTION messages from the debug layer before attempting to use PIX or the VSGS tool.

See Microsoft Docs and this blog post.

Upvotes: 2

Related Questions