What's New in PowerVR SDK v3.3

PowerVR SDK v3.3


  • The PowerVR Graphics SDK v3.3 includes support for the recently ratified OpenGL ES 3.1 in PVRVFrame, our desktop emulation libraries.
  • PVRTrace now includes full recording capabilities on Android 4.4 (KiKat) and the handling of Android Native Buffers has been improved. Developers also now benefit from enhanced search and remote recording capabilities and complete support for OpenGL ES 3.0 API.
  • PVRTune implements a new ‘monitor’ window which provides a simplified and high-level overview of CPU, memory and graphics loading, allowing developers to quickly isolate application bottlenecks. It also has improved highlight and selection capabilities and implements new per-PID stats.
  • In addition, the SDK’s documentation has been comprehensively reviewed and updated.


Full support for the recently ratified OpenGL ES 3.1 API has been added to PVRVFrame. Please note that this support is only intended for early development, as an OpenGL ES 3.1 conformance test has not yet been released. To use it, please download the header files from the Khronos website. We will shortly release a full SDK highlighting the most important features of this new API.


  • ToneMapping: Now it uses point sampling for its float texture.
  • OcclusionQueries: Fixed the name of the texture variable in the effect.pfxs.
  • ShadowMapping: Fixed a typo in the OGLES3 effect.pfx file which resulted in the texture coordinates being uninitialised.
  • EdgeDetection: Moved initialisation of timer to InitView so the first value is valid. This fixes the problem using -fft command-line option.
  • MagicLantern: Moved initialisation of timer to InitView so the first value is valid. This fixes the problem using -fft command-line option.
  • Water: Updated with new assets including a new skybox, ship and terrain.
  • Shaders: Improved command-line parsing so it doesn't attempt to match any option that begins with -s or -m.
  • DeferredShading: Stencil buffer was not requested in the EGLConfig for ES3, but was assumed and used. Now updated to always request a stencil buffer.
  • TextureStreaming: New example for Android and iOS.
  • Added OGLES3 iOS project files for all examples capable of running on iOS.


  • PVRTString: Added positional variants of the format commands.
  • PVRTTexture: Added PVRTC sRGB texture support.
  • PVRTPFXParser: Fixed crash while processing texture wrap parameters.
  • PVRTArray: Changed the Sort() method to use merge sort instead of bubble sort.
  • PVRTError: Fixed warning in PVRTError.h as the format parameter to printf was not a string literal.
  • PVRTResourceFile: Added a null pointer check in GetFile.
  • Added a new CameraInterface library for Android and iOS which allows quick initialisation and usage of hardware cameras to stream textures to OpenGLES.


  • Improved the Android OS lifecycle.
  • Modified PVRShellOutputDebug on Windows to dynamically allocate its buffer instead of using a fixed size of 1024

PVRShaman v2.3

  • Fixed bug in which the Save POD icon would be greyed out.
  • Added the displaying of POD textures such as bump and specular level to the Material Properties dialog.
  • Fixed bug when using external shader files in a PFX material. The material would fail to pass validation.

PVRTexTool v4.1.3


  • Fixed issue with BC1 Compression producing holes in fully opaque textures when an entire block was the same colour.
  • Fixed memory leak in ETC2 Codec.
  • Integrated latest version of PVRTC codec, which should produce generally better quality images, and manages threads a bit more smartly.
  • Fixed issue with certain ETC textures not compressing correctly under Windows.


  • Font texture generation now outputs white textures rather than black.
  • Fixed channel swapping so that when multiple file sources are selected, it correctly copies the channels.
  • Fixed memory leak when zooming in/out of Diff window.
  • Added RGBA/RGB distinction for PVRTCv1.
  • Added PVRTC sRGB support.
  • "Single" display mode now zooms to/from the mouse position, rather than the corner of the screen.

PVRVFrame v9.8

  • Added OpenGL ES 3.1 support.
  • Fixed vertex_array_object extension not being emulated on OSX.
  • Fixed GLSL translator where reserved identifiers were erroneously added to the GLSL source.
  • Fixed EGL_SUCCESS not being reported by some EGL functions in cases where it should.
  • EGL_BAD_ALLOC now reported by eglCreateWindowSurface on Windows platforms if the application attempts to re-use an HWND for which the pixel format has already been set.
  • Fixed EGL context ids where it would not always be unique.
  • Fixed GL_LUMINANCE texture data clamping to [0,1].
  • Fixed glBindRenderbuffer where it would not work with names not generated by glGenRenderbuffer.
  • Fixed a crash in glDeleteSamplers.

PVRTune v14.73

  • PVRScope library only: Reduced noise in per-core activity counters.
  • PVRScopeStats.h, PVRScopeReadCountersThenSetGroup(): Updated comment to consider standalone performance-tracking applications such as PVRMonitor or a logging app.
  • PVRPerfServer can now send CPU usage info for 'interesting' PIDs that it sees: apps that connect via PVRScope, PIDs shown in HWPerf timing data, and PIDs specified on the command line. To enable it, specify "-pid" on the command line. To additionally watch specific PIDs, specify "-pid=A,B" etc.
  • Added per-core task time counters.
  • Added per-PID stats: TA Busy %, 3D Busy %, 2D Busy %, Compute Busy %, 3D SPM %.
  • Dynamic counters created per PID or CID now place the PID/CID number first; gives easier sorting.
  • CPU usage can now be sent per core and per PID.
  • Memory usage can now be sent for the system and per PID. Added counters: Memory use, Memory total, Memory load, PID %u: Memory use.
  • Added new docking window: Monitor. This gives a simplified 'at a glance' view of the CPU, memory and graphics loading.
  • Fixed: When connecting, disconnecting and reconnecting, pause was enabled by default.
  • Search window
    • The "select" tick box has been removed.
    • Mouse-over search results now highlights the relevant time range (if any) in the graph views.
    • Single-click on a result now pans the view, rather than panning + zooming.
    • Double-click on a result now pans and zooms the view.
    • Holding the Ctrl key while doing either of the above also selects the time range. (Similar to how Ctrl+click in a graph view is used to alter the selected time range).
    • Hold Ctrl+Shift to extend the existing selection.
    • Added View\Find - Ctrl+F now works to bring up Search (shows, raises and sets focus to the input box).
  • Graph Views
    • Now display the highlighted time range.
    • Ensure selection/highlight range draws are always at least 1 pixel wide.
    • If there is a task under the mouse, highlight the entire time range.
    • Ctrl must be held to modify the selection - don't suddenly allow Shift by itself to extend the selection.
    • Ctrl+clicking on a task now sets the selection to be the entire task time-range - giving 'snap' behaviour. Additionally, hold Shift to instead extend the existing selection.
  • Counter Table
    • Added a new counter table column: Highlight.
    • Counter Table default columns are now: 1s, Selected, View.
  • Counters
    • Enable SPM counter in Developer build.
    • Renamed some US counters to USC.
    • Increase the maximum graph y-axis value that may be entered.

PVRShaderEditor v2.3

  • Performing a search when the ASM Output widget has focus now searches the ASM widget instead of the main editor.
  • Deleting or moving a file which is currently open in PVRShaderEditor will now correctly prompt whether to discard the file or keep the file in the editor.
  • Fixed bug in which re-opening the editor when closed with a blank file and the option 'Save Session' selected would display an IOError.
  • Fixed bug which meant that PFX line cycle counts and errors were only being displayed for the entire GLSL block, rather than per-line, if the GLSL code is embedded.

PVRGeoPOD v2.16

  • Fixed the exporting of .h/.cpp files from Maya and Max.

PVRTrace v3.3


  • Fixed the saving of the wireframe colour to the preferences.
  • The call summary now allows the addition of highlights to the calls in the call viewer, as well as to find all occurrences of that call using the search feature.
  • The call summary now supports multiple selection of calls using Ctrl+left mouse click and Shift+left mouse click.
  • It is now possible to search calls within a specific frame range and by thread.
  • Status bar messages no longer timeout.
  • The minimum number of characters that can now be searched for is 1.
  • Search results can now be selected with Enter when navigating with arrow keys.
  • Tidied up/simplified the Remote Controller interface.
  • The default for the number of search results has been raised from 100 to 500
  • Added the EGL_CONTEXT_PRIORITY enums as recognised values.
  • Tweaked the Find functionality.
  • Render targets are now listed in chronological order.
  • The Android version of the PVRTrace libraries now export a subset of the extensions that the NDK's version of libGLESv1_CM and libGLESv2 export.
  • Added an extra counter to the profiling that shows the total number of API calls in a frame.
  • Modified the call summary export so the rows and columns are switched.


  • Added support for recording on Android 4.4, KitKat.
  • Added support for recording eglImages created from EGL_NATIVE_BUFFER_ANDROID client buffers.
  • Supports JSON-formatted configuration files.
  • It is no longer needed to specify the Android drivers to use when recording in the config file as the recording libraries will locate them as long as they are located in /system/lib/egl or /vendior/lib/egl.
  • Fixed a failure to open the recording file on Android if %pname is used and the process name has slashes in.
  • Renamed some command-line options: --windowsToUse becomes --window, --delayRenderFrame becomes --delay and --iterations becomes --repeat.
  • Fixed multidraw support.
  • Added missing ES3.0 functionality.


  • Extensions: Added GL_EXT_shader_framebuffer_fetch and added EXT_separate_shader_objects.
  • Fixed an error in the User Guide where it incorrectly stated the FSAA command for the PVRShell as "-FSAAMode=N" instead of the new "-aasamples=N".
  • Fixed an error in the network recording instructions that specified to use 'Network Panel' to now correctly reference the 'Remote Controller'.
  • Fixed an error in the instructions for Installation on Linux where the Scripts folder was not correctly capitalised.
  • Fixed an error in the instructions for Installation on Linux where a space was missing before a closing square bracket in the .bashrc entry.
  • Updated PVRTexTool User Manual.
  • Enhanced PVRScope User Manual.
  • Enhanced PVRTrace User Manual and Quick Start Guide.
  • Enhanced PVRTune User Manual and Quick Start Guide.
  • Enhanced PVRHub User Manual.

