If you are receiving the error message about a variable number of draw calls, we recommend that you enable the “Frame Capture on Pause” option in the client. You can read about the different pause modes from the client Help->Help menu, under “Introduction to GPU PerfStudio 2” -> “Application Settings” topic. When you pause the application without frame capture, the value from QueryPerformanceCounter should return the same non-zero value as was queried when the application was first paused. If you are still seeing the result of that function change, it is probably because your application uses the static C runtime.
The DX SDK samples use DXUT to render the UI elements, and the approach that it uses may cause the number of draw calls to change from one frame to the next.
In order to perform a Full Profile and collect all the available counters, GPU PerfStudio must render your frame multiple times (each time it renders the frame is called a pass). The number of draw calls in each pass must be the same so that the HW data can be collected and processed correctly.
In regards to your question about 7 draw calls versus GPU PerfStudio thinking that there are 9 - GPU PerfStudio also considers calls like ClearRenderTargetView, CopyResource, and ResolveSubresource to be draw calls. If you connect using the Frame Debugger, you should be able to identify all 9 draw calls using the slider along the bottom of the Frame Debugger.
Please let us know if these suggestions are helpful
I enabled "Frame Capture on Pause" which made the app render the same frame all the time (like it should) but the frame profiler still said the number of draw calls varies per pass. (Same thing happens with the DX SDK samples after enabling "Frame Capture on Pause")
I checked in the frame debugger and there are indeed 9 draw calls: ClearRenderTargetView, ClearDepthStencilView, and 7 DrawIndexInstanced.
The application always renders the exact same every frame, it never varies. The API Trace always looks exactly the same (exactly like it should, as far as i know). Is there anything my app needs to do in order for GPU PerfStudio to recognize the number of draw calls per pass properly?
Regarding the QueryPerformanceCounter, I was using "Multi-threaded Debug DLL (/MDd)", but now switched to "Multi-threaded DLL (/MD)". Printing QueryPerformanceCounter() to the console shows that it just keeps on counting when paused. Changing the pause options in GPU PerfStudio doesn't seem to help.
Using a HD4850 with the latest drivers, 10.3 on Vista x64 without UAC and the Feb 2010 DX SDK
I was able to reproduce the issue and now have a better understanding on what is happening. The error about varying drawcalls is inaccurate, and is a bug in GPUPerfStudio. It should be resolved in the next release. Unfortunately, there is a different error that is preventing the profile from completing properly, which is related to running a DX11 application on DX10 hardware. I do not have any forecast on when this issue will be resolved.
In the short term, using DirectX10 on the HD4850 should work correctly, or try to acquire an ATI Radeon HD 5000 series card to perform the profiles.
Thank you for reporting the issue.