PowerVR Tools and SDK v4.0


In this release, we aim to ease developers into the new generation of graphics APIs with our new Framework. It is a completely re-written cross-platform and cross-API framework which functions as scaffolding around which to build your own rendering or game engine. In addition to this, we have improved all of our utilities, though PVRTrace is the utility which has had the most changes – not only does it feature a large number of bug-fixes and back-end enhancements, but also a redesigned Scrubber for much improved Image Analysis. PVRTrace now also supports the Android Extension Pack. It also bears mentioning that PVRHub now is compatible with Android 6.0 Marshmallow, and it has been redesigned to support Android TV.


  • Updated EULA to separate PowerVR SDK (now under MIT licence) and PowerVR Tools (with a revised free license).


  • Ported a core of relevant SDK examples to be targeting the new PowerVR Framework.
  • Examples are still classified by beginner, intermediate and advanced levels.
  • Examples are now built per API family instead of per API version. At the moment, OpenGL ES Programmable pipeline (2.0+) is provided.
  • Platform max supported API version is now checked at runtime, usually creating the latest possible OpenGL context version unless otherwise instructed.
  • Revamped the look and feel of the SDK examples by using new themes and assets.


  • Brand new PowerVR Framework, replacing the PVRShell and PVRTools. The new framework consists of separate libraries providing groups of functionality as modules. These modules are PVRCore, PVRAssets, PVRShell, PVRPlatformGlue, PVRApi, PVRUIRenderer and PVRCamera.
  • PVRCore provides support for the other modules.
  • PVRShell provides platform abstraction/entry point (replaces the old PVRShell).
  • PVRPlatformGlue provides platform/API joining functionality to PVRShell.
  • PVRApi provides an API abstraction on top of which to build the example (replacing PVRTools).
  • PVRUIRenderer provides 2D element drawing/layout functions (replaces the old tools Print3D).
  • PVRCamera provides HW Camera abstractions (replaces the CameraModule).
  • Uses C++ (namespacing, smart pointers, OOP), the C++ standard library, GLM for maths.

PVRShaman v2.3.1

  • Updated to use Qt5.

PVRTexTool v4.2.0

  • Updated the PVRTC compressor, improving the quality and memory consumption of compression.
  • BRN51737: Fixed thread count calculation which caused an arithmetic exception on Linux and OSX.
  • BRN55500: Fixed bug where flipped TGA files (starting top-left instead of bottom-left) were not being interpreted as such.
  • Removed the PVRTexLib static libraries. Only the shared/dynamic libraries are available.


  • The astcenc process is now spawned correctly in PVRTexToolGUI for OSX.

PVRVFrame v10.2

  • Fixed a bug in ES 1.1 where the format of internal vertex arrays could be overridden in certain situations.
  • Fixed glGetTexParameter only accepting GL_TEXTURE_2D as a target.
  • Fixed EGL_TEXTURE_FORMAT not being accepted by eglCreatePbufferSurface.
  • Fixed a bug where cube map textures with GL_LUMINANCE format couldn’t be sampled correctly.
  • Fixed GL_PATCHES draw mode not being accepted by draw commands.
  • Fixed a spelling error causing ‘EXT_tessellation_shader’ to be reported as ‘EXT_tesselation shader’.
  • Fixed a crash in eglMakeCurrent(ctx) when ctx is already current on the current thread and has been marked for deletion.
  • Fixed glRenderubfferStorage(GL_DEPTH_COMPONENT32F) reporting GL_INVALID_ENUM (BRN56437).
  • Fixed glGet(GL_MINOR_VERSION/GL_MAJOR_VERSION) returning the host version (BRN56454).
  • Fixed GL_VERSION string not being spec conformant (BRN55737).
  • Fixed 2d texture arrays not working correctly with compressed texture formats.
  • Fixed a crash when using program interface queries.
  • Fixed a potential crash in glCompressedTexImage3D.
  • Fixed a case where unsupported GL features might be internally reported as supported, leading to segfaults.
  • Fixed glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT) reporting GL_INVALID_ENUM.
  • Fixed a bug where glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) would always return GL_TEXTURE when using MSRTT.
  • Fixed a bug where glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT) would report GL_INVALID_ENUM when using MSRTT.
  • Fixed a bug where glGetRenderbufferParameteriv(GL_RENDERBUFFER_SAMPLES_EXT) would report GL_INVALID_ENUM even when EXT_multisampled_render_to_texture is supported by the context.
  • Fixed a bug where extension strings returned by glGetStringi would be missing the “GL_” prefix.
  • Fixed a bug where clients could delete vertex attribute zero.
  • Fixed glBindFramebufferOES returning GL_INVALID_OPERATION when the given FBO name is not explicitly generated.
  • Fixed eglGetCurrentSurface returning a hidden pbuffer surface when using surfaceless contexts.
  • Fixed undefined reference in 32-bit Linux libraries.
  • Added support for EXT_buffer_storage.
  • Added support for ASTC compressed textures.
  • GUI: Added hardware profile management tools.