PowerVR SDK v3.2


  • Added Linux build flag V1BUILD that allows you to link OGLES applications with libGLESv1_CM and libEGL instead of libGLES_CM.


  • Added OGLES2 OcclusionQueries example.
  • Added OGLES2 MultipleRenderTarget example. This example uses the GL_EXT_draw_buffers extension.
  • Added OGLES2 Glass, a dynamic dual-paraboloid environment mapping example.
  • Added OGLES3 ColourGrading which demonstrates performing colour grading using a 3d texture as a look up table.
  • Added OGLES2 MultiThreading example demonstrating the correct technique of loading GL resources on a separate thread.
  • OGLES3CubeShadowMapping: Removed some redundant uniforms.
  • PVRScopeRemote: no longer reports success/fail messages using PVRShellOutputDebug() - it now remembers the result and displays a message using Print3D: "PVRScopeComms failed - is PVRPerfServer connected?"
  • PVRScopeRemote now uses the new PVRScope function pplSendProcessing() to have a custom timeline in PVRTune, which marks the time period of RenderScene(). As these tasks have a frame number, PVRTune is able to group them with TA and 3D tasks.
  • OGLES2/OGLES3 Fractal: Simplified so it no longer creates its unneeded depth attachment. The attachment was originally put in to teach developers how to create a depth attachment but now the RenderToTexture example demonstrates this.
  • OCL_OGLES2ImageConvolution: Modified to use CL_KHR_egl_image extension if available.
  • OGLES1 AntialiasedLines: Removed this outdated demo.
  • iOS OGLES/OGLES2 HelloAPI: Fixed examples as they previously rendered a black screen.
  • RenderToTexture: Added EXT_multisampled_render_to_texture.
  • OGLES2 Water: Fixed a shader precision issue in SkyboxVShader.vsh that was causing minor flickering on some hardware.
  • OGLES2 Water: Updated the example to calculate the FBO dimensions based on the width and height as opposed to being hardcoded at 256.
  • Removed the Cygwin dependency on Windows of the Android SDK by fixing the Android.mk files of all the Android examples and Android Tools.
  • Updated iOS project templates. Renamed to *.xcodeproj; updated project compatability version to 3.2; removed support for armv6; enabled Thumb support (as we now only compile for armv7+); fixed some incorrect and deprecated settings; increased the minimum target version to 4.3.


  • Added EXT_occlusion_queries_boolean #defines to CPVRTgles2Ext class.
  • Added GL_EXT_draw_buffers extension functionality to CPVRTgles2Ext extension class.
  • Fixed possible problem with OGLES2 PVRTPFXParser by checking GL_DELETE_STATUS before calling glDeleteProgram.
  • PVRTglExt: Updated extension class to use new 3.2 functionality for querying extensions.
  • PVRTTextureAPI: Removed deprecated Luminance/Alpha formats.
  • PVRTShader: Modified behaviour so that #define values will now be correctly inserted after a #version marker.
  • PVRTString: Updated the format function to use _vscprintf when on windows for getting the size of the needed string.
  • Added pre-processor commands to PFX. It is now possible to specify a block of pre-processor #defines in an [EFFECT] block which will be prepended to a given GLSL shader.
  • Updated iOS OGLES and OGLES2 Tools projects to remove support for armv6; removed some unnecessary settings; enabled Thumb support (as we now only compile for armv7+); enabled compile of Prefix.pch which sets some iOS specific #defines and fixes some issues as TARGET_OS_IPHONE was being incorrectly manually set in the project settings.
  • Added GL_EXT_multisampled_render_to_texture to the CPVRTgles2Ext extension class.
  • Fixed bug in PVRTUnicode which would incorrectly test for overlong values in the PVRTUnicodeValidUTF8() function.
  • PVRTPFXParser.cpp: Fixed loading external files invoked a 'new', where it should invoke a 'malloc'.


  • Added support for the command-line to the Android shell. This can be used by doing: am start -a android.intent.action.MAIN -n com.powervr.OGLESIntroducingPOD/.OGLESIntroducingPOD --es args "-info"
  • Wired up PVRShellGet(prefEGLSurface) in the KEGL/PVRShellAPI.cpp
  • Fixed a bug which would cause a crash in PVRShell if the EGL extension string is null.

PVRShaman v2.2

  • Fixed bug incorrectly parsing #version tag for ES 3.0 shaders.
  • Disabled 'Save Shader' action if there's no modification to the shader or the underlying file is read-only.

PVRTexTool v4.1.1

  • GUI: Fixed displayed blend diff percentages - previously the percentages were the wrong way around.
  • GUI: Fixed rendering math that sometimes caused channels to be rendered with a small (1 luminance) error before appearing on screen.
  • GUI: Modified DirectX format list so that DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_B4G4R4A4_UNORM and DXGI_FORMAT_B5G6R5_UNORM are now represented in the correct TexLib order - which means they are now listed as "ARGB 1 5 5 5", "ARGB 4 4 4 4" and "RGB 5 6 5" respectively.
  • Modified DXGI mappings to match actual order of data in DirectX for DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_B4G4R4A4_UNORM and DXGI_FORMAT_B5G6R5_UNORM.
  • GUI: Added option to remove anti-aliasing from generated fonts.
  • GUI: "Change Grid Size..." and "Change Background Colour..." dialogues now correctly display the PVRTexTool icon in the top corner.
  • GUI: When creating a texture array, if no textures are selected, an error dialogue now appears.
  • GUI: When creating a texture cube map, if no textures are selected, a more specific error dialogue now appears.
  • GUI: The title of the dialogue that pops up when you select "Change Background Colour..." from the view menu, now correctly displays "Change Background Colour..." as its title.
  • GUI: Selecting quality of PVRTC Compression is now possible when being warned about rectangular textures.
  • GUI: Warning is now mentioned when compressing a non-power of two ETC1 texture.
  • GUI: Modified "diff" value in display dock so that it now gets the absolute difference between the input and output textures, rather than the pixel value of the image displayed in the middle, which may not match up.
  • GUI: When exiting and a texture is modified, the user may now cancel the closing process by either hitting "cancel" on the save question, or cancelling the save itself.
  • GUI: Added functionality to load custom surfaces via the surface browser.
  • GUI: Fixed issues with GUI burning CPU time whilst idle.
  • CLI: Modified the help passage for "Flip", so it's a little easier to understand.
  • CLI, GUI: Added TGA support.
  • CLI: Fixed -square option so that it correctly rounds up when using the "+" modifier.
  • CLI: Removed legacy command line options.
  • Lib: Width/Height/Depth queries now correctly check against the MIP map count when returning the size of a given MIP map level.
  • Maya: Fixed bug with Plug-In causing it to not work at all.
  • Maya: Added 2014 Support.
  • 3DSMax: Added 2014 Support.
  • Modified BC Codec to correctly compress punch through BC1 textures.
  • Updated linear and cubic interpolation methods to higher quality, lower error rate resizing methods.
  • Resize operations all now use a stepped resize, regardless of interpolation mode. This means that the image is reduced/expanded by two over and over until it hits the correct size. This results in a slower operation for resizes with a greater change in size, but with a significantly higher quality output.
  • Added even faster, lower quality mode of compression for PVRTC.
  • Added canvas resize to list of preprocessor options, allowing padding to be added to an image.
  • Fixed ETC1 Compression when padding to block sizes, as was incorrectly accessing invalid data. NPOT textures should now compress as intended.

PVRVFrame v9.6

  • 9.6 Fixed a bug in eglMakeCurrent where EGL_BAD_ACCESS would not be generated
  • 9.6 in cases where it should be.
  • 9.6 GUI: Added automatic tab close option.
  • Fixed an issue on OS X in which the viewport would become corrupted when the container window is resized.
  • 9.6 GUI: Now displays detailed information about the selected profile.
  • 9.6 Fixed a bug in glGetProgramiv on some systems where GL_TRANSFORM_FEEDBACK_MAX_VARYINGS would return an invalid value for unlinked programs.
  • 9.6 Fixed a bug in eglChooseConfig where attempting to select a specific config by ID wouldn't work correctly.
  • 9.6 Fixed a bug in glEnable and glDisable where enums weren't being validated correctly.
  • 9.6 Fixed a bug where the result of querying GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS wasn't being clamped to a maximum of 32.
  • 9.6 Added a workaround for an NVIDIA/Linux GL driver bug where glIsBuffer is unreliable.
  • 9.6 Emulator: Improved hardware profile management. Profiles are now read at runtime from the file selected in the GUI, and new profiles may be added.
  • 9.6 Fixed a bug where eglCreateContext would not fail with EGL_BAD_CONFIG in cases where it should.
  • 9.6 Fixed a bug on some Ubuntu systems where the emulator would fail to find libGL.so.1.
  • 9.6 Added support for rendering to multiple window surfaces on Windows.

