After having only very minimal success with GPU PerfStudio, I decided to attempt integrating GPUPerfAPI into the engine that we are using. However, I am having two issues, the most important of which is the driver getting stuck in an infinite loop.
I am enabling only the GPUTime counter so that the required number of passes is only 1, thus hopefully making it useful for real-time performance analysis in a game by not having to render the same, exact frame more than once. I am doing one session, one pass, and one sample per frame. The sample encompasses all GPU commands for the frame.
The first (and less troubling) issue is that the first four sessions never become ready (GPA_IsSessionReady). If I try to read the counter value anyway (blocking), then I get a freeze in the driver. I can work around this by starting with the 5th session when I go to read the results.
However, after issuing 32 sessions, calling GPA_BeginSession subsequently freezes in an infinite loop in the driver (it freeezes trying to begin the 33rd session). Stepping through the assembly, it is stuck in the following loop in GPUPerfAPI-DX11-x64.dll:
000007FED42A2160 mov rax,qword ptr [rbx]
000007FED42A2163 mov rcx,rbx
000007FED42A2166 call qword ptr [rax+18h]
000007FED42A2169 test al,al
000007FED42A216B je 000007FED42A2160
When pausing the program in the debugging, the call stack usually goes from the GPUPerfAPI dll, into the Microsoft DX11 dll, and into an ATI driver dll. Usually something like this:
|[Frames below may be incorrect and/or missing, no symbols loaded for atidxx64.dll]|
I have experienced this issue with both the 12.4 driver and 898 Release Candidate 5 driver. I am running an MSI R7950 card.
Is there something that I am doing wrong?