PVRTune v14.137

  • Fixed BRN57653: ‘Register overload’ description is incorrect.
  • Fixed BRN55864: PVRTune: Render state overrides are broken on Android when on the 3.5 SDK. Reproduced & fixed on Windows – it’s not Android specific. Used OGLES3Water + PVRTrace + PVRVFrame.
  • Added support for Series6XE USC counters.
  • PVRTune now supports just SGX DDK v1.7 onwards.
  • Added recognition of the following HW: G6020, GE7400, GE7800, GT7200, GT7400, GT7600, GT7800, GT7900.
  • Added support for PowerVR Series5XE GX5300.
  • Counters:
    • Added counter: “ISP pixel load”.
    • Added “Overdraw” counter.
    • Hide counters for cores that the HW does not have.
    • “SPM active”: counter restored to Developer build.
    • Counters: “ISP overload” removed.


  • Connection window: Removed the “adb forward” tip, since we have the button now.
  • Fixed a bug where whatever was selected into the Counter Properties widget would have its y-axis value minimised when returning to the connect screen.
  • Fixed BRN57650: Re-enable ‘Specify Clock Speed’ in PVRTuneDeveloper.


  • Fixed BRN57649: PVRPerfServer CPU sample rate now defaults to 1ms, which basically translates to “every wake-up” (and the current default wake-up is every 5ms). Bug fix: minimum CPU load time is 1ms, not 0ms.
  • Allow a minimum wake-up time of 0ms, i.e. give up time slice but run again ASAP. PVRTune’s remote control updated in kind.

PVRShaderEditor v2.7.1

  • New dialog allows pre-processor macros to be modified and injected into the profiler output as you type.
  • Added compiler support for tessellation and geometry shaders.
  • New interface to select compiler flags on the fly, per tab.

PVRGeoPOD v2.16.7

  • If a material contains an opacity map we now flag the material as requiring blending. This fixes BRN45171.
  • Standalone: Updated the parser used internally.
  • 3DSMax: Added support for 3DSMax 2016 (IGame version 18.0.873.0).
  • 3DSMax: Added support for 3DSMax 2016 SP1 (IGame version 18.3.490.0).
  • 3DSMax: Dropped support for anything older than 2013.
  • Maya: Fixed an issue in 2015 which caused geometry to go missing in some scenes.
  • Maya: Dropped support for anything older than 2013.