PVRTune v14.49

  • v14.46 PVRTune and PVRPerfServer now show the Series and the Variant of the PowerVR graphics hardware.
  • v14.46 Search results are now highlighted in the Timing data.
  • v14.45 Renamed/split PVRScope.h into PVRScopeComms.h and PVRScopeStats.h. This change is to improve documentation.
  • v14.41 * The time period (in ms) between CPU Load samples can now be specified on the PVRPerfServer command line (-c=N) or remotely, from the PVRTune GUI.
  • v14.41 * The View menu now has an option to change the graph background.
  • v14.41 * Group-changed Marks in the graph view now show the new group number, where possible.
  • v14.40 New tool window: Search.
  • v14.40 Fix BRN43811: PVRPerfServer will later crash if the error "AppLib server 2 initialisation failed" appears
  • v14.38 It is now possible to close graph panes; there is a close button in the top-right corner.
  • v14.37 PVRScope has two new API's: pplSendProcessingBegin() and pplSendProcessingEnd(). These allow an application (or thread, or context) to mark out named and numbered regions of processing.
  • v14.37 Example app PVRScopeRemote has been updated to use these APIs.
  • v14.37 PVRTune:
  • v14.37 * Performance improvements, particularly on multi-core CPUs.
  • v14.37 * Now renders marks under the timing data - this prevents the timing data from being completely obscured by a glut of marks.
  • v14.37 * Always show manual marks over all time-lines. (In red as before.)
  • v14.37 * Marks from PVRScope connections are now shown in purple, only over that connection's timeline.
  • v14.37 * Custom time-lines are marked with the string passed into pplInitialise, or if there isn't one then the application name.
  • v14.37 PVRScope to PVRPerfServer communications (non-Android): stability fixes.
  • v14.34 Applications that use PVRScope can now have a custom time-line to mark out ranges of processing. This sends a time-stamped begin/end marker to PVRTune. Every begin must be followed by an end; they cannot be interleaved or nested. PVRTune will show these as an activity timeline.
  • v14.34 * PVRScope: added pplSendProcessing().
  • v14.34 * Applications can set a 'frame number' on these tasks. For 3D applications, this means that the CPU load of processing a frame can be matched to the GPU load, giving a greater view of the full frame time.
  • v14.34 * The order of the time-lines: user then cores. This puts the app data below the GPU data, so for example PVRScopeExample activities go CPU, TA, 3D from bottom to top.
  • v14.34 * If a PVRScope-enabled app is sending Marks and a custom time-line, only draw Marks over that timeline.
  • v14.34 * This can also be used as instrumented debugging, for example visualising the behaviour of multi-threaded apps.
  • v14.34 Graphs can now be stacking in the y-direction. Graph drop and drop has been updated to respond to the mouse cursor.
  • v14.34 * Graph view no longer has the TA/3D and Pause buttons - these are now only in the context menu (or the keyboard shortcut). This is because these settings are per graph, and there can now be more than one graph in the view.
  • v14.34 The initial PVRTune view once connected now defaults to a layout showing the most basic information. This initial view has three graphs, stacked vertically.
  • v14.34 * The top graph shows the % load on the fundamental cores: CPU, 3D, TA, etc.
  • v14.34 * The second graph shows the FPS.
  • v14.34 * The third graph shows the timing data and marks.
  • v14.33 PVRTune now has an SPM counter, showing percentage of 3D tasks which are for SPM.
  • v14.33 Drag and drop of multiple files now works; the first file is loaded.
  • v14.33 PVRTune now shows some details of broadcasting servers, in the status bar of the connect window.
  • v14.33 Fixed a rare bug which could prevent the graph UIs being created.
  • v14.33 Now redraw the entire graph when a new time-line appears.
  • v14.33 Ctrl+I now brings up the PVRPerfServer info window.
  • v14.33 PVRScope library only: fixed frame number counting for Rogue.
  • v14.33 PVRScope library API now allows the app to keep up with HWPerf data even if counters are calculated less frequently. PVRScopeExample app is updated to take advantage for its "interval" function.
  • v14.33 PVRPerfServer now has three extra methods to query the CPU count. This should improve the CPU load graph on some multi-core CPU devices running Android.


  • Changed filename of compilers to 'ProfilingCompilers' and updated filenames. Removed SGX535 compiler.
  • Updated Windows, Linux and OSX offline compilers to 1.9@2650911

PVRShaderEditor v2.2

  • Fixed incorrect built-in path on Windows which would sometimes manifest itself as an error in the options dialog.
  • Tabs can now be moved via dragging.
  • Revised auxiliary window layouts. The profile, compile output and USSE ASM output windows are now easier to toggle on and off.
  • Added ability to open multiple files with a selection from the Open File dialog.
  • The Save menu command now enables/disables to reflect the status of the document.
  • Read-only files are now more visible as the document tab title displays this attribute. Save commands are disabled when a file is marked as read-only.
  • Fixed external shader files referenced within a PFX which were not handled/loaded correctly.


PVRGeoPOD v2.15

  • Added Max and Maya 2014 support.
  • 3DSMax: PVRGeoPOD is now capable of exporting textures assigned to Normal Bump maps.
  • 3DSMax: Fixed the exporting of UVs when vertex colours and vertex alpha are applied to a mesh.
  • Blender: Fixed the exporting of meshes that are in Edit Mode.
  • Blender: Fixed lock-up on exit of Blender on OSX.
  • Blender: Added experimental support for dupli groups.
  • Where appropriate the specular level is now incorporated into the specular colour.
  • Renamed Profiles to Configurations.
  • Fixed renaming of configurations that had been loaded from the "registry".
  • Removed the feature where options would be loaded from a POD file if you were overwriting it.
  • As well as the directory re-structure the command-line version of PVRGeoPOD now uses the abbreviation CLI.

PVRTrace v3.2

  • Added full support for recording and analysis of multi-threaded applications.
  • PVRTraceGUI: Added OGLES3 function call filter.
  • PVRTraceGUI: Fixed bug with draw-call highlighting not factoring in glActiveTexture.
  • PVRTraceGUI: Fixed "Function Quick Help".
  • PVRTraceGUI: Added TraceInfo Dialog
  • PVRTraceGUI: Added a right-click option to save Image Analysis render image and FBO render image to file.
  • PVRTraceGUI: Added static analysis which is performed upon opening a trace file. Static analysis checks for common mistakes which can cause rendering defects or performance issues. This new functionality is encapsulated inside a new Static Analysis widget.
  • PVRTraceGUI: Added an 'overdraw' statistic to the Shader Analysis element. This details the average overdraw for the current analysed frame.
  • PVRTraceGUI: Added vertex shader complexity graphing to the newly renamed 'Shader Analysis' tab. This was formely named 'Pixel Analysis'.
  • PVRTraceGUI: Fixed the Discard override for GLSL ES 300 shaders.
  • PVRTraceGUI: Added new statistics graph dialog which graphs various values across the entire length of the trace. This allows for quick navigation and visualisation of peak loads.
  • The PVRTrace recording libraries now append the PVRTrace version to the GL_RENDERER and EGL_VERSION strings.


PVRHub v1.0

  • Added PVRHub: new control application for Android to replace PVRTraceInstaller and PVRPerfServerGUI


  • Updated with latest changes for 3.2 branch, including documentation for new features
  • Renamed Extensions document and added code examples.
  • Substantially improved doxygen output and comments for PVRTexLib, Shell, and Tools
  • PVRScope: Added example code and instructions on sending custom timing data
  • PVRTune: Updating the description of the Timing Data blocks to allow for the new layout of TA/3D, Compute, and 2D.
  • Added manual for PVRHub for Android and Linux
  • POD specification has been updated to version 2.1. A Units block has been added to the Scene Block that shows the value, in metres of one "unit" of length within the POD file.
  • Added a description of PVRTracePlaybacks command line options.
  • Fixed a typo in the name of the libraries used during installation for Blender on OSX and Linux.



·         The PowerVR SDK is now downloaded from a new content distribution network.  This should dramatically improve the speed and reliability of downloads around the world.

·         PVRVFrames folder is now added to the PATH on Windows and Linux if the option is selected.

·         Added support for the auto installation of plugins on Windows for Max/Maya 64bit

·         Fixed error in additional setup screen where some filetypes would not be displayed that should have been.

PowerVR SDK v3.1

Release 1, Update 2


  • Added OGLES2 ToneMapping example which maps the high dynamic range of floating point texture to low dynamic range for display purposes.
  • Added OGLES2 MaximumIntensityProjection example which demonstrates a technique known as Maximum Intensity Projection using the EXT_blend_minmax extension.
  • Added EXT_multisampled_render_to_texture support to the OGLES2 RenderToTexture example.
  • Water: Fixed a shader precision issue in SkyboxVShader.vsh that was causing minor flickering on some hardware.
  • Water: Updated the example to calculate the FBO dimensions based on the width and height as opposed to being hardcoded at 256.
  • Updated the OGLES3 examples to use es shading language 3.00.


  • Added GL_EXT_multisampled_render_to_texture to the CPVRTgles2Ext extension class.
  • When PVRTShader adds the defines to the shaders when compiling it now checks to see if #version exists at the start and will add the defines after it.


  • The EWS shell now supports the colourbpp command-line option as long as that option is 16 (default) or 32.

PVRTexTool 4.0.5

  • Maya: Fixed bug with Plug-In causing it to not work at all.
  • Maya: Added 2014 support.
  • Maya: Added plug-in for OSX.
  • 3DSMax: Added 2014 Support.
  • GUI: Modified "diff" value in display dock so that it now gets the absolute difference between the input and output textures, rather than the pixel value of the image displayed in the middle, which may not match up.
  • GUI: When exiting and a texture is modified, the user may now cancel the closing process by either hitting "cancel" on the save question, or cancelling the save itself.
  • Fixed ETC1 Compression when padding to block sizes, as was incorrectly accessing invalid data. NPOT textures should now compress as intended.
  • Modified KTX file load/save to pad data appropriately for each scanline, so that it correctly behaves as if GL_UNPACK_ALIGNMENT==4.

PVRVFrame 9.5.2

  • Fixed a bug on some Ubuntu systems where the emulator would not be able to locate libGL.so.1
  • Added support for the following extensions:
    • EXT_blend_minmax
    • EXT_draw_buffers
    • EXT_occlusion_query_boolean
    • EXT_texture_rg


  • Updated Windows SGX compilers to REL_1.9@2316623 and Rogue compilers to REL_1.0@2316866.
  • Updated Linux and OSX SGX compilers to REL_1.9@2316623 and Rogue compilers to REL_1.0@2316866.

