Low-Level GLSL Optimisation for PowerVR

Share on linkedin
Share on twitter
Share on facebook
Share on reddit
Share on digg
Share on email

With the release of the updated PowerVR SDK & Tools 2017 R2 last month, it’s time to take a look at some of the new content packaged that is included alongside it. In this post we’ll take a closer look at the PowerVR Low-Level GLSL Optimisation document – our guide to wringing every last drop of performance out of the PowerVR Rogue architecture. GLSL stands for OpenGL Shading Language, which is normally associated with high-level operations, but there are some low-level optimisations a developer can do that are often overlooked.
When it comes to the PowerVR Rogue architecture, shader performance generally depends on the number of cycles required to execute a shader. The architecture offers a variety of options for executing multiple instructions in the USC (Unified Shader Cluster) ALU (Arithmetic and Logic Unit) pipeline within a single cycle, depending on the configuration, of course. It is possible, for example, to execute two F16 SOP (Sum of Products) instructions, any F32 to F16 conversions, and the move/output/pack instruction, all in a single cycle.
Alternatively, you could execute an FP32 Multiply-Add instruction (MAD), along with an FP32/INT32 MAD/UNPACK instruction, a test (conditional) instruction, and the move/output/pack instruction in one cycle. Math expressions should be written in MAD form in order to take advantage of the USC cores.

Another trick to optimising your work involving the PowerVR Rogue architecture is to take advantage of the fact that in some cases modifiers like abs(), neg(), and clamp(…, 0.0, 1.0), are free under certain conditions. When used on an input to an operation, abs() and neg() are turned into free modifiers by the compiler. On the other hand, clamp(…, 0.0, 1.0) turns into a free modifier when used on the output of an operation.
Thanks to these optimisations, your application will not only use less power to run but have lower hardware requirements as well.
Want to know even more ways to optimise your application? Then download the PowerVR Low-Level GLSL Optimisation document for yourself and find even more ways to leverage the PowerVR Rogue architecture in your favour!
Follow Imagination Technologies on social media on Twitter @ImaginationTech and on LinkedInFacebook and Google+.
 

Lukasz Furmaniak

Lukasz Furmaniak

Lukasz Furmaniak is a Technical Author within the Imagination Technologies Developer Technology team generating and editing user manuals for PowerVR. In his spare time, he enjoys console and tabletop gaming and also hosts and produces a collaborative storytelling podcast called "The Tritone Gambit".

Please leave a comment below

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback. However, all comments are manually moderated and those deemed to be spam or solely promotional will be deleted. We respect your privacy and will not publish your personal details.

Blog Contact

If you have any enquiries regarding any of our blog posts, please contact:

United Kingdom

benny.har-even@imgtec.com
Tel: +44 (0)1923 260 511

Search by Tag

Search by Author

Related blog articles

Connect

Sign up to receive the latest news and product updates from Imagination straight to your inbox.

  • This field is for validation purposes and should be left unchanged.

Subscribe to our newsletter

  • This field is for validation purposes and should be left unchanged.