PowerVR Tools and SDK v3.4


In this release PVRShaderEditor adds the latest compilers for Series6, Series6 FP16, and Series6XT to provide more up-to-date profiling. PVRShaderEditor also adds new functionality to access the GLSL disassembly for these compilers, as well as full instruction set documentation. In addition, several performance optimizations have been made for the different utilities in the PowerVR Tools suite. New SDKs have been added including WebGL, Android 64bit and Linux MIPS. Furthermore, a fully redesigned PowerVR SDK Browser is now supplied with the distribution for improving accessibility of the SDK contents.


  • Added support for Android arm64-v8a, x86_64 and mips64.


  • PVRScopeExample and PVRScopeRemote: updated for PVRScope changes.
  • PVRScopeExample: CPVRScopeGraph::SetActiveGroup() now accepts a group number even if there are no counters in that group, if there are higher groups. This allows PVRScopeExample to pass an empty group, to reach a higher, populated group number. Allows for ‘invalid’ group numbers – i.e. SW counters.
  • PVRScopeRemote:
    • Make use of PVRScopeComms new support for nested begin/ends.
    • Utilise the CPPLProcessingScoped helper class where appropriate.
    • Use the optional pplWaitForConnection() function.
    • Instrumented all remaining functions in the app (LoadTextures, LoadShaders, LoadVbos), using CPPLProcessingScoped. Also made use of the __FUNCTION__ define.
  • OGLES3ProceduralTextures: corrected input flags for glMemoryBarrier.


  • CPVRTPrint3D: Fixed out-of-bounds access.


  • CPVRTPFXEffect: Fixed the Destroy() function to destroy the texture data.
  • Fixed a bug in the implementation of PVRTMap where calling ‘Remove’ might have incorrect behaviour.

PVRShaman v2.2.2

  • Incorporated new icons in the GUI.

PVRTexTool v4.1.4

  • Increased performance of ETC decompression. It’s now up to about 20% faster per surface, depending on the compression scheme.
  • Fixed scaling issue. All test cases now work 100% correctly when downscaling.
  • Fixed crash when saving a texture with MIP Maps to a KTX file.


  • Updated icons to new consistent style.


  • Fixed padding argument so that they actually pad the metadata.
  • Fixed bug with ‘-squarecanvas +’ where size was being set to the largest of width and depth instead of width and height.


  • Updated PVRTC Compressor to version 1.190, which fixes the single region crash, which caused small PVRTC2 textures (or MIP Maps) to crash the tool.
  • Fixed bug in PVRTC2 compressor where it won’t properly compress textures that generate a single PVRTC region in the Y dimension (i.e. any texture, or MIP Map level in a texture, with a height of 4 or lower).

PVRTexTool Plugins

  • Added 2015 versions of Autodesk 3DSMax and Maya.
  • Fixed channel order when loading PVR files in Maya.

PVRVFrame v10.0

  • Performance improvements.
  • Added support for OpenGL ES 3.0 on OSX.
  • Added Windows XP support.
  • Added support for KHR_blend_equation_advanced and KHR_blend_equation_advanced_coherent.
  • Added support for EXT_texture_sRGB_decode.
  • Added support for GL_EXT_robustness.
  • Added seamless cube map support for OpenGL ES 3.0+ contexts.
  • Fixed glTexStorage2D when format GL_DEPTH24_STENCIL8 is used.
  • Fixed shaders of different versions being linkable.
  • Fixed GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH always returning 0.
  • Fixed a possible data race situation when using textures in multiple threads.
  • Fixed a bug in glTranslatex where values were not being converted correctly.
  • Fixed a possible crash on OSX when sharing contexts.
  • Fixed STENCIL_INDEX8 format textures not being allowed with an ES 3.1 context.
  • Fixed a bug in eglCreateWindowSurface where allowed attributes weren’t being checked correctly.
  • Fixed error checking of requested major/minor version in eglCreateContext.
  • Fixed an issue on Linux where contexts would be initialized incorrectly when using mesa OpenGL drivers.
  • Fixed gl_FragData in shaders not being translated correctly.
  • Fixed a bug in GLSL translator where textureCubeLODEXT was not being translated.