PVRGeoPOD 2.14.4

  • Added support for Max and Maya 2014.
  • Max: Fixed the exporting of strings that are returned from the user data max scripts in Max 2013.
  • Max: Fixed the exporting of UVs when vertex colours and vertex alpha are applied to a mesh.
  • Fixed the saving of .cpp and .h files from the Standalone version.
  • Fixed the loading of the profiles from the registry.

PVRTrace 3.1.4

  • Installer: When tracing an application the installer will now record all the processes that app spawns.
  • Installer: The application no longer overrides the trace file name with the default when relaunched.
  • Installer: The Android installer no longer allows you to select an app for profiling that doesn't have the required INTERNET permission.
  • Installer: The Android installer now changes the permissions on the recordings folder so the files can be grabbed from some devices with adb pull without any problem.
  • Installer: Updated the Android installer to work with platforms that symlink their egl.cfg files e.g. Kindle Fire.
  • Installer: Improved the 'is /system rw' test in the Android installer so it works on devices that don't have grep.
  • Fixed glGenerateMipmap tracking for ImageAnalysis.
  • Modified how eglQueryContext EGL_CONTEXT_CLIENT_VERSION works. Some drivers are buggy so we check what the user asked for.
  • Remove enum EGL_WRITE_SURFACE Extension because the value conflicted with OGLES 1 and OGLES 2 client version.
  • Added OGLES2.0 Extensions:
    • EXT_draw_buffers:
      • void DrawBuffersEXT(sizei n, const enum *bufs);
    • EXT_occlusion_query_boolean: void GenQueriesEXT(sizei n, uint *ids);
      • void DeleteQueriesEXT(sizei n, const uint *ids);
      • boolean IsQueryEXT(uint id);
      • void BeginQueryEXT(enum target, uint id);
      • void EndQueryEXT(enum target);
      • void GetQueryivEXT(enum target, enum pname, int *params);
      • void GetQueryObjectuivEXT(uint id, enum pname, uint *params);
    • EXT_multisampled_render_to_texture:
      • void RenderbufferStorageMultisampleEXT(enum target, sizei samples, enum internalformat, sizei width, sizei height);
      • void FramebufferTexture2DMultisampleEXT(enum target, enum attachment, enum textarget, uint texture, int level, sizei samples);
  • Fixed glDrawXXXInstanced and glDrawRangeElements
  • Fixed --noMemory option in Playback
  • Fixed recording of glGetAttachedShaders if the count parameter is null.
  • Fixed Disable Call Image Analysis
  • Fixed a problem with UNMAP BuffersOES decoder class


  • Added Imagination Extensions document - A single document describing all of the extensions supported by Imagination’s reference drivers. Currently this contains a list of the extensions, with descriptions, and links to the Khronos registry. This will be expanded in future to include sample code explaining how each extensions is used.
  • Quick Start Guides have been added for PVRTune and PVRTrace on Android.

Release 1, Update 1

PVRShaman v2.1.2

  • Added 64bit support. This fixes a crash on start-up on systems running OSX 10.7 Lion and OSX 10.6 Snow Leopard.

Release 1


  • Rebranded the SDK icons.
  • Updated GLES headers.
  • The builds folder has been restructured. The various headers can now be located in Builds/Include and libraries can be located in //Lib. As part of this rearrangement the Linux common and platform makefile includes have been modified. They now handle dependencies better and have made it easier to build examples for multiple APIs if the need arises.
  • Removed the inclusion of --rpath=/usr/lib from the HelloAPI Linux makefiles as it was causing problems tracing when on some platforms.
  • Removed references to the splash screen from the BlackBerry 10 projects.
  • Updated the global SDK location variable for BlackBerry10 from IMG_SDK_HOME to PVRSDKDIR.


  • Updated demos with new logo.
  • Fixed the file wrapping of shaders and effects in the Visual Studio projects so they are wrapped as strings instead of binaries.
  • Fixed the wrapping of POD files in the OGLES3 Visual Studio projects for x64 builds.
  • Added ldpi, mdpi and xhdpi Android icons.
  • Removed the API from the menu name of the applications in Android and iOS. The API is now contained in the icon.
  • Enhanced usage of DiscardFramebufferEXT/InvalidateFramebuffer in examples that use Frame Buffer Objects.
  • Removed erroneous calls to TestEGLError from the HelloAPI examples.
  • BinaryShader : Fixed the shader path allocation.
  • Shaders: Updated OGLES2/3 to use new PVRTextureHeader.
  • The iOS projects no longer list the .pvr source pngs.


  • Added drop shadow to Print3D fonts.
  • Fixed rounding issue for Print3D layout when font is scaled.
  • Updated Print3D to use different shaders for the font and logo.
  • Updated the logo used by Print3D to the new branding.
  • OGLES Print3D now unbinds the texture at the end of the flush.
  • Changed the default texturing filtering method to bilinear filtering.
  • Added PVRTCII support to texture loading code for OpenGL ES 2 and 3.
  • PVRTMatrixQuaternionMultiplyF now uses a temporary variable for calculating the multiplied quaternion. This fixes a problem where the destination quaternion is also used as an input quaternion.
  • The OGL extension loading code now first attempts to load GL_ARB_framebuffer_object and if that isn't present falls back to GL_EXT_framebuffer_object.
  • Added fix to PVRTC decompression to force access to PVRTCWords via individual members, which caused an issue with the Android gcc compiler.
  • Updated OpenGL/ES texture loading codes to correctly handle loading from a specified MIP Map level.
  • Modified how PVRTBackground.cpp is destroyed, as previously allowing Graphics API release mechanisms could crash the app if the API context was destroyed prior to the background class being destroyed.
  • The OGL extension loading code now loads GL_ARB_framebuffer_object instead of GL_EXT_framebuffer_object.
  • PFXParser: Fixed an issue in which some GLES implementations require square brackets in the call to glGetUniformLocation if the uniform name in the shader is an array.
  • The OGLES2 Print3D now resets the program and the bound 2D texture.


  • The Android shell will now display any set exit message as a “toast” on exit.
  • Fixed an infinite loop that can occur in the Android shell if the application returns false from InitApplication.
  • The GLX part of the PVRShell now sets up GLX_SAMPLE_BUFFERS and GLX_SAMPLES if the option -aasamples isn't set to 0.
  • FSAMode has been replaced with prefAASamples and -aasamples. Now when you want to use aa you define the number of samples you wish to use.
  • Removed OpenVG setup code.
  • OpenGLES: Shell now automatically discards depth and stencil data from main framebuffer after a render. Options to turn these discards and discarding colour on/off have been added. Discarding for framebuffer objects still needs to be performed manually.
  • EGL: Added EGL extensions to the '-info' output of PVRShell

All Utilities

  • Fixed problem on Linux KDE that impeded opening the applications when the splash screen was activated.

PVRShaman v2.1

  • Stopped disabling inactive effects in material view. Their name is now simply displayed in red.
  • Fixed bug in which a warning would repeatedly pop-up if a POD file had invalid materials.
  • Fixed bug saving to read-only files.
  • The Scene panel and Editor panel can now be floated in separated windows. These are however, mutually exclusive.

PVRTexTool v4.02


  • Fixed mis-aligned encode dialogue options on Mac/Linux.
  • Fixed console output warning about missing slot in "Spin_Width".
  • Added ETC1 to OpenGL ES 1.x compression types.
  • GUI now remembers your choice for PVRTC/ETC compression quality.
  • Removed unused "context help" buttons from dialog windows.
  • Updated Status Bar. Now displays current surface (MIP Level, Cube Map Face and Array Member).
  • Updated Display Dock to show currently viewed face when viewing a cube map.
  • Added file extension check to make sure that the filter affects the saved output correctly.
  • Fixed issues with reloading a window after encoding and then saving it.
  • Updated error message on failed file load to be a little more accurate.
  • Renamed "Current" option in channel editor to "Current Texture" to be clearer.
  • Renamed "Swap Channels" button in channel editor to "Apply Changes", as original wording was unclear.
  • Added padding to BCn texture compression, allowing NPOT and non-block-sized textures to compress successfully.
  • Fixed offset when using linear and cubic resize methods, so that lower right pixels are no longer near-duplicates of their neighbours, and data isn't shifted slightly to the upper left.
  • Fixed occasional crash in pixel lookup when switching between MIP Map levels.


  • Filetype checking is no longer case sensitive, uppercase file extensions are now correctly parsed.
  • Flip argument with "flag" parameter now works correctly as expected.
  • Default output name now inserts ".Out" if the auto-generated output name matches the input filename.
  • Fixed Legacy PVR file io for cubemaps and texture arrays


  • Modified CPVRTextureHeader to ensure const-correctness, rather than using "mutable".
  • Added forward declarations of MetaDataBlock and CPVRTString so that their interfaces are exposed in the dynamic library.
  • When setting EAC texture formats via the OpenGL formats, now correctly sets the colour space to be lRGB instead of sRGB.

PVRVFrame v9.5

  • Added support for ES 3.0 texture parameters.
  • Fixed a bug where glGetShaderSource would sometimes erroneously trim off the last character of the output buffer.
  • Added glTexStorage2D support for compressed textures.
  • Fixed a bug where PVRVFrame would be unable to create a suitable OpenGL context on some low-end systems when the host profile was selected.
  • Improved the way PVRVFrame selects underlying OpenGL context configurations, leading to a greater number of EGL configs being available and increased support on lower-end systems
  • Fixed a bug in oes_matrix_palette where zero-stride array formats would not be correctly traversed.
  • Added support for EGL_PRIORITY context attributes.
  • Fixed a bug in GLSL translation where precision modifiers may cause invalid GLSL to be generated if they are directly followed by a newline character.

