I am currently trying to use Intel GPA to analyse a Unity, DirectX 11 game.
Unfortunately using Intel GPA on this game makes it crash at startup.
To investigate, I have attached a debugger to my game and let it launch with Intel GPA's modules loaded at initialisation as it should be (specifically shimloader64.dll that then loads shimd3d64.dll, that finally loads MetricsPipeline64.dll)
It works perfectly well with all other games (even the ones equally Unity and DirectX 11 based) but not for this one.
My debugger revealed that when Intel GPA's modules are loaded, the main thread of my game encounters an access violation when trying to write a memory address.
Taking a look at the call stack I can see that it is executing code within shimd3d64.dll when the error happens (precisely in a call to CreateRemoteThreadEx called from somewhere in shimd3d64.dll)
Since the main thread is the one of my game, it normally shouldn't venture executing code in Intel GPA's modules, therefore I assume that GPA is setting up some sort of hook or detour to redirect the program flow and execute additional actions, most likely during the initialisation of DirectX to enable its features afterwards.
The problem seems to be there in the additional operations that GPA makes my main thread do, but I am not a professional programmer and do not really know how I could solve this issue or further my investigation at this point.
Here is a screen capture of the debugger when encountering the issue:
Do you know of anyone having bumped into this problem in the past?
If someone of this forum's staff or active member read this, have you had other crash on startup problems? And if yes, what did solve the issue please.
I looked for more technical documentation on GPA or a troubleshoot guide but didn't find any, is there one and if so would it be useful?
Any suggestions that might help to solve the issue is more than welcome.
Thank you for your help
I'm sorry that GPA is currently not working with your application. To help figure this out, could you send me the about info section found in the top right of frame analyzer or graphics monitor, it looks like this:
Would you also be able to send me a private message with the workload? I'd like to reproduce the issue on my side to figure out what kind of bug it is and if it's related to your OS version/build, driver, etc.
Hello Giselle and thank you for you answer,
I have tried with 2 versions of Intel GPA both on Windows 10 x64 fully up to date.
First I tried with the version that I always use for months, here is the "About" text of it:
Machine name: Skutner
Windows 10 build 16299, 64-bit DEP enabled
Num Processors: 8
System BIOS: American Megatrends Inc. 2304 (05/25/2015)
Video BIOS: !GTX950 VB Ver 84.06.2F.00.AS14 (09/03/15)
Device: Intel(R) HD Graphics 4600
Provider: Intel Corporation
No support for GPA Instrumentation
Device: NVIDIA GeForce GTX 950
No support for GPA Instrumentation
Install directory: C:\GPA\
Current user is in Administrators group: YES
Current Graphics Performance Analyzers 2017 R2 (17.2.312434)
Secure Boot/Trusted Boot is Disabled
When I noticed that it didn't work, I decided to update Intel GPA to the latest version, hoping that this would solve my problem, but it did not (my debugger indicate that this is the same problem with both versions, same exception is thrown in the main thread).
Here is the "About" of the up to date version:
Name: Windows 10 (build 16299)
Secure Boot/Trusted Boot is disabled
Cores count: 8
Version: American Megatrends Inc. 2304
Version: !GTX950 VB Ver 84.06.2F.00.AS14
GPU #1 Information:
Name: Intel(R) HD Graphics 4600
Vendor id: 0x8086
Product id: 0x412
Driver Version: 126.96.36.19935
Driver Date: 10-16-2017
GPU #2 Information:
Name: NVIDIA GeForce GTX 950
Vendor id: 0x10DE
Product id: 0x1402
Driver Version: 188.8.131.5265
Driver Date: 1-3-2018
Memory: 16223 MB
Screen: 1920x1080, 32 bit
Graphics Performance Analyzers:
Installation folder: C:\GPA\
Can you give me more details about how to give you "the workload" please?
I don't really understand what you want me to give you.
I intent to install a Windows 7 and try with this operating system, in case the problem is Windows 10 specific.
If you have any idea of other things I could try that may perhaps solve the issue please let me know.
Thank you again for your help.
First off, try updating your graphics driver, it looks like the current driver you are using for your Intel graphics card is out of date, the most current version is 184.108.40.20663
And your NVIDIA driver also seems to be out of date, you can download the latest one here.
For the workload, I mean could you send me the executable for the game you are trying to profile? We can try this once we figure out if this is a driver related issue.
Hello again Giselle,
I updated everything but no dice, it still does not work.
I am going to send you the executable of the game via private message.
Is it possible to get older versions of Intel GPA please? I would like to check if it can work with older versions, just in case.
Thank you again.
Hello again Giselle,
Just to let you know:
I tried with an older version of Intel GPA (15.4) on Windows 10 x64 fully up to date and it did not work either.
Then I installed a Windows 7 Pro N x64, updated it fully and installed the latest Intel GPA and it finally worked without problems.
No idea why it doesn't on Windows 10 x64 (I tried on different machines with this OS without success).
Anyway, I will just run my tests from Windows 7 for this game.
Thank you again for your advice and kindness
You can consider my request as resolved.
Have a good day.
This is awkward... Turns out that Windows 7 Pro N x64 did not finish to install all updates and after being fully up to date, it doesn't work again, same problem.
I uninstalled the updates manually one by one but then nothing worked anymore, all programs had problems.
So I ended up reinstalling Windows 7 Pro N x64 SP1 then directly disabling Windows Update.
This way it "works", obviously the problem is still there but I can do my tests in peace.
If you want to isolate the problem to identify it precisely I would suggest to install the OS and then install update by update (there's about 200 to install) until it no longer works.
Anyway, it finally works stable, so I'll keep it this way for now.
I'm glad you were able to get GPA to work and be stable. I'll log this with our engineering team and recreate the issue. Out of curiosity what build are you on for Windows 7 that allowed GPA to work and be stable? Just so I can include this with the bug report. I'll keep in touch and might ask additional questions.
My Windows that got GPA working is Windows 7 x64 Pro N SP1, build 6.1.7601.
I turned off the updates (set it to never check for updates + stopped and disabled the service) right after installing, even before installing the network drivers to make sure no updates are installed at all.
Since this comes from a Windows Update, I wouldn't be surprised if it also worked on a fresh Windows 10 install with updates turned off straight from install.
I haven't tested that since I have it working already but chances are it might work with that as well.
I remain available if you have any further questions or if you want me to try things around.
The game I experiment on is a closed beta game therefore I don't think I can share it directly since it is not my own intellectual property, but I am going to ask the developers if that is okay, they might contact you directly then, I will direct them to this forum post.
I have dug a bit more on the issue and isolated what's the exact instruction that makes the initialisation to crash.
At some point during the initialisation (in the additional operations done by the main thread following GPA's hook/detour) there is an assembly instruction call rax that crashes the program since rax has a value that sends the program to a place it has nothing to do, instructions there are not real executable code (please do check my observations, you can simply breakpoint on call rax instructions).
I tried naively to skip the call rax instruction, but then program end up coming back to it and hitting the same breakpoint, so I assume something really necessary is happening there.
However, since I am debugging without shimd3d64.dll's symbols (names, etc...) it is really hard for me to understand precisely what is going on, as I said I am just an amateur developer/reverse engineer but I am convinced that identifying the issue precisely would be easy for someone with your program's source, or at least symbols.
Let me know if I can do anything else to help.