PVRTune v14.88

  • Renamed TA to Tiler, and 3D to Renderer.
  • Added counters:
    • Shader proportion: pixel.
    • Shader proportion: vertex.
    • Shader proportion: compute.
    • Vertices per batch.
    • Shader slot scheduled count: compute.
    • Shader slot scheduled count: pixel.
    • Shader slot scheduled count: vertex.
    • Shader slot size: pixel.
    • Shader slot size: vertex.
    • GPU task time per frame: Tiler core.
    • GPU task time per frame: Renderer core.
    • GPU task time per frame: 2D core.
    • GPU task time per frame: Compute core.
  • Complete build and custom counter groups:
    • Custom counters: editable fourth column.
    • Rename the count modes “unary” and “binary”.
    • Added a filter input box for the first three columns.
    • Set the stretch factors to give the rightmost two columns more space.
    • Removed uniformItemSizes for the first list. That also affects width, which means the horizontal scroll bar wasn’t appearing soon enough.
    • Fixed tab order, and put the focus in the filter box by default.
    • Now saves and restores the dialog’s geometry each time.
    • Now create counters for custom HW sources.
    • BVNC string parsing. Should now handle V=’cb’ or V=’3p’ style BVNCs. When automatically creating per frame and per second counters for HW sources, now also creates a per clock counter.
    • When automatically creating per frame and per second counters for HW sources, now also creates a raw counter. This lets you see the actual count in the time period. Perhaps useful in the counter table, but not in the graph.
    • SGX XT counter: “Shader load: Compute”.
    • New counter: Batches per frame.
    • New counter: Shader proportion: event.
    • PVRTune regression fix: Counter Table group combo box now correctly displays the chosen group.
    • Fixed some counter sources not being visible after choosing them in a custom group.


  • PID docking-window: fixed occasional disappearance of known application names (they are only received if PVRPerfServer is run with the -pid option).
  • Monitor docking-window:
    • Data no longer “pauses” during periods of no GPU activity.
    • Added the missing shader core load, for Rogue.
  • Counter properties docking-window:
    • No longer lets the window size grow due to a long counter Name or Source string.
    • Also sets the Name and Source strings as StatusTips (ToolTips are too distracting) – allows larger strings be read.
  • Added support for nested user timelines. PVRTune renders these as a “flame graph”.
  • Connection screen:
    • URL buttons now automatically shrink their text to fit (lost during port to Qt).
    • “Connect To:” box now gets the focus by default, as it should, and as it used to. Can once again simply run and press Enter to go straight to the last connection.
    • Now convert all file path slashes to ‘/’. This fixes/removes the possibility of two ‘matching’ paths in the file history but with different slashes on Windows.
    • Status bar: now has a visual semaphore indicating connection warnings; click to show the PVRPerfServer Details dialog box.
    • Added more feedback to PVRPerfServer details: now shows warnings at the bottom.
    • Complete build: additional info.
    • Fixed some rare crashes.
    • Main window: fixed the ’empty window’ behind the splash screen during first (no preferences file) start up.
  • Changed the default docking-window layout:
    • Top Dock left to right: counter table (default top-most), search, remote editor.
    • Bottom: Monitor (default top-most), Props, RS override, PID.
  • Mouse hover over the Monitor now causes counters to highlight. Also, in the bar chart style, empty components will now have a hit-test result.
  • The Counter Table context menu now has a new option “Properties”, which enables and brings the Counter Properties docking window foremost, and sets the focus to the Y-Axis input box.
  • Graphs:
    • Graphs now scroll more smoothly even when received data is intermittent.
    • Fixed an issue where start-up with a zoom value of one (1) would mean that the mouse-wheel could not be used to zoom out, but other methods could.
    • Fixed vertical centering of timeline labels on Windows and Linux.
    • Renderstate Override: sets vertical policy to preferred, rather than fixed. Makes it a much more polite docking window.
    • Fixed a case where scrolled graph rendering could show pixel corruption (refresh would fix).
  • PVRTune performance optimisations.
  • Bug-fix: restore proper counter tool-tips.
  • No longer remember zoom or position between sessions. When loading from a file, automatically “view all” when complete.
  • New icons.


  • PVRPerfServer command-line:
    • All non-single-character commands must now be prefixed with two dashes, e.g. –pid rather than -pid.
    • Added new command line option quit after time (qat) e.g. “–qat=4.2” which commands PVRPerfServer to auto-quit after a time of 4.2 seconds.
  • PVRPerfServer for Linux, BB10 and Android: made unnecessary and removed command line option “–disable-user-input”.

PVRScope Library

  • PVRScopeComms.h:
    • Don’t prefix strings with psz (thereby specifying NULL-terminated), when in fact there is a string-length parameter. pplSendMark() comment improved: the input string is not time-stamped, it’s done internally.
    • New class: CPPLProcessingScoped. Helper class which will send a processing begin/end pair around its scope. You would typically instantiate these at the top of a function or after the opening curly-brace of a new scope within a function.
    • PVRScopeComms.h: updated comments; pplSendProcessingBegin() / pplSendProcessingEnd() pairs can now be nested.
  • PVRScope: Headers should work with C code.
  • PVRScopeReadCountersThenSetGroup(): removed nTimeUS parameter as it is now queried internally.
  • Split PVRScopeReadCountersThenSetGroup() into two new functions: PVRScopeReadCounters() and PVRScopeSetGroup().
  • PVRScopeStats: new function PVRScopeFindStandardCounter().
  • Fix for per-render counters (per-frame were ok).
  • Fixed a regression in the first SDK 3.3 release that could cause noisy data.