PVRTrace v3.6.1


  • Enums provided by EGL_EXT_buffer_age are now recognised.
  • Fixed displaying fixed point data in the state widget.
  • Fixed the ES1 part of the state widget that displays if a client array is enabled.
  • Fixed the state for the last binding point.
  • Fixed the loading of ES1.1 trace files that do matrix operations using the default matrix modeAdded option to copy the image analysis/texture/fbo attachment contents to the clipboard.
  • Fixed a bug where it was possible to have an empty EGLSurfaces header in the EGL Objects list.
  • Fixed a bug in the ShaderViewerWidget that meant the shader source didn’t always show up.
  • Fixed formatting of the clip planes in the state widget.
  • Fixed a bug where pixel analysis data was empty after changing pie charts.
  • Fixed some memory leaks.
  • Fixed primitive highlighting on calls that modify the glColorMask.
  • Fixed the second re-render when viewing image analysis normally.
  • Fixed an issue where eglSwapBuffers was not getting played on the correct thread. This fixes BRN55633.
  • Added support for EGL Displays to the object data viewer.
  • Added Blended column to the draw call list widget (hidden by default) which will display if blending is enabled for that call.
  • Added a tooltip to the draw call list widget that will display the information for all the columns regardless of whether they’re visible.
  • Added right-click option to draws/clears that allows the user to inform the scrubber of where you’d like to scrub up to.
  • Added a new graph to the pixel analysis that displays the overdraw distribution.
  • Added Program column to the draw call list widget.
  • Added option to remove the crosshair to the right-click menu in image analysis. This fixes BRN47298.
  • Added option to the image analysis right-click menu that allows you to remove the current highlight.
  • Added option to the preferences allowing the user to select the pixel analysis cross-hair colour.
  • Added vertex cost, fragment count, fragment cost and total cost to the draw call list. The latter 3 require fragment analysis to be enabled.
  • Added option to enable/disable columns in the draw call list.
  • Added option to save the draw call list and its data to .csv.
  • Added thread colour to the Selected Pixel view.
  • Added support for only exporting certain threads.
  • Added render target column to the draw call list.
  • Added option to normalize visualised depth and stencil data. This is enabled by default.
  • Active texture values that exceed GL_TEXTURE31 will now appear as GL_TEXTURE0 + i instead of the GL enum value that they match to.
  • When saving out a trace file from the GUI the version written to file will now specify PVRTrace GUI
  • Static analysis now shows when a call to glCheckFramebufferStatus didn’t return GL_FRAMEBUFFER_COMPLETE.
  • The static analysis can now be navigated via the keyboard. This fixes BRN48535.
  • From the API object lists in the current call widget you can now right-click on an object and find all references of it.
  • You can now copy search results to the clipboard by right-clicking on the Search’s heading and choosing copy.
  • Search results now appear as they’re found.
  • The GUI now correctly shows the shader source for trace files that were recorded without data.
  • The Zoom level drop-downs in the GUI no longer permanently set the level when just highlighting, only on selection. This fixes BRN51520.
  • Image analysis should now work on frames that rely on the contents of previous frames to be preserved.
  • glDraw*Indirect calls now show up in the draw call list with their vertex counts.
  • The Fragment Analysis table now shows if a shader uses discard.
  • You can now export the state information of a call to .csv.
  • Depth complexity now normalises the data so it better uses the available data range.
  • PowerVR depth complexity view is now built from pixel analysis data.
  • Hovering over the image analysis will now show the pixel value under the mouse pointer.
  • Pixel Analysis now includes total vertex and fragment costs under the frame summary.
  • Pixel Analysis now works for OpenGL ES 1.
  • Pixel Analysis now contains Total cost and Total texture read columns.
  • Saving images from the image analysis now displays a message on failure.
  • Moved the statistics graph button to the top of the call view.
  • Primitive highlighting now applies a colour overlay along with the wireframe. The wireframe and overlay have separate colours which can be defined in the preferences.
  • Modified the way the GoTo dialog validates entry.
  • The GoTo dialog now displays the current frame/call when there is no text.
  • Fragment analysis now takes into account color mask, render target changes and opaque pixel writes that sandwich translucent writes when calculating.
  • Output of GLeglImageOES values in the GUI now use the same format as EGLImages.
  • Overhauled the save trace file dialog.
  • Redesigned the image analysis widget.
  • Fragment analysis now correctly works in situations where a program doesn’t have an attached vertex shader or the shader has been modified after link.
  • The normal analysis mode has been replaced with colour, depth and stencil options for viewing those respective buffers.
  • For single primitive mode we now clear the image analysis to a user defined colour to make it easier to see your primitive.
  • The draw call list now includes clears and updates based on the scrubber. It also shows the draw UIDs instead of a number.
  • The current call now tracks with the scrubber. This feature is disabled by default and can be enabled in the preferences.
  • Made improvements to the frame scrubber. The numbered boxes are replaced with a slider that updates in “real-time” but will drop “frames” if things are taking too long.
  • When saving out a trace file from the GUI the saved framebuffer will now also be saved.
  • The texture data viewer now recognises GL_DEPTH_STENCIL_TEXTURE_MODE.
  • Modified the disable call feature so it is more restrictive in what you can disable.
  • The state widget and object viewers now take into account disabled calls.
  • A 100% shader analysis pie chart will no longer have a line segment in it.
  • You can now view the attributes/uniforms/ uniform blocks of a program (only for recordings from 4.0 and later).


  • Fixed a bug that meant a certain combination of program setup calls would result in glUseProgram failing due to an unlinked program when jumping frames.
  • Fixed playback of ID_ES3_glFlushMappedBufferRange for situations where the whole buffer wasn’t getting flushed.
  • Fixed deletion of surfaces and contexts which are current at the time their destroy functions are called.
  • Fixed GL_PROGRAM_BINARY_LENGTH returning anything but 0 when program binaries are disabled.
  • Added –skip-calls command-line option which allows you to skip calls by their UID.
  • Added command-line option –raise-context-versions which will raise context client versions that it believes are incorrectly defined. E.g. situations where the app defines a version of 3.0 but uses 3.1 features.
  • Added command-line option –config-info which will print out information on the configs used during playback. This fixes BRN56575.
  • Rewrote the way we playback multi-threaded trace files.
  • We now output a message after loading to say which frames contain renderstate information.
  • When using the range option in the playback it will now only load up to the frames it needs to.
  • Playback can now save the framebuffer as PNG files.