PVRTune v14.12

  • Added software counters which can be queried via PVRTrace recording.
  • Added real-time ‘Render State’ overrides. Requires PVRTrace recording application.
  • Added new counter filter dialog which allows the user to filter different counter types. This replaces various controls in the Counter Table widget.
  • Added tooltip for TA/3D checkbox to describe the control.
  • Fixed widget-layout when starting the application.
  • Moved PVRPerfServer control widget to a new dialog activated via Connection > PVRPerfServer > Details...
  • 'Active Group' selector has been copied to the Counter List widget. It also remains in the PVRPerfServer dialog.
  • The tab bar is now hidden if only one tab is open. Opening extra tabs displays the tab bar.
  • Fixed spacing of some GUI elements on OS X.
  • Removed toolbar.
  • Removed counter number labels in Counter Properties widget and Counter List widget.
  • Reduced graph CPU usage; performance improvement when PVRTune is CPU limited.
  • Improved graph/mouse hit-testing accuracy.
  • Now show the AppLib window, and place it on the right, by default.

GLSL Compiler

  • Updated Series5 and Series6 offline compilers to 1.9@2256488 and 1.0@2259268.
  • BRN38900: Watch for file changes in PVRShaderEditor.

PVRShaderEditor 2.1

  • Fixed tabbing on OS X when many tabs are open.
  • Re-added templates for PFX for both OpenGL ES and OpenGL.
  • Added tooltips to the profile widget labels.
  • Added improved OS-specific shortcut keys, mainly differentiating between OS X and Windows/Linux.
  • Changed shortcut keys to indent selection to be more consistent with other applications on a given OS.
  • Commands that are not available (such as requiring a selection yet not having a selection) are disabled by default.
  • Undo/Redo commands will not disable/enable if the action is not available.
  • Added new Go to Line dialog activated with Ctrl/Cmd+J
  • Added more keyboard shortcuts to various GUI commands.
  • Set a more appropriate default file path when first using the utility.
  • Jump to line when double clicking a warning or error now centres the cursor in the edit panel.
  • Fixed OpenCL number formatting for syntax highlighting match.
  • Added OGLES3.0 uint scalar and vector types to syntax matching.
  • Changed Find/Replace widget with new Find/Replace dialog which is more reliable and easier to use.
  • Fixed endless loop in ReplaceAll if certain flags were set.
  • Added ability to reveal the current file in Finder, Explorer, or equivalent file browser on Linux.
  • Added ability to display whitespace and tabs in source file.
  • Improved handling of UTF8 source files.
  • Fixed issue after application crashed the second run would report 'Connection refused'.
  • Fixed broken Compile Dialog UI being too small in some instances.
  • Fixed RegEx for custom compile on Unix systems as / was not being matched properly.
  • Added functionality to attempt to optimize GLSL and GLSL ES source code.
  • Fixed bug not clearing compile outputs when switching to a document type that cannot be compiled.
  • BRN38898: Implemented ability to change tab size.
  • BRN39089: Fixed formatting of output of OpenCL compiler.
  • Changed the output window font to be monospaced.
  • Implemented Ctrl+Mouse Wheel to increase/decrease font size in Output window, and source code window.
  • Fixed BRN38895: Double click to jump is missing in PVRShaderEditor.

PVRGeoPOD 2.14.2

  • Standalone: Fixed a bug in the calculation of the animated rotation quaternion for some scenes.
  • Standalone: Fixed a crash that may occur if doing repeated exports.
  • Standalone: Fixed the importing of a COLLADA scene which was using an id of "" to identify the visual scene.
  • PVRGeoPOD plug-ins for Max and Maya no longer supports versions before 2010.
  • Added support for dragging and dropping files from Outlook and other programs.
  • Added support for dragging and dropping shortcuts/symlinks to supported files types.
  • Blender: Fixed crash on OSX if you cancel the export options dialog.

PVRTrace v3.1.3

  • Added shader analysis capabilities: Pixel picker, pie chart cost overview, texture usage, etc.
  • Added PowerVR Depth Complexity Image Analysis mode.
  • Added Heat-map Analysis Image mode.
  • Added OGLES3 Support in Recording and Playback
  • Added Real Time Shader Modification
  • Added ‘save as’ a range of selected frames
  • Added capabilities to disable calls in real-time
  • Highlighting is now controlled via clicking the calls in the CallView widget.
  • Added new settings for enable/disable highlighting, and highlight colour.
  • Enhanced primitive hiding capabilities: scrubber, single and range.
  • Added new search option (by Function Name). Improved search speed.
  • Added event filter to handle OS X FileOpen events correctly.
  • Added buttons next to scroll bar for OS X to replace arrow buttons on Lion and Mountain Lion.
  • Added code to navigate the call list via the keyboard.
  • Added new option in pvrtrace.cfg for adding Process ID as prefix to trace output file. (Android)
  • Added EGL IMG Priority Extension support in recorder.
  • Added support for MemoryLimit option: Only a small part of the file will be kept in memory.
  • Playback for OGLES1 now properly matches recorded and playback texture id (GenTexture/BindTexture)
  • Added option to reload trace file when the user change the Image Analysis enable option.
  • Fixed Image Analysis corruption when OES FrameBuffer is been used.
  • Fixed drag and drop on OS X.
  • Enhanced glXXXPointer functions handling of Attribute Locations.
  • Fixed Image Analysis corruption when OGLES 1 Matrix Controller is used.
  • Fixed Image Analysis corruption when glTexParameterf is used.
  • Depth Complexity Image Analysis mode forces the clear colour to be black for better visualisation.
  • Fixed several issues in the Network Controller and made it more verbose.
  • Fixed non-frame, 0 records playback.
  • Fixed several issues with OGLES Extensions in Playback
  • Fixed Image Analysis issues with Render State Tracking (shader, programs, textures, FBO)
  • Added more error handling to the GUI
  • Fixed Frame Buffer Viewer corruption.
  • Fixed MapShader attached. Now it is incremental.
  • Fixed a problem in the GUI when there are 1x1 textures in the trace.
  • Fixed a bug in Linux Build (changed linking libraries order)
  • Fixed a bug when the texture in not properly converted for the GUI (1x1 texture)
  • PVRTrace now explicitly sets the content type for GLES VS/FS file types instead of relying on autodetection which isn't reliable enough.
  • Fixed a critical bug in glDrawArray/glDrawElement when decoding block data
  • Fixed a bug cleaning memory when recording using the Network option
  • Fixed a bug with No Record trace for OGLES1 (TexParameter)
  • Moved the current Size of the Screen in the playback to EglEnvironment.
  • Fixed Active Texture in Playback Render State OGLES2
  • Fixed a problem with ViewPort in Playback on Linux Ubuntu
  • Fixed a wrong implementation of ‘exclude process’ in Trace Recorde
  • Fixed combo box Search Dialog.
  • Fixed problems with Uniforms and Texture Render State / Recorder
  • The verbose debug info level now outputs the function name being called.
  • Fixed an issue with FBO's when a non-default FBO is still bound at the end of a frame.

PVRTrace Setup

  • Fixed crash when you remove all the numbers from the Network buffer size box.
  • Fixed crash when you set the start/end frame too large in the UI.
  • Increased the default buffer size to 2048.
  • Fixed the movement of the check boxes on some devices when the Debug output was changed from off.
  • A blue border is now shown if the PVRTrace libs installed are different to the ones packaged.
  • Added welcome warning message that shows the first time the application is ran.
  • The start and end frame options are now greyed out if network is enabled.
  • In the UI we moved the edit text boxes into their own table so if the app resizes them they won't force the checkboxes off of the screen.
  • Now includes a profile option that will disable tracing and enable features that will be used in conjunction with PVRPerfServer and PVRTune.
  • Now updates the UI's options if the config file is modified.
  • Will by default set the host libraries to Android's shim libraries until PVRTrace is enabled.


  • All utilities documents updated with new features.
  • Added documentation on how to use PVRTracePlayback on Android.
  • New branding.


  • The call to GKSUDO has been removed from the .desktop entries on linux as it is no longer required.
  • The default source directory on OSX has been changed to /usr/shared.
  • On OSX, if the source folder is not in the applications folder an alias file will be created
    that points to it.
  • The BlackBerry10 SDK has been added to the installer as a target platform.
  • The "Target Platform and API" page has had a redesign to allow for more platform combinations. As a side effect you will now got all the selected APIs for all selected OSs.
  • An information page has been added after the above page that will display the packages to be downloaded.
  • Fixed bug that meant the link to the PVRTune manual and PVRFrameGUI were not been placed into the start menu

PowerVR SDK v3.0 R2


  • Added Blackberry10 SDK
  • Added Android SDK as add-on to Google’s Android SDK Manager for Eclipse
  • Utilities for Linux Ubuntu 64-bit does not longer requires “sudo” to run
  • Updated eglext.h


  • OGLES2Shaders deletes m_Surface in ReleaseView as the array is allocated in InitView.
  • Shaders: Updated OGLES2/3 to use new PVRTextureHeader.
  • Navigation3D resets the state variable and reloads the assets if InitView is called multiple times due to loss of context. This fixes undefined behaviour on Android if the example is opened and closed multiple times.
  • OGLES3CubeShadowMapping: Updated the colour component to use GL_R32UI instead of GL_R32F.
  • OGLES3RenderToTexture: Modified the multisamples framebuffer to use RGB8 for its colour attachment format. This fixes the GL_INVALID_OPERATION error returned by glBlitFramebuffer.
  • OGLESShadowTechniques: Tweaked the light position as due to a change in the maths tool code the kettle now touches the edge of the texture during the render to texture mode.
  • OGLESSkinning: Fixed non-skinned mesh rendering path.
  • PVRScopeRemote: Added missing Android permission "android.permission.INTERNET". This permission is required for it to work.


  • Added fix to PVRTC decompression to force access to PVRTCWords via individual members, which caused an issue with the Android gcc compiler.
  • PVRTModelPOD: Fixed use of SafeAlloc in CopyFromMemory, PVRTModelPODCopyNode, PVRTModelPODCopyMesh and PVRTModelPODFlattenToWorldSpace functions.
  • PVRTModelPOD: PVRTModelPODCopyMesh now correctly copies the interleaved data if the original has padding.

