PVRCarbon Shader Analysis (Similar to PVRTrace)

I used PVRTrace extensively in the past, mostly for the Shader Analysis feature. It allowed me to see which shaders take the most screen space and GPU clock cycles. It also allowed comparing clock complexity of different shaders and see the low-level compiled code right in the GUI.

However, I can’t find the same (or similar) functionality in PVRCarbon. It allows to dig into a selected shader, see the source to double-check, check the pipeline of the frame, but it does not offer any features that allow for shader comparison. I double-checked the documentation, tried checking every option in the GUI, but to no avail. Overall, PVRCarbon is easier to setup and use, but I really miss this essential feature from the PVRTrace.

Have I missed something? Is it on the feature list to be added later? Or maybe I can somehow write a plugin / parse or export the frame statistics to write my own analysis tool that does a similar thing?

Hi kumokairo,
Yes. We’ve discontinued PVRTrace several years ago and most of these features, functionalities can be now found in our other PVR Tools like PVRShaderEditor and PVRTuneDeveloper/Complete.

It also allowed comparing clock complexity of different shaders and see the low-level compiled code right in the GUI.

In PVRShaderEditor, you could do this by pasting your shader code and see the information in Profiling Info & Disassembly tab. Also, you would find various shader stage profiling info in PVRTune under Shaders counter group.

It also allowed comparing clock complexity of different shaders and see the low-level compiled code right in the GUI.

For this you could either use PVRShaderEditor or PVRTune again while setting up your application with different shaders and then compare both the captures.

If you are interested to know more about these tools, please raise a ticket on https://pvrsupport.imgtec.com/ and we could share some internal training videos.

Best Regards,

1 Like

Hey Nagnath, thanks for the response.
I indeed used PVRShaderEditor to manually inspect shaders and compile them using different hardware / compiler versions. I also used PVRTune to get high-level information about system performance in general, and it was useful for that small task.

However, the feature that I am looking for (and the one that I used the most) is this one

(Cycles and Cost have errored because of #target 320 probably, but it’s not the case here)

As far as I understand, none of the current tools have this functionality anymore and there is no way to compare relative cost of different shaders, or at least get the count of fragments rendered with said shader (to manually calculate the cost of each shader). PVRTune is too broad and shallow, PVRShaderEditor is too specific and is best used when a relatively heavy shader is already found.

Is that correct?

Thank you again for your response

Hi Kumokairo,

PVRTrace’s shader analysis feature was also using the offline compilers and was calculating the profiling info i.e. estimated cycle cost the same way as you see it in PVRShaderEditor. Basically it multiplies the per line cycle cost with total shader instruction cycle cost x number of pixels shaded. I do agree the consolidated report in the shader analysis window was a nice way to represent and quickly give a summary of which shader consumed most of the resources and the runtime shader editor feature is a must have. But, one thing to notice here is that it was an estimated cost and not actuals.

On the contrary, what we see in PVRTune’s profiling data is indeed the actual performance metrics that you get from your application running. As the actual performance could vary due to multiple factors. It uses the driver-level software counters and hardware registers to accurately monitor application statistics such as FPS, tiler time, and more. It also gives you access to several counter groups which includes various shader stages.

Though that being said, when I checked with our tools team about the shader analysis feature from PVRTrace, some of these features, like GPU clock cycles, cost and disassembly are planned to be added directly to PVRCarbon in near future.

You could also check our PVRTuneComplete which exposes even more low level data. It adds client data streams(OGLES, OpenCL, EGL & vulkan driver modules and some additional hardware counters and also you could define your own custom counters. If you haven’t already tried it, you could get it by signing an NDA with us by registering to our support portal https://pvrsupport.imgtec.com

Best Regards,

1 Like