PVRShaderEditor v2.5

  • Increased stability for heavy use.
  • Fixed keyboard shortcuts for consistency across Linux, Windows, and OSX.
  • Added support for new OGLCompiler Performance Simulation flag.
  • Added support for OCLCompiler flags.
  • Compiler options layout redesign, adding support to do per-file configuration.

PVRGeoPOD v2.16.3

  • CLI: Updated the command-line. Old commands will still work for release but are now undocumented.
  • Blender: Fixed the exporting of cameras that are the children of other objects.
  • Fixed a bug where meshes were split even if we weren’t exporting materials.
  • Added support for 3ds max 2015 SP 2 (igame version

PVRTrace v3.4

  • Added data compression for trace files to reduce their size.
  • PVRTrace will now output an error message if you attempt to load a trace file with a file format newer than the latest format recognised.
  • PVRTrace files are no longer allowed to have ‘:’ in their name. This caused issues when recording on Android where it is allowed and trying to pull the file on to Windows where it isn’t.
  • glTexEnv and glGetTexEnv now show the enum values as strings where appropriate.
  • Frame count now begins at 0 to match the recorder.
  • Export frame stats now exports information from the first frame.
  • Significantly reduced memory usage.
  • glStencilMask now shows its mask as a hex value instead of an unsigned int.
  • Fixed a bug in the renderstate tracking of glCopyBufferSubData.


  • Fixed an issue with the generation of the PowerVR depth complexity for some trace files.
  • You can now view the attributes of a config used for context and window creation by hovering over the config parameter of their respective eglCreate* functions.
  • We now display an error message if the profiling compiler fails to compile a shader.
  • Added the GL_EXT_debug_marker functions.
  • The image analysis spinning loading symbol now scales with the window.
  • glIsQueryEXT now loads the return value.
  • The static analysis now shows errors for shaders that failed to compile and programs that failed to link if and only if the trace was recorded with the latest version. Also, if you hover over the call in the static analysis window it’ll mention the compilation/linking information log.
  • The call summary export now includes lists all API calls instead of just the ones used. This should make is easier to diff application runs.
  • Fixed call highlighting on Linux.
  • The “cancel” button has been removed from the search dialog. Now, if a search is running the “find” button becomes the “cancel” button.
  • Softened the static analysis warning about using scissor rectangles as this only applies to SGX.
  • If the trace file was recorded with the save framebuffers option you can now export the framebuffers to a folder as separate images.
  • Fixed a crash that occurred if the statistics dialog was open when exiting.
  • The call view can now be navigated with the page up and down keys.
  • Fixed the function quick help which was broken for some functions.
  • Added the function quick help to extension functions where possible.
  • Fixed a bug where the thread list would not get cleared when loading multiple trace files.
  • Play failed calls is now disabled by default.


  • By default we now playback calls that caused errors during recording. This can be disabled within the GUI or in playback via the command-line.
  • Fixed an issue with playing back uniform blocks.
  • Added support for the query EXT functions.
  • Added –robust that will force the use of EGL_EXT_create_context_robustness and GL_EXT_robustness and will check the reset status of the GL context after each call. If you do –robust=0 it will disable the use of those extensions.
  • Added support for playing back eglCreateImageKHR with targets:

PVRTrace Recorder

  • Fixed 2×2 texture override when the application is using texture 3D and 2D array.
  • Fixed force flat colour fragment shader for applications that use GLSL 300 ES shaders.
  • You can now set the default states of the renderstate overrides in the config.

PVRHub v2.1


  • Added an option to compress data in trace files.
  • Added an option to enable/disable the gathering of CPU usage data when profiling is enabled.
  • The recording output level is now configurable.
  • You can now set the initial state of the renderstate overrides.
    • Added option to disable the appending of the PVRTrace version to the GL_RENDERER and EGL_VERSION strings.
  • Added the option to send markers to PVRTune when profiling.
  • The “Application list” gets cached at PVRHub launch time (there is an option to refresh it) decreasing substantially the load time.
  • User Interface
    • Added new icons.
    • Other minor UI changes such as simplification.
    • Added option to share trace files.
    • Added a “File Manager” option to help developer manage the recordings captured.


  • New SDK Browser to make easier to find the material contained in the PowerVR SDK with full explanations, hyperlinks and enhanced installation instructions.
  • Major styling improvements brought about to the Shell, Tools, PVRTexLib and PVRScope documentation.
  • Major overhaul of various user manuals in order to better address the needs for the intended audience of developers.
  • PowerVR Supported Extensions documentation:
    • Added GL_OES_texture_stencil8.
    • Updated extensions listing to match current driver support.


  • Added Android OpenGL ES 3.0 SDK.
  • Fixed all Utilities shortcuts on Windows and Linux.
  • Fixed file association on Linux.
  • Added TextureStreaming demo missing from the installer.
  • Added missing OpenGL ES 3 iOS deliverable.
  • Fixed VS2010 redistributable install logic and fixed behaviour when Microsoft installation is cancelled.