PVRShaman v2.0.1

  • Fixed double-clicking to open file in PVRTexTool.
  • Fixed BRN38875: PVRShaderEditor does not save font configuration correctly.
  • Fixed crash when opening a POD from the command line or via Windows file association double click, and the POD file has missing materials.

PVRTexTool v4.0.1


  • Fixed extra space in front of "Portable Network Graphics" in the open file dialog
  • Fixed open file error to check a file exists and return an appropriate error message, rather than a generic one.
  • Users should now be able to drag and drop additional data into PVRTexTool; for example Microsoft Outlook attachments - Currently Windows only
  • Now capable of resolving shortcuts and symlinks when attempting to open them in PVRTexTool.
  • Fixed crash caused by attempting to reload a file which no longer exists on the filing system. Now outputs an appropriate error message.
  • Fixed Legacy PVR file management for cubemaps and texture arrays
  • Fixed rare decompression bug with BC formats causing artefacts to appear in decompressed image. Compression unaffected.
  • Added file extension check to make sure that the filter affects the saved output correctly.
  • Updated error message on failed file load to be a little more accurate.
  • Fixed failure to load specific texture/file combination (ktx file/bgra texture).
  • Fixed crash on invalid texture data load.
  • Fixed crash on Linux when selecting a background colour.
  • Added message warning the user to save when attempting to close modified textures.

Command Line

  • Fixed open file error to check a file exists and return an appropriate error message, rather than a generic one.
  • Changed output for rectangular textures - now only says "Warning" instead of "Error".
  • Power Of Two resize with "-" flag now works as expected.
  • Filetype checking is no longer case sensitive, uppercase file extensions are now correctly parsed.
  • Flip argument with "flag" parameter now works correctly as expected.
  • Fixed issue with trying to encode to 1 or 2-channel textures failing to encode.


  • Added fallback code to threaded PVRTC compression, avoiding errors on some systems.
  • Updated ktx support with additional formats. Now correctly supports:
    • R3_G3_B2
    • RG8_SNORM
    • All Luminance/Alpha formats (e.g. LUMINANCE8_ALPHA8_SNORM, ALPHA8)
    • Normalised Short Formats (e.g. R16, RG16_SNORM)
    • RGB10


  • Fixed bug in plug-in causing it to not read files correctly in 3DSMax 2013.

PVRVFrame v9.4

  • Fixed possible crash in glShaderSource. Added support for KHR_debug.
  • Fixed a bug where it was not possible to create a multisampled render to texture with depth and stencil attachments
  • Fixed a bug where calling glBindFramebuffer with an invalid framebuffer name would not automatically create the framebuffer object.
  • Added support for oes_draw_texture.
  • Shader information is now output by calling glCompileShader instead of glShaderSource.
  • Fixed a bug where GL_MATRIX_PALETTE_OES would not be accepted by glIsEnabled and glGetFloatv.
  • Fixed a bug where PVRVFrame would attempt to retrieve the shader info log length from the shader validator library even when it is disabled.
  • Fixed a possibility of heap corruption occurring in calls to glShaderSource.
  • Fixed a bug where gl_PointSize would stop working after destroying the context and creating a new one.
  • Fixed a bug where some GL capabilities would be incorrectly enabled on initialization.
  • Fixed a bug where GL_MAX_SAMPLES_IMG would not be queried from the host driver if the information was not available from the profile
  • Fixed a bug where GL_POINT_SIZE_ARRAY_POINTER_OES would not be accepted by glGetPointerv.
  • Fixed a bug where the lifetime of shader objects was not being synchronized correctly with OpenGL, sometimes leading to incorrect error codes being reported.
  • Fixed where GL_UNSIGNED_INT wasn't being accepted by glDrawElements even when the appropriate extension is supported.
  • Fixed a bug where some parameter combinations were not being accepted by glTexImage2D in cases where they should.
  • Fixed a bug in glBindTexture where GL_TEXTURE_2D_ARRAY would not be accepted in some cases.
  • Fixed a bug where the GL_RGB565 internal format was not being translated to a valid OpenGL format.
  • Fixed a bug where shaders testing '#if GL_ES' would not compile.
  • Fixed a bug in the G6200 profile where extensions would not be supported in OpenGL ES 1.1/2.0 applications.
  • Fixed a bug where glCompressedTexSubImage2x would not work correctly with PVRTC formats.
  • Fixed a bug where GL_PROGRAM_POINT_SIZE was not being enabled by default.
  • Fixed a bug where GL_POINT_SIZE_ARRAY and GL_MATRIX_INDEX_ARRAY_OES were not being accepted by glIsEnabled.


  • Added support for handling multiple PVRVFrame instance applications at once.
  • Fixed a bug where the splash screen would appear before the window opens.
  • Fixed a bug where the user could use the keyboard to select the separator items from the profiles combo box.

PVRTune v14.11

  • Counters updated with new descriptions.
  • Improved GUI responsiveness/performance.
  • Improved scrollbar behaviour.
  • When the counter name column is added to the per-graph list, it is now filled with data instead of being left blank until the counters are next initialised
  • Graph view: can no longer completely collapse either side of the splitter.
  • Dragged-away items are now completely deleted; also prevents drops onto the source grap
  • Fixed pressing delete and Ctrl+Delete on the per-graph counter list.
  • PVRPerfServer remote control GUI:
    • Controls now “debounced”
    • "More" button is now always available.
    • "active group" drop down box is now cleared on disconnect, clearing up some confusion
    • "active group" drop down box wasn't being enabled on a second connection.
    • Restore state to initial state on a purge.
  • When files are saved (in addition to when they are loaded), PVRTune now adds them to the recently used files list.
  • The Remote Editor's list of connections now shows the executable name and the string passed into pplInitialise, in the tool tip, if available.
  • Complete build: can now export user counters. This is available through the menu option "File\Export user counters to CSV", and via the command-line option: --export-csv-usercounters=filename.csv
  • Support for additional command-line options. It continues to support a file or server on the command-line: this allows PVRTune to be associated with .pvrtune files. If used, the new command line options will be executed and then PVRTune will quit; the GUI will not appear.
  • The PVRTune remote editor GUI that allows editing of the remotely-editable-items submitted through PVRScope is now functional again:
    • Support for the new types (bool, int, enum) has been added.
    • Items are now displayed in a tree view, using "." characters in the names as delimitors of collapsible levels.
  • Added Android command-line version of PVRPerfServer.
  • Fixed BRN38966: layout of dock windows and splitter bars is now stored between runs
  • Dock windows are now visible on the "connect" screen, rather than appearing after a connection is made.
  • Added a menu option to allow the user to specify (override) the clock speed - normally only useful if the clock speed is known and non-varying.
  • Fixes for auto- zoom and centering the view when the selected region is very short.
  • Fix a case where renders from different applications might be grouped together when their frame numbers align.

PVRShaderEditor v2.0.1

  • Fixed bug which would cause lockup while performing Replace All under some conditions.
  • Added dialogbox which displays number of replacements performed when Replace All is used.
  • Fixed issue after application crashed the second run would report 'Connection refused'.
  • Fixed BRN38792: Incorrect comment parsing in PVRShaderEditor. Previous implementation didn't handle some cases involving single-line and multi-line comments.
  • Fixed BRN38875: PVRShaderEditor does not save font configuration correctly.
  • Fixed Compile Dialog UI being too small in some instances.
  • Fixed RegEx for custom compile on Unix systems as / was not being matched properly.

PVRGeoPOD 2.13

  • Removed the semicolons from the file filters for the file dialogs.
  • Fixed the push button for the user defined data script option for Max and Maya.
  • Fixed the A3 check box being incorrectly enabled when playing with Profiles.
  • Fixed the post process commands. Target and Working Directory were the wrong way around.
  • The [Current] profile now mentions the saved profile it is based on.
  • We now save out the [Current] profile's link to a saved profile.
  • Added %POD replace to the Post Export command-line arguments. That string will get replaced with the POD filename. This feature was documented but was missing from the last release.
  • The PVRGeoPOD MEL command now also takes a profile name as an input.
  • Changed the default options so exporting texture-coordinates is enabled by default.
  • Fixed naming of the Profile settings in Max 2012.
  • Fixed the suppression of the Options dialog in 3DSMax.
  • The Export option is now the default button in the Options Dialog allowing you to press Enter to export
  • Added support for iGame version Needed by the latest 3DSMax 2013 update.

PVRTrace v3.01

  • Fixed crash when you remove all the numbers from the Network buffer size box.
  • Fixed crash when you set the start/end frame too large in the UI.
  • Android installer: Fixed check boxes on some devices when the Debug output was changed from off.
  • Android installer: The start and end frame options are now greyed out if network is enabled.
  • Fixed glGenRenderBufferOES for OGLES1
  • Disabled Debug Log in Playback
  • Added RenderState OGLES Push/Pull Matrix Support (Load matrix is still missing)
  • Enhanced glViewport support for OGLES1
  • Fixed a bug in glPointSizePointerOES
  • Fixed issue with Extensions when opening the trace: all OGLES1 extensions were assigned to OGLES2
  • Added Control not to open trace file with a not compatible version number
  • Fixed several bug with OGLES 1. Extension(FBO), Buffer, Textures
  • Fixed a wrong implementation of ProcessNameExcluded configuration option in Trace Recorder
  • Fixed a crash in OGLES1 when matrix is NULL
  • Removed OGLES1 Trace debug messages
  • Fixed random texture corruption.
  • Enhanced search capabilities in GUI
  • Removed duplicates in shader list
  • Fixed setNetworklock size bug in recorder configuration file.
  • Fixed a bug in OGLES2 FBO tracking
  • Fixed a bug in OGLES2 Texture Render tracking
  • Fixed a wrong OGLES2 shader extraction and export


  • POD Specification: Fixed an error in the pod specification in the description of animation scaling where the description incorrectly described itself as containing "rotation" rather than "scaling" animations.