PVRTrace Recorder

  • Added support for the Android Extension Pack.
  • Added support for recording and playing back EGL_EXT_swap_buffers_with_damage.
  • The recorder now attempts to log calls to extension functions that are unknown to PVRTrace, and are viewable inside the GUI.
  • PVRTrace now records the values of EGL_DEFAULT_DISPLAY, EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT for mapping between platforms where they differ at playback time.
  • Fixed crash that could occur while framebuffer saving is enabled for applications that use differently sized EGL surfaces.
  • Fixed recording of glDrawElements calls without a bound element array buffer.
  • Fixed a crash that could occur when attempting to record ycbcr clientbuffers on Android.
  • Fixed recording of the EGL_MATCH_FORMAT_KHR config attribute.
  • Fixed a crash that could occur if you attempt to record glEnableVertexAttribArray without a current context.
  • Added missing OpenGL ES 3.1 entry points for Windows recording libraries.
  • Added an option to the configuration file to turn off the attempted logging of calls to unknown extension functions.
  • When a display is first initialised we now record some information about the display.
  • The message “Recording… Current frame” is now correctly output for frame 0.
  • The first time a context is made current we now record the maximum values, gl strings etc. This information can be viewed in the GUI when viewing the context data.
  • We now output a warning if no config settings are found for the current process.
  • Changed it so it will still work if only EGL 1.1 functions are found (e.g. if you used libGLES_CM for the EGL host library).
  • Implemented a fix for tracing Windows/Linux applications that use PVRVFrame and load the GLES functions at runtime.
  • Recording OpenGL ES 2,3,3.1 functions that are being called without a current context should no longer crash when not recording from frame 0.
  • At program link time we now record information on the active attributes, uniforms and uniform blocks.

PVRHub v3.0

  • Added support for Android Marshmallow.
  • Added a warning when installing the PVRTrace recording libraries on untested Android versions. The PVRTraceInstaller now needs a -f argument to force an install.
  • The interface can now be fully navigated using directional input such as a remote control.
  • Fixed crash when launching Android TV apps that only have the LEANBACK_LAUNCHER category declared for their activities.

PVRMonitor v1.03

  • PVRMonitor now builds to a minimum API Level of 18 (was 14), which is Android 4.3 from July 2013.


  • New utility features have been documented in their respective user manuals.
  • Updated the PowerVR SDK Browser in line with the changes brought about to the PowerVR SDK.
  • Source code documentation for the PowerVR Framework is packaged in their respective modules, as well as being accessible through the PowerVR SDK Browse.