Installer 3.0.2

  • The Linux Installer will now create .desktop entries in the /usr/share/applications folder for each utility that is installed.
  • The Linux Installer will now copy icons PNGs into /usr/share/icons/hicolor.
  • If selected, the Linux Installer will register various file types to be opened by their respective utilities (as covered in the installation instructions).
  • Added mime types and default applications to the linux installer for any file type the user decides to register
  • 15 Extra filetypes have been added to both the linux and windows installer.
  • Improved the file association menu to allow for more file types to be associated, various shader files, model files and texture files. By default only the Imagination specific extensions are ticked.
  • Added dual location support, allowing users of the installer to separate the location of the PowerVR utilities and the PowerVR SDK. This fixes a problem where users were forced to write source into locations where it may not be possible to compile due to a lack of write permissions. By default, both locations are the same and write to the same location as the previous installer to maintain backwards compatibility.
  • Added new file-association icons for all utilities

PowerVR SDK v3.0 R1


The SDK has a new cross platform installer. This installer is now the single entry point for all Utility and SDK packages, collating the user’s requirements, and ensuring that only exactly what is needed is downloaded. Internet access is required during the installation.


  • LinuxX86 and WindowsX86 SDKs now support 64-bit.
  • EGLint in the egl headers is no longer khronos_int64_t for 64-bit builds.
  • Renamed all Linux Platforms to conform to a more coherent convention. Please see the user guide to see the PLATFORM value you should use.
  • Added PVRTC2 defines to gl2extimg.h.
  • Removed the ‘Extras’ folder which contained the PVREngine source example.


  • Demos and Training courses have been merged into a single Examples directory divided into three categories: Beginner, Intermediate and Advanced.
  • New OpenGL ES 3.0 SDK including the following examples:
  • CubeShadowMapping, Instancing, MultipleRenderTargets, OcclusionQueries, ShadowMapping, TextureArray, TransformFeedback, UniformBufferObjects and DeferredShading.
  • Added OGLES2DeferredShading example.
  • Added OGLES2ParticleSystem example.
  • Added OpenGL ES 1.1, 2.0 and 3.0 PVRScope usage examples.
  • OpenGL ES 1 ShadowTechniques: Fixed a bug where the EGL rendering context was not set up correctly when using PBuffers.
  • HelloTriangle has been renamed to HelloAPI to account for non-graphical APIs.


  • Android: Fixed the PVRShell so it exits correctly if InitApplication or InitView fails.
  • Android: Added PVRShellGet prefAndroidNativeActivity that allows the user to retrieve the Android ANativeActivity.
  • Android: The PVRShell has been updated so it works as intended when the prefInitRepeats preference is used.
  • We now map swipes to key presses. Directional swipes map to their specific direction. Tapping the screen on the left or right maps to Action1 and Action2 respectively. This feature can be disabled by defining DISABLE_SWIPE_MAPPING.
  • iOS: Added new macro to print GL errors.
  • On windowed systems the default screen resolution is increased to 800x600.
  • Added GL_EXTENSIONS when the "-info" flag is passed on application start-up.


  • PVRTMap: Fixed missing NULL check in "GetDataAtIndex" function.
  • PVRTMap: Fixed a small bug in the remove function not removing items properly.
  • PVRModelPOD: The function PVRTModelPODToggleFixedPoint has been removed.
  • PVRTString: Simplified the assign function.
  • PVRTString: Fixed a crash in the format functions when used on OSX x64.
  • PVRTString: Fixed potential infinite loop in the == and != operators if the string pointer passed in is NULL
  • PVRTString: Added find function.
  • PVRTTexture: Removed separate EAC_R/RG signed and unsigned enums - sign can be represented by var type flag.
  • PVRTTexture: Added 2-planar formats to PVRT Pixel Formats. Added the formats to the various format functions.
  • PVRTTexture: Changed comment in all "PVRTextureLoadFrom...." functions to say they accept a PVRTextureHeaderV3 rather than a legacy header, as this was incorrect.
  • PVRTTexture: Fixed ETC Support in OpenGL ES 2.
  • PVRTResourceFile: Fixed an allocation of a string which wasn't taking the null character into account.
  • PVRTArray: Added insert function.
  • PVRTStringHash: Added comparison against PVRTHash.
  • PVRTPFXParserAPI: Fixed documentation on a number of functions declerations.


  • PVRGeoPOD v2.12
  • Collada2POD now falls under the PVRGeoPOD name. CL and GUI binaries can be found in the PVRGeoPOD Standalone folder.
  • Added Max and Maya 2013 support.
  • Added Blender 2.63 support.
  • The POD specification is now accessibly from the Help menu.
  • Added support for %POD to the Post Export command-line arguments. That string will get replaced with the POD filename upon execution.
  • Added UI option to choose the mapping channel used when generating tangent-space data.
  • The fixed point option has been removed. Vertex data can be exported as fixed point but transformations, material, colours, etc. cannot.
  • The option in 3D Studio Max to export the bones as geometry has been removed.
  • The PVRGeoPOD UI has been redesigned and now uses Qt.
  • PVRGeoPOD now supports profiles allowing you to save your export configurations.
  • Modified the way the interleaved data is aligned. Now each vertex attribute will get aligned to a 32-bit boundary instead of each vertex.
  • 3DSMax: Fixed the export of a scene supplied by a developer that had a skinned character where a couple of vertices weren't correct.
  • Maya: The bump map texture is now correct.
  • Blender: Fixed the decomposition of the transformation matrix in certain cases where an object has been mirrored.

GLSL ES Compilers v1.9

  • Renamed folder from PVRUniSCo to Compilers and renamed compilers themselves to glslcompiler_xxx.
  • Updated the offline GLSL compilers for SGX535, SGX540 and SGX543 with latest versions.
  • Added offline GLSL compiler for G6x00

PVRShaderEditor v2.0

  • Renamed PVRUniSCoEditor to PVRShaderEditor.
  • Completely overhauled PVRShaderEditor which now uses Qt GUI framework across all platforms.
  • A number of stability fixes on Unix systems when the compiler is invoked.
  • Compilers are now built-in to application.
  • Added G6x00 compiler.
  • Improved shader edit panel with cursor matching.
  • Improved search highlighting.
  • Fixed bug BRN36872 (crashing on compile on OSX). This was due strange 64bit PVRTString formatting issues.

PVRShaman v2.0

  • PVRShaman's GUI interface has been converted to Qt to provide a much better look and feel across all platforms.
  • Added support for OpenGL ES 3.0
  • Added the ability to define ‘user semantics’ which allow the creation of arbitrary semantics of types supported by the rendering API.
  • Removed generic unneeded items under an effect within the container tree panel.
  • Added the display of semantics under an effect within the container tree panel. Hovering over these items displays the data they contain.
  • Added a number of new semantics including cos(time), cos(time)*2PI, etc.
  • Added a new dialog which allows editing of user-defined semantics.
  • Fixed SimplePostProcess.pfx as it had mipmapping enabled for a texture with no mipmaps.
  • Fixed crash in container panel were textures may have been accessed if they didn't exist.
  • Fixed bug in which only post process passes were setting their render-to-texture as written. Changed so all passes set render-to-texture flag to written if they have a render-to-texture. This means data in container panel is more visible.
  • PFX format description is now accessible from the help menu.
  • Removed throw of exception if POD options cannot be loaded. Just uses defaults and outputs a warning.
  • Added arrow keys to allow navigating in FPS mode.
  • Re-designed MaterialPropsDialog to use tab widget instead of having all controls on one page.
  • Compilers are now built-in to application.
  • Added G6x00 compiler.
  • Improved shader edit panel.
  • Fixed BRN36623 "PVRShaman crashes on certain PFX code". This was due to multiple 'shader' blocks with duplicate names. The fix accommodates this use-case and handles the shader selection list more robustly.

PVRTexTool v4.0

  • Added 3DSMax and Maya 2013 plug-ins
  • Added Windows Explorer plug-in to preview PVR files in the file browser
  • Added more robust KTX file support, including support for OpenGL ES 3.0 formats
  • Added more robust DDS file support, including support for DirectX10 style headers
  • Added support for more DirectX11 texture formats
  • Added support for all core OpenGL ES 3.0 texture formats
  • Modified behaviour so that failing to save a file no longer has the possibility of leaving behind an empty file
  • Modified ETC behaviour so that NPOT textures can now be encoded
  • Removed ETCMedium and ETCMediumPerceptual from the ETC compression options
  • Modified "Bleed" behaviour to be more aggressive

Command Line

  • Added new interface. Old interface still works, but will output deprecation warning. See manual, or -help for new usage. Most common arguments remain largely the same, with the exception of the style and specific parameter values
  • TGA and GIF are no longer supported
  • Side-by-side compression and decompression is now available via the new interface

Command Line (Deprecated Interface)

  • Fixed issue causing encoding failure when loading from texture files
  • Fixed power-of-two check for PVRTC and ETC
  • Inconsistent behaviour with the "border" option - the option now consistently ADDS a border, rather than maintaining the original size, which was different from the GUI, the Library and previous incarnations of PVRTexToolCL
  • Border option was not adding the correct width to PVRTC 2bpp textures, instead always adding a 4x4 border. Now an 8x4 border size is correctly used when compressing to PVRTC2
  • Fixed bleed filter - previously the flag did nothing, and warning was always output


  • Added a small pop-up informing the user that the utility is still doing something when encoding a texture
  • Pre-Processing dialogs no longer exist, instead a toolbox with equivalent functionality is now provided
  • Added icons to the quick bar for diffing
  • Added support for more recent DirectX11 and OpenGL ES 3.0 formats. DirectX11 support includes filtering down to 9.3 and 10.1 feature sets
  • Removed legacy OpenVG and DirectX9 formats
  • Due to now large number of supported formats per-API, a new encoding dialog has been created with the ability to filter formats based on user requirements
  • Encoding a texture now results in a new texture window being created which can be worked on in the same way as the original. Diffing is available as more generic functionality between any two texture windows, as long as the textures match in size. User can specify automatic generation of a diff window when encoding
  • Comparing two textures now has more options, with the traditional colour diff available alongside a new tolerance diff, and a blend of the two textures
  • TGA and GIF are no longer supported


  • Moved PVRTexLib into the PVRTexTool package. Can now be found under ".../Utilities/PVRTexTool/Library/"
  • Moved header files from PVRTexLib folder to a sub-folder "Include"
  • Fixed crash when trying to encode to DXT/BC when textures have dimensions that are not multiples of 4
  • Changed line "#elif _WINDLL_IMPORT" to "#elif defined(_WINDLL_IMPORT)" to avoid preprocessor problems

PVRTrace v3.0


  • New QT version
  • Enhanced docking system
  • Added new enhanced search facilities
  • New Program/Shader view with cycle counts and syntax highlight
  • Redesigned the Image view
  • Added debug output
  • Redesigned the Image Analysis View with comprehensive primitive selection methods and primitive highlight and hide capabilities
  • Added new render state entries (FBOs, VBOs, etc.) in the State view
  • Enhanced performance and stability when moving Image Analysis between frames
  • Added new ‘Frame Buffer’ view (it is recorded with the trace)


  • New PVRTraceSetup application for Android to install the libraries and control the recording
  • Enhanced EGL/GL functions recording
  • Fixed several issues when recording extensions on Android
  • Enhanced recording starting on any frame
  • Enhanced speed and stability
  • Added debug info option
  • Added ‘save frame buffer’ option
  • Added option to select which application we want to record’
  • Added option to select which application we don’t want to record (Android only)
  • Added option to exit the application when the EndFrame has been reached
  • Improved compatibilities when playing back on different platforms

PVRTune v14.7

  • GUI now uses Qt
  • Better support for devices which vary the clock speed on the fly; also prevents a zoomed-in view from appearing to move while receiving data but Paused. (BRN32931)
  • Added auto-update support
  • Tool windows are now moveable docking windows
  • Fixed “broadcasting servers” GUI element when multiple PVRTune’s are running (or if a new PVRTune was launched before the old one had exited)
  • PVRTune for Mac OS X now builds Universal
  • Added pplSendFlush() to PVRScope
  • Some implementations cache data sends. If the data rate is low, the real send of data can be significantly delayed. If this behaviour causes an issue, call this function to force a cache flush
  • If it is necessary to use this function, the best results are likely to be achieved by calling with a frequency between once per second up to once per frame. If data is sent extremely infrequently, this function could be called once at the end of each bout of data send
  • The user can now select a range. Holding the CTRL key changes click+drag from "move view" to "select range". SHIFT+click grows the selected range. Selected range is drawn transparent and with a ruler
  • Counter table has a new column that can be enabled: "selected". This shows the average counter values over the currently selected range
  • The 'z' key is now a shortcut to view the selected range, or "all" if there is no selection
  • Counter renamed: "vertex transforms per second" to "vertices per second"
  • Counter renamed: "vertex transforms per frame" to "vertices per frame"
  • Counter renamed: "on-screen primitives per second" to "primitives per second: on-screen"
  • Counter renamed: "on-screen vertices per second" to "vertices per second: on-screen"
  • Counter renamed: "on-screen primitives per frame" to "primitives per frame: on-screen"
  • Counter renamed: "on-screen vertices per frame" to "vertices per frame: on-screen"
  • Counter renamed: "on-screen vertices per primitive" to "vertices per primitive: on-screen"
  • New counters: "vertices per primitive", "primitives per second", "primitives per frame"
  • Fixed handling of some invalid server addresses
  • Improved mismatched frame or render target colours in more complex traces involving many renders and/or many applications
  • Fixed "load" counters not accounting for multiple core count (BRN36864)

PVRVFrame v9.3

  • Added support for OpenGL ES 3.0
  • Added standalone PVRVFrame GUI application
  • Added support for EGL pBuffer surfaces
  • Improved error reporting in some operations
  • Removed external library dependencies: libpng, libjpeg, zlib
  • Fixed a crash in glDetachShader
  • Fixed a crash in eglGetCurrentContext
  • Fixed a bug in EGL attrib_list validation where some values were not accepted when they should be
  • Fixed a bug where texture units could not be enabled or disabled individually
  • Fixed a bug in OpenGL ES 1.1 emulation where fixed-point buffer object values were not emulated correctly
  • Fixed a bug in some environments where incorrect libraries might be loaded when using PVRTraceRecorder
  • Fixed a bug where eglMakeCurrent would not correctly handle a value of EGL_NO_CONTEXT
  • Fixed a bug in oes_matrix_palette implementation where the element buffer offset would be calculated incorrectly
  • Fixed a bug where anti-aliasing would not work correctly on Windows
  • Fixed a bug where glGetBufferParameter would query the wrong value from the host driver



  • Updated all images for the new Qt GUI
  • New counter descriptions added to Appendix A


  • Updated all images for the new Qt GUI
  • Total rewrite of the GUI overview
  • The PVRTexLib manual has been moved into the PVRTexTool manual


  • Emphasised that _WINDLL_IMPORT must be defined


  • Updated all images for the new Qt GUI
  • New section added with instructions on using the PVRTraceSetup APK
  • New section added explaining how to trace using PVRTraceSetup
  • New section added describing the Image Analysis Dialog
  • Updated the Preferences section to accurately reflect the new preferences


  • Updated all images for the new Qt GUI
  • Removed references to Collada2POD
  • Renamed references to PVRUniSCoEditor to PVRShaderEditor
  • Added a note to section 4.2 that a specification for PFX is included in the package
  • Section 5.2.1 removed Import File... entry as the option is no longer available
  • Debug Output Panel renamed Task List. Section added detailing the compiler output and profiling information from PVRShaderEditor
  • Removed the Section 5.5 Window Configuration, currently the old window configurations are not supported
  • Updated the Preferences section to accurately reflect the new preferences


  • Updated all images for the new Qt GUI
  • Updated the Preferences section to accurately reflect the new preferences


  • Added a note to the skinning and animation export options sections that 'Export Matrices' solves most problems
  • Reordered options explanation by tab within the PVRGeoPOD GUI.
  • Updated the Preferences section to accurately reflect the new preferences
  • Removed PODPlayer from Section 7
  • Removed the Collada2POD section
  • Updated description of the align option to match new functionality

Performance Recommendations

  • Marked sections that do not relate to Series 6('Rogue') chips as "Series 5/5XT Only". Marked any sections that relate specifically to Series 6 as "Series 6 Only"
  • Section 3.4 has been cleaned up. Separate sections have been added for 'Lookup Textures' and 'Pre-Baking' with a note added that 'Lookup Textures' are specific to Series 5 (SGX). Information also added to emphasise the amount of work that must be saved for lookup textures to have value
  • Section 3.7, a note has been added that this should be done for ALL render targets and FBOs where possible
  • Section 3.8 renamed 'Take Advantage of HSR'. Extra clarification added that an Early-Z pass is not required
  • Section 3.10, a note has been added in regards to the use of more advanced techniques, such as 'Portal Culling'
  • Section 4.1 now more explicitly mentions level-of-detail, especially in regards to pre-passes such as reflection passes
  • Section 4.3 has been reworded to suggest using smaller data types, as bandwidth becomes more at a premium this cost becomes more significant than the cycle cost of conversion
  • Section 4.4 now explicitly mentions that interleaved and non-interleaved data can be mix-and-matched where some data changes and some data does not for a given model
  • Section 4.5 is now more insistent that STATIC_DRAW always be used for VBOs that change, and never be used for those that do
  • Section 4.5 Added further clarification in regards to ghosting of dynamic data
  • Section 5.1 Texture Size updated with suggestion to use larger compressed textures that can be downsampled over uncompressed textures
  • Section 5.4.2, a noted has been added stating that in some cases Texture2DProj is counted as a dependent texture read when given a Vec3, or a Vec4 where 'w' is not valid
  • Section 5.6.2, fixed a broken reference
  • Section 5.7 updated to be more insitant that FBOs/Render Targets not be reused, a specific mention of the performance cost due to serialisation of renders has been added
  • Section 5.8 has been updated to be in line with the update to Section 3.4
  • Section 6.3, this section has been tidied up, a note has been added in regards to creating 'uber-shaders' from pre-processor defines. Specific definitions flow control advice for Series 5 and Series 6 added
  • Section 6.4 has been updated to favour mediump, and with information regarding precision modifiers on Series 6
  • Section 6.4.5 has been updated with better information on the cost of packing varyings
  • Section 6.4.8 now contains information in regards to lowering the number of pack and unpack instructions based on ordering or calculations within a shader. The example has also been removed as it added nothing and increased the complexity of the section
  • Section 6.5, section cleaned up to be more specific in regards to what it is that is bad as it was unclear previously. Removed section stating not to manually vectorise to save computation given that doing so is actually a performance improvement
  • Section 6.7 added, covering the use of 'const' data in shaders and the performance benefit that can be gained
  • Section 7 added covering optimisations for specific techniques, Section 7.1 added discussing on-chip MRTs for Series 6 chips, Section 7.2 added discussing efficient sprite rendering


  • Doxygen output moved into API specific folders

PowerVR Support

If you have any enquiries or require support on any of our PowerVR graphics SDK:

Online Resources
PowerVR Insider Feedback
PowerVR Insider Forum
PowerVR SDK Docs

E-mail Devtech Support
PowerVR Insider Support

Cookies on the
Imagination website
We use cookies to ensure that we give you the best experience on our website. If you continue without changing your settings, we'll assume that you are happy to receive all cookies on the Imagination website. However, if you would like to, you can change your cookie settings at any time.