What's New?

Changelog and release notes

PowerVR Tools and SDK 2020 R2

SDK v5.6

  • Implemented a Vulkan Matrix Multiplication Example. This is a headless command line tool implementing multiple methods for matrix multiplication using Vulkan compute.
  • Added support for Beta Vulkan Extensions. The framework will now support the Vulkan Beta Extensions by default. To disable support the VK_BETA_ENABLED cmake option can be set to OFF in PVRVK/CMakeLists.txt.
  • Updated Gradle to Version 6.5
  • Updated Vulkan headers to 1.2.141

PVRCarbon v0.6

  • Added an OpenGL SC 2.0 recording library. Recordings can be played back on both OpenGL ES 3.1+ and OpenGL SC 2.0 drivers.
  • Added an Android OpenGL ES recording layer. This can be used on Android 10 onwards instead of the driver replacement libraries that are installed by the PVRCarbonInstaller.sh script. This is the recommended and safest way to perform standalone/system recordings on Android 10+ and relegates PVRCarbonInstaller.sh to use on legacy Android versions only.
  • Fixed an INVALID_ENUM error that could occur during recording if the platform doesn’t support GL_VERTEX_ATTRIB_ARRAY_DIVISOR


  • Updated the Android Payload icons to the new design
  • Fixed the ‘Add Server’ option in the renderer select drop down
  • PVRCarbon sits using 15-20% CPU when idle
  • Added Vulkan and OpenGL ES frame analysis of carbon files
  • Remotely recording Android applications no longer requires them to have internet permissions
  • Added the ability to trim off the start of a PVRCarbon recording from the GUI
  • Added the ability to export C++ code from part-way through a recording to the GUI
  • The remote recorder now allows the user to select which activity is launched on Android for recording
  • Improved the way we handle failure to open files during remote recording
  • The remote recorder utilises Android 10+ functionality to set up PVRCarbon for recording, if available. It now deploys an Android OpenGL ES layer to go with the Vulkan layer, and sets them up using Android settings instead of the Java debugger and library hooks for more robustness.
  • A warning will now be output during file loading if the file is from a newer version of PVRCarbon

C++ Exporter

  • Updated the exported Android icons to the new design
  • Updated the exported Android Makefiles to use cmake 3.10.2, version 4.0.1 of the gradle plug-in and the gradle wrapper now uses gradle 6.5
  • Added a banner image to the exported Android makefiles


  • Attempting to playback the setting of the surface attribute EGL_TIMESTAMPS_ANDROID when EGL_ANDROID_get_frame_timestamps is not supported is no longer a critical error
  • Attempting to playback VK_GOOGLE_display_timing calls when the extension is unsupported is no longer a critical error
  • Updated the Android icons to the new design
  • Fixed a crash on exit that could occur if file loading was unsuccessful
  • Fixed an issue on Windows where you couldn’t pipe the console output to a file
  • Added RISC-V builds (RV32GC and RV64GC) for PVRCarbon player


  • Fixed an issue that would break tracking of eglMakeCurrent if surfaceless contexts were used
  • Fixed an issue where the pNext chain of the InstanceCreateInfo could become corrupt when recorded api validation is enabled. This fixes recording debug builds of the Vulkan-Samples.
  • Re-designed and implemented the way we handle non-frame 0 recording for Vulkan
  • Fixed an issue parsing a list of single frames
  • Added RISC-V builds (RV32GC and RV64GC) for PVRCarbon recorder
  • Fixed a crash that could occur for some applications when determining the best default output directory for carbon files on Android


  • Added the ability to export C++ code from part-way through a recording in the PVRCarbonToCpp CLI tool
  • Improved the chances of finding a matching config with support for creating PBuffer surfaces
  • Added the ability to trim off the start of a PVRCarbon recording from the PVRCarbonTrim CLI tool
  • The –capture-frames option was incorrectly documented to take in a range of frames to capture. The option has now been updated to match the documentation.
  • Added new PVRCarbonFrameAnalysis cli for generating frame analysis data (.pvrcbna) files outside of the GUI

PVRTune v14.150

  • Added a new ‘SSH Log’ widget. This widget will be populated with the command line output from PVRPerfServer and the user launched application for SSH based connections.
  • Added Android GLES profiling layer event grouping support. Attempts to group the appropriate glDraw* and glDispatch* and (various) GLES state calls, with the corrosponding Vulkan draw and dispatch commands and Vulkan state calls. Additionally groups eglSwapBuffers calls with the corrosponding vkQueueSubmit, vkQueuePresent and Submit * sub-command calls.
  • PVRPerfServer bug fix: command-line option –disable-hwperf should not turn off non-driver data collected by PVRPerfServer (for example CPU and memory usage)
  • Added a new Android GLES profiling layer. This layer intercepts EGL and GLES API calls made by an Android application and generates timing events for all intercepted calls. The events will appear in a new timeline in PVRTune. PVRTune will automatically detect (when using auto-deploy) when an application is using ANGLE and deploy the profiling layer via adb. This feature is designed to aid correlation between the GLES calls made by the app to ANGLE and the subsequent translated API calls made from the ANGLE backend to the Vulkan driver (assuming the Vulkan client stream is enabled).
  • Fixed an issue where the AboutBoxDialog links used font colour which was difficult to read against the black background


  • Added support for programmable CPU HW counters for Linux based platforms. Built-in CPU counters include: CPU Cycles, CPU Instructions, Instructions per Clock, Cache Miss, Branch Instructions, Branch Misprediction, Pipeline Frontend Stalled, Pipeline Backend Stalled. Users may select a sampling frequency (default 1000hz) via the PVRPerfServer settings window.
  • Users may program CPU counters via the Edit Counter Group dialog
  • When graphing the GPU clock speed PVRTune now produces a perfectly straight line. Previously, there were wobbles around task edges.
  • “File/Export/Export counters to CSV…” will now contain full counter path + name
  • The per-PID FPS can now also be a per-PID per-group-of-contexts FPS. Counter Instantiation is now also per-PIDDriverContext. Frames are now built (and rebuilt) asynchronously, based on which data has been dirtied, rather than as the data is received. Activities will no longer be merged into a Frame if their ExtJobRef uses different DMContext values. Note: pre-1.7 DDKs don’t have ExtJobRef data.
  • Counter instantiation is now per-CID, as well as per-PID and per-UserCounter. This fixes a modified PVRScopeRemote that creates and manages two identical PVRScope connections.
  • Allowed counter group editing even when no file/data is loaded
  • PVRTuneCG file format has been updated to maintain the users chosen counter order. Previously, it re-ordered all counters in group 0, followed by any counters added by group 1, and so on. Counter/counter group state is now saved between runs to “PVRTuneComplete20.2.PVRTuneCG” (was “PVRTuneComplete19.2.PVRTuneCG”)
  • Added support for a “CSV Import…” option in the Counter Group Manager GUI. This means counter groups can be imported and exported from the GUI.
  • Updated the Counter Group GUI
    • Added an input validator to ban the “directory” slash: ‘/’
    • Tweaked GUI title to switch “Edit” with “Custom”
    • Added a splitter allowing the “Group Contents”/”HW Block Capacity” ratio to be moved
  • Updated the “Create New Counter”/”Edit Counter” GUI:
    • Remodelled the GUI. The available counters are now shown in a tree view, with a “folder” per group, rather than a tabbed view with a tab per group. In some cases this makes it much quicker and easier to find what you’re looking for, especially if you just want to use the filter box and see what comes up.
    • Disabled the Modify for Volcanic blocks.
    • There are now 3 tree views, held in a tab widget: inputs, caps and shortlist
    • Added the current HWConfig in the dialog box title
    • Counter sources: clarify that system kernel/user times are in MS
  • Updated the HW Counter Source editor GUI to add the current HWConfig in the dialog box title
  • Added new PVRTuneComplete command-line options:
    • –import-csv-counterdefinitions
    • –save-counterdefinitions
  • Changed the buttons in the Custom Counter Group editor from Accept/Close to Accept/Cancel
  • Moved from a Close button to Accept/Cancel buttons in the Custom Counter Groups GUI 
  • Added a “CSV Export…” button to the Custom Counter Groups GUI
  • Allow removing counter sources from counter sources shortlist
    • Users can now select multiple items and delete them with either the delete key or the context menu
    • Bug fix: Clear the list of “all” sources before filling it. They were duplicating every time the fn executed.
  • Counter Table entries are now created in the proper order as per the editor (rather than all “sources” followed by all counters, which moved the folders to the top)
  • The “Source” section has been removed from the Counter Properties view. It now just show the full path for the counter name (word wrap now enabled).
  • General improvements for custom counter and group editing:
    • Default groups are no longer locked. Any group or counter can be edited. The Counter Group Manager has a new button “Load Defaults…” to return to the default groups and counters.
    • The Counter Group GUI now has a “Delete” button to remove counters and groups of counters
    • Automated sorting is now disabled in the Counter Group GUI
    • Sorting is disabled in the Counter Table GUI. It now shows items in the same order as in the editor.
    • Default counter colours now take the whole counter path+name into consideration (not just name)
    • “custom” counters are not available on Volcanic. Counters using those sources are now disabled as appropriate in the group editing GUI.
  • Updates to the Counter Table:
    • Allow the View column to be hidden
    • “Hide disabled” now defaults to off
      • This avoids the confusion that is bound to occur when someone disables the View column and has not yet selected any time range; whereupon all counters would be hidden by default in the counter table
      • As counters are instantiated as necessary these days, there are fewer potentially inactive counters than there used to be, that is why the “Hide Disabled” option was added (and defaulted to on), and why the View column was forced to be always visible
      • These days, it’s better to grey counters than to hide them

PVRShaman v2.9

  • Fixed apply-shader menu button which was always disabled due to faulty logic.

PVRTexTool v5.0.0

  • Added support for equirectangle to cubemap conversion
  • Added support for ASTC HDR compressed formats
  • Enabled BC1 (DXT1), BC2 (DXT3), BC3 (DXT5), DXT2 and DXT4 on Linux and OSX platforms
  • Added PVRTexTool plugins for 3ds Max 2019/20 and for Maya 2018
  • Added support for RGBM (shared multiplier) and RGBD (shared divisor) texture formats, both formats are 32bpp and are in the form RGBA8888, where the alpha channel stores the shared multiplier or divisor respectively. Add “MaxRange” meta data to the PVR file format, this floating point value is used to decode the RGB{M/D} data.


  • Added support for creating a cubemap texture from an equirectangle image
  • Added support visualisation of NaN and Inf pixel values for floating point formats. Users may change the highlight colour by going to “View” -> “Change Nan/Inf Colour”.
  • User can now select nearest or bilinear texture filtering when in the cube view
  • Added a dark theme option (View->Theme->Dark Fusion). This is enabled by default.
  • Added .astc files to supported extensions for file loading and saving dialogs. When loading a .astc file the user will be prompted to select the desired colour space as the .astc header does not include the colour space information.
  • Exposed BC4 and BC4 in the encode window
  • The WrapRawData dialog no longer allows the user to input a channel bit width of 0 and also clarify the ‘No Channel’ option in the channel name combo boxes.
  • Fixed a crash that would occur when the user pushes the “Reset Filters” button in the encode window when the recent format list is empty
  • Completely overhauled the PVRTexTool GUI layout
  • Improved the overall responsiveness of the user interface
  • Supported a proper undo/redo mechanism
  • ETC2_RGB_A1, EAC_R11, and EAC_RG11 formats now show the ETC compressor options in the encode window
  • Exposed UYVY and YUV2 texture formats in the encode window
  • Updated the encoding widget to allow users to select BASISU ETC1S and UASTC as the target format


  • Added a new ‘-noout’ command line option to allow a user to supress output of a .pvr file, by default, a .pvr is always written out even when -o is not specified
  • Fixed the output file name for decompressed (-d) image files .bmp, .png, .jpeg and so on
  • ‘Tolerance’ is now accepted as a valid diff mode
  • Exposed BC4 and BC5 texture formats
  • Allowed input and output files with a .ktx2 extension
  • Added a new CLI option “equi2cube ” which allows creation of a cubemap texture from an equirectangle image
  • Eliminated unnecessary transcodes on input files. The CLI now trancodes only if the user explicity requests it via the -f option or if the user requests a texture transformation (resize, gen mipmaps etc.) and the input texture is compressed e.g. PVRTC or packed e.g. 565. If the CLI has to transcode to an intermediate format it now tries to select the best format based on the input format instead of just transcoding everything to RGBA8888. The -f option is no longer a required option, this means simply saving the texture to another container type e.g. .pvr ==> .ktx no longer triggers a transcode, which mitigates the extra compression artefacts in the resulting data. If the user omits the -f option and asks for a transform e.g. a resize, then the CLI will transcode the texture back to its original format (if necessary) before saving.


  • Added supported loading the following image files: PNG, JPEG, BMP, HDR, TGA, GIF, PSD, PIC, PPM, and PGM
  • Supported writing the following image files: PNG, JPEG, BMP, TGA, and HDR
  • Exposed more PVRTC quality modes. There are now 6 quality modes to choose from:
    • Low (2 passes)
    • Normal (4/5 passes)
    • High (6 passes)
    • Very High (8 passes)
    • Thorough (16 passes)
    • Best (32 passes)
  • Updated the PVRTC library, improving compression performance
  • Added support for BC4 and BC5 compressed formats
  • Added a new Python binding library for PVRTexLib. This enable users to access all PVRTexLib functionality from within a Python script.
  • Added missing GL_SRGB_ALPHA format to the getPowerVRFormatOGL helper function
  • Fixed the GL_SRGB8_ALPHA8 format in the getPowerVRFormatOGL helper function
  • Exposed a new pure C interface for PVRTexLib library functions. Expose a new C++ convenience wrapper which wraps the new C interface. The PVRTexLib interface is now comprised of the C interface – PVRTexLib.h, the C++ wrapper around C interface – PVRTexLib.hpp, and PVRTTexture.h which holds the common defines, structures and enums shared between the C and C++ interfaces. Note the old C++ interface is no longer available.
  • Enabled BC1 (DXT1), BC2 (DXT3), BC3 (DXT5), DXT2 and DXT4 compression on Linux and OSX platforms
  • Reduced the amount of data type conversion where possible
  • Transcoder now processes pixels in parallel, improving performance for large textures and textures with many surfaces
  • Flip and Rotate now work for all uncompressed texture formats and channel type
  • Added support for KTX2 file format. Support loading and saving to a KTX2 file. If the the texture format is BASISU_ETC1S then the file will be saved in the ‘supercompressed’ format
  • Added new compressed texture formats: BASISU_ETC1S and BASISU_UASTC. Both formats may be saved to a .pvr file
  • Added support fpr transcoding to Binomial ETC1S and UASTC ‘supercompressed’ formats
  • Added a new meta data type: ‘ePVRTMetaDataSupercompressionGlobalData’, used for decoding certain formats such as ETC1S

PVRVFrame v10.13

  • Reduced unintended allocations in FramebufferDownsample
  • glDebugMessageControlKHR no longer returns invalid enum if the type is DEBUG_TYPE_PUSH_GROUP or DEBUG_TYPE_POP_GROUP
  • Fixed a validation error in glReadPixels where it would incorrectly return invalid operation if a pixel unpack buffer was bound and mapped
  • Fixed a bug on Windows where a config would claim to have stencil support but the underlying config wouldn’t
  • Fixed a bug where framebuffer functions would return GL_INVALID_OPERATION if the read framebuffer was being modified and pixel local storage was enabled

PVRGeoPOD v2.28

  • Blender 2.8x: Fixed vertex colours

PowerVR Tools and SDK 2020 R1

SDK v5.5

  • Slightly changed the logic when requesting multiple queues. It is now possible to be able to return the same queue twice instead of breaking.
  • Removed OpenGL ES deprecation warnings for the iOS examples. These warnings are due to the entirety of OpenGL ES being deprecated by Apple.
  • Added PVRVk helper files to the PVRVk project.
  • Improved the EGL Context API. Shared contexts are no longer separately wrapped objects (SharedEGLContext), but simply EGLContexts. The API has been similarly streamlined.
  • Ported the basic rendering (BumpMapping) example for OpenGL ES.
  • Added the Multithreading example for OpenGL ES. This example shows how a shared context bound to a worker thread can be used to load assets asynchronously while something else is rendered on the main thread.
  • Updated the Vulkan headers and PVRVk to version 1.2.
  • Removed the non-functional Java onCreate functions from all examples except IntroducingPVRCamera. The rest of the examples were only calling super.onCreate.
  • Updated and upgraded the PVRCamera framework module. The Android runtime permission system is now implemented, and the asynchronous permissions functionality now works properly.
  • Enhanced the IntroducingPVRCamera example to correctly handle different aspect ratios between the framebuffer and the camera output.
  • Slightly updated the Gradle commentary.
  • Updated Gradle wrappers to version 6.
  • Changed the Gradle wrappers to use full src+bin Gradle distributions so that Android Studio now displays Gradle autocomplete.
  • Updated the Android plugin to 3.5.3
  • Updated the included glslang version to 8.13.3559.
  • Added code to ensure examples exiting due to an error will have the error code correctly propagated to the command line.
  • Fixed the implementation of multisampling on-screen framebuffers for Vulkan. Now, if the number of samples is greater than 1 in DisplayAttributes, multisampling will be correctly enabled. For example, if -aasamples=4 is passed through the command-line or the number of samples is changed programmatically.
  • Updated the pvr::utils::createOnScreenXXX interfaces. Previously these would not work correctly with Multisampling and other more complicated interfaces. The current interface (createOnScreenFboAndRenderpass, createSwapChainAndDepthStencilImageAndViews) is now deprecated and will be removed in a future version. The new interface (createOnScreenSwapchainRenderpassFramebuffers) is replacing these two calls.
  • Updated the interfaces involving the SDK taking pointers to VMA Allocators, which were smart pointers already, to taking just the smart pointers. The original intent of denoting them as optional can still be fullfilled by passing null (or nothing, where they are optional), but now vmaAllocator should be passed instead of &vmaAllocator.
  • Fixed the implementation of appendPNext so that the new pNext structure is actually appended to the current base structure. Fixing this issue also enables a number of other features including the VK_VALIDATION_FEATURE_ENABLE_GPU_VALIDATION_EXT and VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT extensions, as well as enabling a debug callback. which will be used during instance creation to report validation issues.
  • Changed a flag in OpenGL ES 3 that could make the SwiftShader implementation act as if some textures were mipmap-incomplete.

PVRCarbon v0.5

We are aware of an issue on some devices where the PVRCarbon remote recorder will not capture some of the SDK examples when running on Android 10. We are working to fix this as soon as possible.

  • PVRCarbonInstaller.sh now disables recording when installing the libraries. This stops applications from accidentally recording straight after install.
  • PVRCarbonInstaller.sh comments out the ro.hardware.egl property inside /vendor/build.prop when installing the libraries. This property is restored when uninstalling.
  • PVRCarbonInstaller.sh now detects the EGL version supported by the driver and attempts to mirror this version in the installed libraries. This fixes a crash on Android 10 caused by the EGL 1.5 symbols available inside PVRCarbon tricking Android into making EGL 1.5 calls even on an EGL 1.4 driver.


  • Added a new Dark Fusion theme.

  • Added a new static analysis widget for EGL, OpenGL ES, and Vulkan calls.

  • Added a new Visible Calls List widget which allows calls in the Call List to be filtered and hidden based on API, call type, and frame.

  • Added the ability to highlight calls using a Call List context menu.

  • Fixed highlighting of errors and warnings in the log that get reported by the Player.

  • Fixed a bug that would break remote recording on Android if debug.vulkan.layers was already set on device.

  • Fixed a bug where floating dock widgets would not be reset when resetting the layout.

  • Fixed an issue where the remote recorder failed to locate the Vulkan library search path on Android 10.

  • The splash screen has been improved to include quick links to recent files, open file, and the remote recorder.

  • Added a button to Preferences to reset the colours to defaults.

  • Correctly limited the Save As dialog to always start from frame 0. No other frame is currently supported.

  • The Save As dialog will no longer say a file has been successfully saved if an error occurs.

  • The GUI now highlights more clearly calls which are partially recorded in the call list.

  • Added a static analysis result entry for indicating when there are partially recorded calls in the recording.

  • Added support for recording callbacks triggered by the use of debug callback extensions KHR_Debug, VK_EXT_debug_utils and VK_EXT_debug_report. These recorded callbacks are then displayed as part of the static analysis output.

C++ Exporter:

  • Fixed exporting of OpenGL ES code that doesn’t use glGen* calls to generate object handles.

  • glWaitSync now exports with its timeout set to GL_TIMEOUT_IGNORED instead of a big uint value.

  • Fixed an issue where exporting vkUpdateDescriptorSetWithTemplate* function calls would occasionally produce uncompilable code.

  • Fixed an issue where exporting VkWriteDescriptorSet structures would occasionally produce uncompilable code.

  • Fixed an issue where exporting vkCmdSetBlendConstants would produce uncompilable code.

  • Fixed an issue where nans weren’t being properly handled when exported on Linux.

  • Fixed an issue where create_surface.cpp/.h would be added to the exported Cmake but not export the files.

  • Fixed an issue where the platform manager wouldn’t be defined if only vk::surface::initialise was exported.

  • Updated the Android makefiles to use com.android.tools.build:gradle:3.5.3.

  • GLint64 and GLuint64 now correctly export with LL and ULL if the values are big enough.


  • Added support for GL_IMG_framebuffer_downsample.
  • Fixed playback of glEGLImageTargetRenderbufferStorageOES and glEGLImageTargetTexture2DOES.
  • The API libraries that the Player dynamically loads can now be overridden by setting the environment variables PVRCARBON_PLAYER_LIB_EGL, PVRCARBON_PLAYER_LIB_GLESV2, and PVRCARBON_PLAYER_LIB_VULKAN.
  • Replaced the –verbose option with –log-level. This new option offers more control over the output.
  • Improved the cross-platform support for setting compositeAlpha.
  • Fixed an issue where the Player would refuse to play vkDestroy* calls if the recorded handle was VK_NULL_HANDLE.
  • Fixed a possible crash that could occur when buffers or images require more device memory than at record time.


  • Capturing framebuffers on OpenGL ES 2 contexts that are actually OpenGL ES 3+ underneath now uses OpenGL ES 3 functionality for better performance.
  • Added the ability to record from non-frame zero for OpenGL ES applications.

PVRTexTool v4.24.0

  • Added a Depth option in Wrap Raw Data dialog.

PVRVFrame v10.12.0

  • Fixed some crashes that could occur if PVRVFrame fails to retrieve all the wgl functions it requires. For example, if used over remote desktop.
  • Added support for EGL_KHR_gl_colorspace.

PVRGeoPOD v2.28

  • Blender: Fixed vertex colours export.

  • Blender: Removed a check for active channels. This allows all available UV sets to be exported regardless of whether they are active or not.

  • Blender: Fixed exporting selected objects.

  • Blender: Fixed duplicated materials which were left empty.

PVRTune Developer v14.149

  • libPVRScope*.so for Linux is now linked to librt. This means that the final application is not required to do so, however the application will still need to link to librt if libPVRScope*.a is used.

  • When an Activity is clicked on, the Properties window now also shows an Index on timeline row value.

  • Fixed the display of a mouse-hover summary for Marks in PVRScope timelines.

  • PVRPerfServer device details are now selectable by mouse and keyboard, enabling the user to copy the text.

  • Added a new Logcat widget (only applicable when connected to an Android device). This allows a user to view adb logcat output in the PVRTune client. The output stream can be filtered by a filterspec (for example “APP:D *:S)” and by a process ID.
  • Added a new option (Edit -> Preferences -> Timeline spacing) to allow users to configure the amount of spacing between timelines.

  • Added a new Dark Fusion application theme (Edit → Preferences → Theme).
  • The Linux variant of PVRPerfServer now statically links to libstdc++. This should help ease ABI compatibility issues.

PVRTune Complete v14.149

  • Fixed the display of a mouse-hover summary for Marks in Host (KM) timelines:
    • Device status
    • Driver memory usage
    • Host Resource Type
  • Fixed the display of a mouse-hover summary for Active counter group marks in HW timelines.
  • Fixed the display of a mouse-hover summary for Marks in HW timelines: Clock Transform.
  • Fixed the display of a mouse-hover summary for Marks in HW timelines: Counter Reset, Counter Config, Power Event.
  • Added support for framebuffer compression algorithm type emitted in the Vulkan client data. This new attribute will appear under Image View -> Image -> Compression Type in the Properties window. This new information requires at least DDK MAIN@5551192.
  • Improved the presentation of Counter ResetCounter Config, and Active Config marks in the Properties window.
  • Added a new optional Power Event mark. The visibility of these new marks on the timeline can be toggled by the user with the default state being hidden. This mark will display the power event type and the domain strings if applicable.
  • Improved the handling of device power events to take into account that some power events are device domain power up/down while others are device power on/off. This prevents occurrences of incorrect HWR regions being shown on the timing graph.
  • Added support for capturing ‘Tile Lifetime Tracking’ (TLT) data, available for IMG A-Series devices only. PVRTune will automatically generate a tile heatmap from the captured TLT data, which can be viewed via the Resource Viewer widget.
  • Added a new Schedule Resource Capture widget to the connection page which allows users to queue up resource captures before establishing a connection with a device. Note that the user must use remote deployment and select an app for PVRTune to start. This enables PVRTune to automatically select the appropriate PID and GLES context ID. Furthermore, this option will enable Client API EGL and Client API GLES PVRPerfServer timing options. Due to the latency between PVRTune and the driver, requests are not guaranteed to match frame numbers exactly.
  • Added RTDataSet support (Requires at least DDK MAIN@5629242), the RT Data Set is passed via the Services Client API data stream in kick events. It allows users to visualise the RT Data Set in use for TA and 3D kicks (disabled by default). To enable this, right click on graph → Render Timing Data Sections → Render Target Data Set. The raw RT Data Set value will also be displayed in the Properties window. RTData and RTDataSet colours are only shown when there is a valid value. For example, 2D, Transfer and Compute tasks do not have a valid RT Data so a coloured bar is not shown.
  • Fixed SPIRV-Cross compilation failures in cases where separate image samplers are used.
  • Updated the Resource Viewer UI. Improved texture format support, SRGB handling, and performance when thumbnails of captured resources are being generated.

PowerVR Tools and SDK 2019 Release 2

SDK v5.4

  • Added MoltenVK implementation. The Vulkan part of the PowerVR SDK can now work on macOS.
  • Updated the Android build tools to 29, Gradle wrapper to 5.1 and the Android Gradle plugin to 3.5.
  • Updated the CMake version used in Android builds to 3.10.2 so that newer toolchains are supported. The Android SDK ships with 3.6 and 3.10.2 so no additional steps are required.
  • Simplified dependencies of Android Gradle projects, optimising parallelism.
  • Increased the Java virtual machine’s memory usage for Gradle.
  • Greatly improved the use of CMake. The modularisation of the SDK should now be enhanced and writing examples using the SDK should be even easier and cleaner now, as should be adding and removing examples. This is done by using a target-centric CMake approach to the assets and resources management, resulting in a ~30-50% reduction in the size of the CMakeLists.txt of each example.
  • Upgraded the command line options of CMake to use the naming convention PVR_XXXXXX. The old variables are still working.
  • Updated external project MoodyCamel::Concurrent Queue to latest version. The updated version provides a timeout API, allowing us to remove some modifications we had performed. This allows blocking calls to return on a queue marked for deletion.
  • Small overhaul of PVRShell/StateMachine and the application lifecycle. This will affect Android most of all. The state machine can now handle the back-and-forth of the various Android state changes (such as screen on/off, destroy events, and so on) more gracefully.
  • Allowed PVRCore to build without GLM and/or pugixml: If SDK/external/glm and/or /SDK/external/pugixml are not present, the relevant files (geometry/math utilities for GLM, xml parsing for pugixml) will not be compiled in and relevant typedefs will be defined.
  • Fixed a bug in OpenGL ES UIRenderer that could set the wrong value on winding order and depth mask, and a corresponding bug on OpenGLESDeferredShading that was not setting the depth mask when it should
  • Updated the ImageBasedLighting examples to be in line with each other. The OpenGL ES version now uses a VBO for the sphere instance parameters, and the shader code bindings and UBO structures were brought inline to each other.
  • The constructor for AxisAlignedBoxMinMax now initialises max to the minimum floating point value and min to maximum floating point value, This means that the user can immediately start adding points to it.
  • Added conversions between AxisAlignedBox and AxisAlignedBoxMinMax.
  • Added an overload to ModelGLES which allows the user to pass a smart pointer to a Model instead of a raw object. This means ModelGLES can now manage the lifetime of the Model. Also, added flags to allow the user to specify which of VBOs/Textures should be loaded.
  • Fixed a bug in StructuredBufferView, where the copy constructor would end up with an incorrectly copied object.
  • Fixed the name of the OpenCL Utils function for loading a kernel file from disk from clutils::loadKernel to clutils::loadKernelProgram.
  • Added a pure (non-graphic) OpenCL example, OpenCLMatrixMultiplication.
  • The existing PVRVk structures pvrvk::ImageCreateInfo and pvrvk::BufferCreateInfo for creating images and buffers are now used with pvr::utils::createImage and pvr::utils::createBuffer respectively.
  • Reordered pvrvk::ImageCreateInfo parameters so that the default arguments align with more common usecases.
  • Fixed a bug in the assertion function where it would not output the custom assert message.
  • Fixed a bug in StructuredBufferView where the copy constructor would end up with an incorrectly copied object.
  • Changed the usage of log.txt as originally the file was continuously opened and closed, causing performance losses.
  • Retired the AssetReader and AssetWriter interfaces and replaced them with functions. Most usages of stream function pointers have now been replaced with simple references. Reading and writing files should now be considerably more concise.
  • Greatly simplified the interface of the Stream class, ensuring opening on construction and closing on destruction.
  • MinGW support : A number of changes have been made that should now account for MinGW being used as a generator for Windows
  • Added a readme file to IBL map generator
  • Completed a revamp of the synchronisation used in VulkanParticleSystem based on latest synchronisation findings. This has resulted in both correct and optimal usage of a GPU accelerated particle system integrated in a traditional graphics application.
  • Added overloads for fractional times in the pvr::Time class.
  • Made all Time::getTimeXXX functions constant.
  • Made a number of changes to the .clang-format file.
  • Removed unused uniforms for metallic/roughness when textures are used for them in the OpenGL ES version of the ImageBasedLighting example.
  • Removed wrong dependency from PVRVk to PVRCore.
  • Added touch screen support for non-window system (NullWS) Linux platforms.

PVRShaderEditor v2.13.0

  • Fixed a bug where “Worst” performance estimates were not being calculated correctly.

PVRTexTool v4.23.0

  • Fixed a bug where functions were not being exported in Windows DLL.
  • Fixed a bug where KTX files would be generated with incorrect capitalisation of “KTXorientation” key.
  • Enabled DXT support on Linux and OSX.

PVRVFrame v10.11.0

  • Added support for EGL_KHR_wait_sync.
  • Fixed a bug in eglTerminate() where contexts and surfaces were being incorrectly destroyed while they were still bound to a thread.

PVRTune Developer v14.148

  • Added a command-line option to override the default Comms Buffer Size, for example, –CommsBufSize=3145728.
  • If there an unexpected disconnect, such as the packet buffer becoming full, PVRTune now pops up a dialog box offering automatic reconnection after 10 seconds or a cancel button.
  • When clicking on a point on the timeline where there are multiple marks together, PVRTune will now show them all rather than just the ‘first’ one.


  • A GPU string is now placed into the GPU folder name
  • The CPU per-core counters have been moved into a subfolder. The CPU core name now shows in the Counter Table, and in the Monitor tooltips.
  • Fixed formatting on CPU description strings.
  • Moved the per-PID counters into a GPU specific subfolder.

PVRTune Complete v14.148

  • Added support for detailed Vulkan client stream information.
    • Vulkan tasks that are part of a frame are now grouped correctly with the corresponding HW tasks.
    • TA, 3D, Compute & TQ HW tasks will now display the appropriate Vulkan client stream information, this includes renderpass, compute pipeline and the source / destination buffer/image details respectively.
    • Capture SPIR-V shaders and cross-compile into human-readable GLSL to allow for inspection.
    • Vulkan object creation information for the following is displayed on the timeline:
      • VkPipeline (Graphics & Compute)
      • VkRenderPass
      • VkPipelineLayout
      • VkFramebuffer
      • VkImageView
      • VkImage
      • VkSampler
      • VkDescriptorSetLayout
      • VkDescriptorSet
      • VkShaderModule
      • VkCommandBuffer
      • VkBuffer
    • The following Vulkan commands now contain detailed information regarding the current pipeline state:
      • vkBeginCommandBuffer
      • vkEndCommandBuffer
      • vkCmdBeginRenderPass
      • vkCmdEndRenderPass
      • vkCmdBindPipeline (Graphics & Compute)
      • vkCmdBindDescriptorSets
      • vkCmdDraw
      • vkCmdDrawIndexed
      • vkCmdDrawIndirect
      • vkCmdDrawIndexedIndirect
      • vkCmdDrawIndirectCountKHR
      • vkCmdDispatch
      • vkCmdExecuteCommands
      • vkCmdCopyBuffer
      • vkCmdCopyImage
      • vkCmdBlitImage
      • vkCmdCopyBufferToImage
      • vkCmdCopyImageToBuffer
      • vkQueueSubmit
  • Added support for capturing default framebuffer and off-screen intermediate buffers from a GLES3 application. If PVRTune is connected to a compatible device then a framebuffer capture can be requested from a running GLES3 application via the new “Resource Viewer” widget. The desired application can be selected using PID and context ID. Additionally, the type of capture can be selected from this widget, the options are “default framebuffer” or “offscreen buffers”.
  • Added the latest options to the example command line in PVRPerfServer.

Counter Group Editor:

  • The editor now shows/edits the available definitions rather than the instantiated counters.
  • Merged the two tree views into one.
  • Counters and folders can now be renamed directly.
  • When a new counter is created, it is automatically added to the group.
  • Dragging and dropping into the root item is now allowed, otherwise reorganising folders in the GUI is impossible.


  • Appended “@INSTANCESTR@” to the “Host (KM)” folder name.
  • A GPU string, BVNC, and codename are now placed into the GPU folder name.
  • The New Counter GUI now also shows tabs for System, PID and Abstract counters.
  • Counters and groups are now fully defined in the GUI.

PVRGeoPOD v2.27

  • Blender v2.27 plugin: Removed scene.update() which is not supported in Blender 2.80.

PVRTrace v3.13

  • Fixed a crash that could occur if the recording contained glSamplerParameter*v.

PVRCarbon v0.4

  • Updated Vulkan to version 1.1.116
  • Moved the Vulkan PVRTC/ETC decompression out of the player and into a layer (VK_LAYER_POWERVR_format_emulation) that can be used with any application.


  • Fixed a bug where the current frame would not be updated correctly in the export dialogs.
  • Added support to the remote recorder for Android 10.
  • Fixed an issue where the remote recorder was not able to remotely kill an application on non-rooted devices.
  • eglGetCurrentSurface will now correctly show EGL_READ/EGL_DRAW instead of their enum values.
  • The package list of remote recorder now supports filtering the list and launching the packages with command-line options.
  • Extended the remote recorder options to include the majority of the recorder options.
  • Fixed highlighting of EGL and GL in the current call widget.
  • The properties dialog now mentions the ‘frames’ config option.
  • Export to code dialog now allows the user to define the name and package name of the output.
  • Added support for Android makefiles to the c++ exporter.

Command-Line Interface:

  • Added support for Android makefiles to the c++ exporter.


  • Implemented VK_KHR_descriptor_update_template support.
  • If eglCreateContext fails with bad config because EGL_KHR_no_config_context is not supported, it will now tell the user.
  • Added EGL support for Wayland.
  • Fixed playback of eglSwapInterval.
  • Updated the Android version to use adaptive icons.
  • Added the command-line option: –large-data-memory-hint. This provides a hint to the Player on how much ‘large’ data (for example buffers and textures) should be resident in memory.
  • Fixed an issue where some calls would not be loaded if a multi-threaded application died part way through writing to file.
  • Added experimental support for multiple windows, meaning the option -w does not need to be specified when playing back. 
    • Note: Though all windows can now be rendered they may not be rendered in their original layout/position/format.
  • Added the –preload command-line option that preloads the Carbon file fully into memory before playing back.
  • Offscreen rendering for OpenGL ES now uses framebuffer objects.
  • Saved TGAs are no longer flipped for OpenGL ES 2.x contexts.
  • RGB and RGBA formats are converted to BGR and BGRA.
  • Added playback support for GL_EXT_separate_shader_objects.
  • Fixed the usage description on Android so it shows the correct am start command for execution.
  • On Android if the Player now fails to create an instance with VK_ERROR_LAYER_NOT_PRESENT, it will inform the user to correct their debug.vulkan.layers property.
  • The -w option now works for Vulkan.
  • Implemented EGL_ANDROID_presentation_time playback.
  • eglSwapBuffersWithDamage falls back to eglSwapBuffers if the extension is not available during playback.
  • Draws using client vertex buffers and non-client index buffers now record and play back correctly.
  • eglSwapBuffersWithDamage calls will play back as eglSwapBuffers calls on non-window surfaces to prevent crashing on Android.


  • Implemented VK_KHR_descriptor_update_template support.
  • When disabling ASTC, BC, and ETC2 texture support for Vulkan, vkGetPhysicalDeviceFormatProperties is now overridden to return 0 for any affected formats.
  • Added the ability to flush at the end of frames.
  • OpenGL ES framebuffer capturing now handles sRGB framebuffers correctly.
  • Coherent buffer changes are now flushed on post-OpenGL ES 2.0 draw calls and compute dispatches.
  • Fixed bug with glGetBufferPointerv where incorrect pointer was returned for coherently mapped buffers.
  • OpenGL ES draw calls using client vertex arrays together with non-client index buffers now record correctly.
  • Fixed crashing during SIGTERM handling on Android.
  • OpenGL ES uniform locations for uniform array indices greater than 0 are now recorded at program link time. This allows the Player to load uniform arrays starting from an index greater than 0.
  • Fixed incorrect data being recorded for coherent buffer updates.
  • Recorder: Fixed the recording of multiple frame ranges.

C++ Exporter:

  • eglInitialize/eglTerminate are now reference counted by default to emulate the behaviour of Android.
  • Fixed an issue in the Windows platform implementation where the native display type was not consistent.
  • Fixed an issue where the name of the first exEGL_ANDROID_presentation_timeported variable would conflict with Vulkan namespace create_surface.
  • The exported code now supports Wayland.
  • Some filtering will now be performed on the EGL_RENDERABLE_TYPE and EGL_SURFACE_TYPE config attributes to increase portability of exported code.
  • Fixed exporting glProgramUniform* calls when location is 0.
  • Exported files now all end in a new line.
  • Fixed a crash that could occur when processing vkAllocateDescriptorSets calls.
  • Added support for Android makefiles.


  • Added HTML versions of the tools manuals onto the documentation website.

PowerVR Tools and SDK 2019 R1.1

SDK v5.3

  • Removed the host compilation of glslangValidator when cross compiling as this had the potential to fail quite easily. This also required a dependency of host toolsets for cross compiled builds which wasn’t desirable. For cross-compiled builds we now download the matching glslang binary release package (https://github.com/KhronosGroup/glslang/releases/) for the host platform and extract it into the correct place (SDK/bin). Only do this if a glslangValidator binary isn’t already in the host bin directory meaning the step will only happen if a cross compiled build is the first build of the SDK on a particular host platform.
  • Removed duplicated code for downloading external projects using a common function defined in cmake/Functions.cmake.
  • Fixed an issue in equi_to_cube.py where the displayed width and height of the generated map were half of their real dimensions.
  • Tweaked CMake options to better facilitate MinGW Win32 builds.
  • Building for iOS now support code signing through build command line.

PVRVFrame v10.10

  • Added support for EGL_EXT_swap_buffers_with_damage/EGL_KHR_swap_buffers_with_damage.
  • Added support for EGL_KHR_partial_update.
  • Fixed a possible crash on OSX in eglQuerySurface.

PVRTune v14.147

  • Improved the compatibility of PVRPerfServer with Android Q.

PVRGeoPOD v2.25

  • Stand-alone: Fixed exporting more than one set of UVs from FBX.
  • Stand-alone: Fixed missing VS2017 run-time dependencies.
  • Added missing plug-in for 3DSMax 2020.

PowerVR Tools and SDK 2019 R1

SDK – General v5.3

  • cmake build system rewritten to use a target-centric system and embrace various cmake best practices (credit to @RCDaily for the input).
    • Now uses transitive dependencies for the various framework modules and external modules. Added various interface libraries to allow more encapsulation. For example, including PVRUtils will now correctly pull PVRCore as a dependency.
    • Removed usage of global commands, and replaced their usage with target-specific alternatives such as include_directories -> target_include_directories, link_libraries -> target_link_libraries and so on.
    • Now makes use of cmake’s ExternalProjects module. Uses custom targets to download, configure, build, and install for working with third party dependencies: pugixml, VulkanMemoryAllocator, and glslang.
    • Removed the external/SPIR-V folder which includes a pre-built glslangValidator binary, and replaced it with an external dependency which is built from source at runtime.
  • Integrated glslang into our SDK as a cmake external project, to allow using run-time generation of SPIR-V modules. Our Vulkan PostProcessing example now takes advantage of this.
  • glslangValidator will now be built and installed to SDK/bin//Release where matches the platform for which the binary will be executed on. When cross-compiling, glslangValidator will be built using the host configuration.
  • Added an Orbit camera class to our math utilities (sitting alongside the existing FPS and TPS cameras). This camera is now used in ImageBasedLighting.
  • Added predefined formats to pvr::PixelFormat for RGB11F11F10F and RGB16F formats.
  • Made the AssetWriter interface classes automatically close the corresponding stream on destruction (avoid leaks/partial data on streams via RAII).
  • Added a function in the Texture class to retrieve a pixel from a cube texture by direction.
  • pvr::utils::createShaderProgram has been moved from HelperGles.h to ShaderUtilsGles.h
  • Updated the PowerVR logo used by UIRenderer to match the PowerVR rebrand.
  • Integrated pull request from github: https://github.com/powervr-graphics/Native_SDK/pull/32 – fix _WIN32 console builds: Use logLevel parameter rather than undefined ‘error’ variable. (Thanks @glebnovodran)
  • External libraries are now present or built in SDK/lib/platform_name/.  matches the platform for which the library was built for. matches the ${CMAKE_BUILD_TYPE} provided, or the debug or release configuration provided.
  • Now auto-generates Windows platform-specific resource file “Resources.rc” during configuration time using the appropriate set of resources (shaders, assets etc.)
  • Added support for runtime conversion of GLSL to SPIR-V using glslang to PVRUtilsVk.
  • Android: Updated gradle support for Android Studio 3.3.
  • Android: Updated compileSDKVersion to 28.
  • Android: Updated Android plugin for Gradle from version 3.1 to 3.3.
  • Android: Updated Gradle wrapper version 4.4 to 4.10.1.

SDK – Examples

  • Added Vulkan ImageBasedLightingMapsGenerator, a command-line example and tool for generating Irradiance and Prefiltered maps for Image Based Lighting. It is using Vulkan without a surface (headless). As it is intended to run on the host, the example/tool is currently supported for Windows and Linux.
  • Various fixes for both Vulkan and OpenGL ES ImageBasedLighting demos, resulting in greatly improved visuals.
  • ImageBasedLighting and PostProcessing demos now use unclipped (full-brightness) environment maps captured from real scenes.
  • Replaced use of RefCounted.h with the use of std smart pointers primarily via the use of std::shared_ptr and std::weak_ptr.
  • PostProcessing now uses runtime-generated templated shaders for Gaussian Blurs to avoid the overhead of dynamic sampling from buffers within shaders. Instead, the Gaussian Blur shaders are provided with Gaussian offsets and weights as constant arrays baked into the shader. This means the compiler is able to provide significantly more optimal shaders than when previously dynamically sourcing offsets and weights from buffers filled with the same weights and offsets. The net effect of these changes is that the Gaussian Blur modes have been massively optimised.
  • Adding the VulkanTextureFilterCubic example, showcasing the extension VK_IMG_filter_cubic.

SDK – Framework

  • Replaced use of RefCounted.h with the use of std smart pointers primarily via the use of std::shared_ptr and std::weak_ptr. RefCounted.h is now no longer being used by the PowerVR SDK and has been marked as deprecated.
  • pvrvk::InstanceCreateInfo now takes a pvrvk::ApplicationInfo structure rather than taking a pointer to a pvrvk::ApplicationInfo. This avoids issues where the user would need to keep alive the pvrvk::ApplicationInfo structure. The instance application info can now be safely examined later in the application lifecyle.
  • PVRUtilsVk/UIRenderer now takes into account the number of multi-sampled samples being used for the first attachment description for the renderpass being used by UIRenderer.
  • Moved the following types into pvr::utils:: namespace – VertexAttributeInfo, VertexInputBindingInfo, VertexAttributeInfoWithBinding
  • Updated Vulkan headers and generated code to VK_HEADER_VERSION 97.
  • Added support for the Vulkan extension VK_EXT_debug_utils.
  • Added a set of utility functions to PVRUtilsVk for inserting generic debug labels. Also added functions for beginning and ending debug marker regions where the corresponding functions from VK_EXT_debug_utils or VK_EXT_debug_marker will be used, based on the supported debug extension.
  • Added the ability to create DebugUtilsMessengers when the extension is supported. DebugUtilsMessengers can be used to provide custom logging when the callback is triggered via specific events.
  • pvr::utils::createDebugReportCallback now takes a pvrvk::DebugReportCallbackCreateInfo structure rather than the arguments directly. This better mirrors what happens in the rest of the codebase.
  • Added support for InstanceExtensionTable and DeviceExtensionTable provided in pvrvk_vulkan_wrapper.h which are autogenerated. Provided simpler mechanisms for determining whether particular extensions have been enabled for instances/devices.
  • The functionality “if(instance->isExtensionSupported(extension))” has now been replaced with “if(instance->getExtensionTable().extensionEnabled)”. The use of multiple string comparisons has been replaced with a single boolean flag making this approach far more efficient.
  • Removed “if(isExtensionSupported)” from debug report/debug marker usage in PVRVk. These checks should be made external to PVRVk.
  • Increased coverage of utility functions which make use of beginCommandBufferDebugLabel/endCommandBufferDebugLabel in PVRVkUtils.
  • Added conversion functions from/to ObjectType/DebugReportObjectType in pvrvk_vulkan_wrapper.h.

PVRVFrame v10.10

  • Fixed an issue where incorrect values may be returned when querying GL_VERTEX_ATTRIB_ARRAY_INTEGER and GL_VERTEX_ATTRIB_ARRAY_DIVISOR.
  • Fixed a bug where glGetBufferParameteriv(GL_BUFFER_ACCESS_FLAGS) would return incorrect flags in some situations.
  • Added experimental support for GL_EXT_shader_framebuffer_fetch.
  • Fixed a possible hang in eglCreateWindowSurface.
  • Fixed a bug which caused incorrect error values to be generated by glRenderbufferStorage, and possibly other functions.
  • Added support for EGL_KHR_no_config_context.

PVRTune v14.147


  • “Verbose” marks are now categorised separately, for the purposes of filtering, and default to off.
  • Enabled tracking of new OpenGL ES events “glDispatchCompute” and “glDispatchComputeIndirect”. These events require at least DDK MAIN@5322926. This also enables correlation of the currently bound OpenGL ES compute shaders with their corresponding compute HW tasks. Additionally, the compute workgroup dimensions are now also available. Selecting a glDispatchCompute or a CDM Kick event will reveal this information.
  • Fixed the “–read” command-line option for the Android variants of PVRPerfServer. Note that support is limited to a single input, wildcards are not supported on this platform. Therefore multiple HWPerf .bin files cannot be merged into a single .pvrtune file on Android, if multiple inputs are required then the conversion must be done on Linux.
  • Added support for full syntax highlighting of captured GLSL shader source code. The new “Source View” window can be accessed via the Properties tree.
  • Added support for GLSL compiler performance statistics. The statistics will be displayed in the Properties view if Profiling Compilers are available. The location of the profiling compiler library can be set via “Preferences -> Select compiler directory”. Shader performance statistics include:
    • Theoretical maximum parallel instances that are able to run (based on temporary register usage)
    • USC utilisation (occupancy)
    • Cycle count, and a break down of where those cycles are used i.e. ALU, iterator, and sampler
    • Instruction count, and break down of the number of: SOPs, complex ops, sampler ops, and iterator ops
    • Temporary register usage
    • Cache stats for Unified and Common stores – read/writes & conflicts per bank
    • Per line cycle counts which are displayed in the left margin of “Source View”.


  • Overall improvements to search functionality including:
    • Vastly improved GUI responsiveness and search performance
    • Now correctly obeys quotes to search for terms containing spaces
    • Fixed some Activity strings, visible in the GUI, that were not searchable.

PVRGeoPOD v2.25

  • Added support for Blender 2.80
  • Added support for 3ds Max 2020

PVRCarbon v0.3

  • Updated the Vulkan API to 1.1.107.
  • PVRCarbonInstaller.sh now checks to see if there is enough free space available on /vendor before attempting to install the libraries there.
  • PVRCarbonInstaller.sh now places libPVRCarbon.so in the right directory for all supported Android versions.


  • Added support for OpenGL ES to the CPP exporter.
  • Added “Select” button to the remote recorder’s Android package selection widget.
  • OpenGL ES recordings now have correctly orientated frame buffers throughout the GUI.
  • Remote recorder will now record Android applications with no ABI, such as pure Java applications.
  • Fixed a bug where the option “Always show the capture prologue dialog” state wouldn’t save correctly.
  • Made the naming of the Remote Recorder consistent.
  • The current call widget will now be raised when a call is displayed.
  • Fixed a bug where search results wouldn’t get flagged as completed/cancelled.
  • Fixed a bug where the find button wouldn’t get enabled when loading a previous search value into the search text field.
  • EGL/GL enum/bitmasks are now stringified when displaying their values.
  • Fixed the saving out of files containing eglSwapBuffers calls from the GUI.
  • The final frame’s rendering is now shown for OpenGL ES recordings.


  • Fixed missing device functions from vkGetInstanceProcAddr.
  • Fixed potential lock up that could occur when recording Vulkan from non-frame 0.
  • On Android, we now use JNI to query the application’s file dir when setting the default filename instead of guessing.
  • Our exception handler is now installed on the first API call instead of when PVRCarbon is loaded.
  • Saving out recordings with recorded frame buffers in will now produce valid files.
  • Fixed output path for remote recordings.
  • Saving out a carbon file from a network recording now actually generates a file.
  • Fixed searching for host libraries on Linux.
  • nonCoherentAtomSize can now be overridden in the alignment options.
  • Fixed a bug where mapped data was not being captured that had been mapped as flush explicit.
  • Fixed the GL_OES_draw_elements_base_vertex functions.


  • Added support for OpenGL ES to the CPP exporter.
  • Added –ignore-errors command-line option to stop the player stopping on certain errors. This will make the Player more unstable.
  • –export-code now outputs to the .pvrcbn directory if no path is defined.
  • On Android, required permissions are now requested on launch.
  • Screenshots output from the player are now correctly flipped.
  • Implemented the GL_OES_draw_elements_base_vertex functions.
  • Player now throws a warning when creating an OpenGL ES 1 context.

PowerVR Tools and SDK 2018 R2

SDK and Framework v5.2

sRGB Correctness

  • In OpenGL ES, where appropriate and supported, EGL_KHR_gl_colorspace is used. Otherwise, shader-based gamma correction is applied prior to writing out final colour values to the on screen framebuffer.
  • In Vulkan, where appropriate, swapchains are now created using sRGB colour image formats.
  • Made use of sRGB versus linear image formats as appropriate, for textures used throughout the SDK.
    • PVRVFrame (PowerVR emulation library) must also be updated to ensure the demos run correctly.


  • New: IntroducingPVRVk example – a simple tutorial for using PVRVk. It contrasts well with its sister example IntroducingPVRShell – which has the same functionality, but without PVRVk.
  • New: Image Based Lighting example demonstrating how to achieve Physically Based Rendering efficiently on mobile, including different metallicity and roughness values.
  • Updated: PostProcessing example has been completely rewritten to demonstrate a set of heavily optimised bloom post-processing techniques, mostly related to Gaussian Blur.
  • Added rules in Vulkan example CMakeLists to run Spir-V compilation as part of a pre-build step, improving ease of use and iteration times.
  • Added a CMake command to PVRScopeExample and PVRScopeRemote to copy the PVRScope libraries in the executable folder on Windows, where they are dynamically linked.
  • When passing the  -h or --help parameters, the application now displays the help text and exits, instead of running normally.
  • Changed OpenCLExample to use “classic” OpenCL instead of cl-hpp.
  • Bug fix: The frustum-culling algorithm used in the Navigation3D and GnomeHorde examples no longer has inefficient overdraw.


  • Moved CommandLine to PVRCore for access from applications not using PVRShell, such as command-line applications.
  • Removed texture functions from the pvr::assets namespace (which is now reserved for Model related information) and up into the pvr:: namespace.
  • Removed the OpenGL ES context version parameter when initialising UIRenderer for OpenGL ES, as it can be inferred internally from the currently bound context.
  • Optimised various functions where std::vectors were used as local temporaries in functions as temporary scratch memory. Now they are only used if static memory overflows.
  • Split out all PFX-related functionality into its own PVRPfx project to avoid it cluttering PVRUtils.
  • Various bug fixes and improvements made to PVRVk and PVRUtilsVk:
    • Fixed some strict aliasing undefined behaviour issues that could potentially surface in -O3 builds:
      • All casts are now c-style or static-cast whenever suitable, instead of reinterpret_cast
      • All setters use memcpy instead of type-punning
      • All primitive types returned by value.
    • Added getDeviceMemory function for images.
    • Improved surface creation logic for handling DisplayMode surfaces.
    • Removed the unnecessary use of RobustBufferAccess in debug builds.
    • Improved the logic of creating/updating descriptor sets that could occasionally cause bugs.
    • Added support for configurable queue priorities.

General SDK

  • Updated: Support for Android Studio 3.2.
  • Updated: Vulkan headers are now
  • Updated: VMA is now version 2.1. This has enabled the following helpful debugging aids from VMA in debug builds:
  • Vulkan GLSL shaders have moved from “#version 450” to “#version 320 es” so that the more appropriate mobile shaders rather than desktop shaders are being used. This ensures that precision qualifiers are appropriately applied.
  • Improved use of shader precision qualifiers throughout the SDK. highp is now used only in places where using mediump would result in a loss of precision.
  • Cleaned up the CMake build system for more intuitive CMakeLists.txt files. Common.cmake is now broken down into:
    • Common.cmake
    • PlatformLibraries.cmake
    • PlatformFolders.cmake
    • Functions.cmake – now contains commonly-used functionality in functions or macro format, greatly improving the readability of CMakeLists.txt.
  • Added missing support for properly loaded ASTC textures.
  • Increased the default window resolution from 800×600 to 1280×800 to better represent modern mobile scenarios.
  • Improved support for LunarG Vulkan validation layers on Android, packaging them into debug apk builds for a better “out-of-the-box” experience.
  • Replaced the bundled Windows glslangValidator to use static linking, to avoid any MSVC++ dependencies.
  • Incremental updates to bundled GLM, pugixml, and Android validation layer libraries (I7d74b42f762f0ee7972fa8ad381f7aec502c19ed) and glslangValidator (glslang version: 7.8.2853).
  • Improved selection of xlib/xlib-xcb/xcb for Vulkan.
  • Removed error-out, and defined suitable flags to GLM to allow building (in pure mode – no SIMD) on older APPLE compilers.

PVRVFrame v10.9

  • New: Correct support for sRGB.
  • ES 3.x contexts are now elevated to ES 3.2 to replicate the behaviour of PowerVR drivers.
  • Bug fix: Fixed glGetProgramResourceIndex so it returns the correct index value.
  • Bug fix: Fixed glSampleCoveragex which was not correctly handling value.
  • Bug fix: Fixed a bug in shader translation where PLS variables were not being converted correctly when used as an argument.
  • Bug fix: Fixed a rare case of textures becoming unmapped when using glCopyTexSubImage.
  • Bug fix: Fixed vertex attributes not being tracked correctly when using glVertexAttribIPointer.
  • Bug fix: Fixed a crash in EGL initialisation on macOS.

PVRTune v14.146

  • New: PVRPerfServer can now be deployed and launched automatically to Linux (via ssh) or rooted Android (via adb) devices from PVRTune GUI. Users can now “click and connect” instead of installing PVRPerfServer manually.
  • PVRPerfServer command line options can be set from the connection window before a connection is established.
  • “Sort by name” and “sort by reference” have been added back to the Timelines window.
  • Updated: The Monitor window now allows switching between the (default) Bar and Graph view. The new Graph view displays the critical loads as a graph rather than an averaged bar.
  • New: Statistics Report window, which can be accessed via the Monitor window. Statistics Report has two modes: Frame and Range.
    • Frame mode: PVRTune consolidates an entire frame’s worth of data into a manageable layout for inspection. It also displays critical counters over the range defined by the frame. Selection of the frame can be made from the timing graph.
    • Range mode: PVRTune displays counters for a user-defined selected range on the timing graph. This data may also be exported to JSON.
    • Export to JSON is also available via the command-line with these new options:
      • --frame
      • --export-json-reportstats-frame –frame) to JSON>
      • --range-start-us
      • --range-length-us
      • --export-json-reportstats-range –range-start-us and --range-length-us) to JSON>
  • Updated: GPU memory counters as follows:
    • “GPU memory read words per second” has been renamed to “GPU memory read bytes per second”. The value now represents bytes instead of words.
    • “GPU memory write words per second” has been renamed to “GPU memory write bytes per second”. The value now represents bytes instead of words.
    • “GPU memory words per second” has been renamed to “GPU memory total bytes per second”. The value now represents bytes instead of words.
  • New: GPU memory counter:
    •  “GPU memory interface load” – the counter value represents the percentage of GPU memory bus utilisation, which is the interface between main memory and SLC. This is derived as: (total bytes read + total bytes written) / theoretical peak bus transfer rate.
  • Significantly reduced the amount of packet loss over networked connections when large amounts of data are being streamed to the client.
  • Bug fix: When using the command-line, PID and RTData colour tips are now shown on timing data.
  • PVRScope:
  • New: There is now a Mark on the timing graph when the connection name is received, and when the connection is gracefully closed.
  • New: There is now a time range indication that the connection was live, based on the events received.
  • Client and Scope timeline names are now clearer.
  • libPVRScopeServices.so fix for Linux, now linked to runtime.
  • PVRTune Complete only:
    • New: Support for Vulkan and OpenCL client streams and events subject to DDK compatibility. See the user manual for a full list of supported API events.
    • New: Timeline showing Vulkan Debug markers.
    • Device information (variant, series, clock corrections) and any warnings are now displayed even when there is no HW stream – for example: NoHW drivers.
    • Device warnings are now displayed when a PVRTune instance disconnects/reconnects to the same file/server.
    • “Cycles per*” counters no longer use a fixed number of 16 for the number of ALU pipes. They now use a new per-BVNC capacity: “eCapALUPipes“.
    • When exporting counter definitions to CSV, the description is now written last, and any newlines are converted to two characters.
    • TA kick event properties now show the draw call count. This is the number of draw calls that were grouped into the TA kick task.
    • TA kick reason will show “eglSwapBuffers” if the TA kick was caused by a call to eglSwapBuffers.
    • New: Support for two new Host (kernel module) stream packets:
      • Host Device Info: shows the current device health status
      • Host Info: shows the per-PID driver memory usage statistics.
    • New: Host memory usage counters, which are only available when Host Info packets are enabled in PVRPerfServer and supported by the DDK:
      • Total Host Memory Usage
      • Graphics Memory Usage (per-PID)
      • Kernel Memory Usage (per-PID)
    • Bug fix: Queued tasks could be incorrectly identified as a HWCore task.

PVRGeoPOD v2.25

  • New: Support for 3ds Max 2019.

PVRTrace v3.12

  • Player: New: --timestamp-calls command-line option that will print out a timestamp before the defined calls are played.
  • Player: Bug fix: Fixed an issue where playback of glReadPixels would be skipped in some instances.
  • Player: Bug fix: Fixed playback of glGetInternalformativ.
  • Brought the exported shader filenames inline between the player and the GUI.

PVRCarbon v0.2

  • New: OpenGL ES support.
  • Recorder: New: Frame delimiter option to control how the recorder splits an application into frames.
  • Recorder: New: Disable shader binary option.
  • Recorder: New: Options to override vendor, version, and renderer strings.
  • Recorder: New: Option to disable extensions at record time.
  • Recorder: New: Option to define the location of libEGL and libGLESv2 on the host system. If undefined, PVRCarbon will attempt to locate them.
  • Recorder: Renamed exitAfterPresent option to exitAfterFrame.
  • Recorder: Updated to Vulkan version 1.1.83.
  • Recorder: The prefix for options when set as android properties is now “pvrcbn.” instead of “pvrcarbon.“.
  • Player: New: --timestamp-calls command-line option that prints out a timestamp before the defined calls are played.
  • Player: New: Exporting to debuggable C++ code now supports multi-threaded recordings.
  • Player: The cpp exported code now copies the data and shaders to the executable folder at build time.
  • Player: Implemented the display surface path in the C++ exporter for the generic create_surface implementation.
  • Player: The C++ exporter will now correctly set up the displaymodes and their displays.
  • Player: Added fallbacks for VK_FORMAT_S8_UINT and VK_FORMAT_D16_UNORM_S8_UINT if they are not supported.
  • Player: Added NvOptimusEnablement and AmdPowerXpressRequestHighPerformance exports to tell the AMD and Nvidia drivers to use the most powerful GPU if multiple exist.
  • Player: Bug fix: Fixed a crash that could occur if the expected data file is missing.
  • Player: Bug fix: When detecting if PVRTC is supported, the extension is now correctly checked for.
  • GUI: When exporting to C++, all the files will now be exported to a unique folder in the location selected.
  • GUI: Added support for remotely recording a debuggable application on Android via adb.
  • GUI: Bug fix: Fixed dependency generation for GetDisplayModePropertiesKHR
  • GUI: Bug fix: Fixed dependency generation for GetPhysicalDeviceDisplayPropertiesKHR
  • GUI: Bug fix: Fixed a crash that could happen when closing.
  • GUI: Bug fix: Fixed a possible infinite loop that could occur when using the remote recorder.
  • GUI: Bug fix: Fixed exporting of spv files.


  • Updated the “Contact Us” page in all user manuals to reflect latest links and support pages.
  • Improved readability of Performance Recommendations, Golden Rules, Compute, Navigation Techniques, Low level GLSL Optimisations.
  • Improved readability, and information about new features with the PVRTune user manuals.
  • Improved appearance and readability of SDK Browser.

PowerVR Tools and SDK 2018 R1

Framework v5.1


  • The Framework now supports Vulkan Memory Allocator (VMA) directly. VMA can be used for memory allocation by all internal utilities that create buffers or images, the examples, and the UIRenderer.
  • In PVRVk the Vulkan per-device function pointers have been moved from the global scope to each device. This helps where multiple devices from different vendors are used. Previously only a single physical device could be automatically supported at a time.
  • A CMake build system has replaced the project files. Android, iOS, Windows, Linux, QNX, and macOS continue to be supported, but other platforms will be easier to add. Also working across platforms is now easier. Due to the nature of Android, gradle scripts are provided, and make use of the same CMake files all other platforms use. The Framework modules and Examples can still be built individually or together using a top-level CMakeLists.txt, or a gradle that builds the entire SDK.
  • Refactored the Framework to use exceptions instead of return codes to signify errors, giving the developer absolute control of error handling. This streamlines areas throughout the SDK, including reducing the complexity of the examples, and removed the necessity for checking and propagation of return codes. Runtime exceptions not caught earlier are ultimately caught by PVRShell which displays their error message and exits, providing a very powerful prototyping debugging tool.
  • When running debug builds with a debugger attached, a debugger break is executed when an exception is encountered. Developers can immediately inspect the call stack of the error, or choose to move on.
  • Restructured the SDK folder structure to make it shallower, simpler and more familiar. The old Builds folder is gone and replaced with /include, /libs and /res folders in the root of the SDK. Examples are separated into OpenGL ES and Vulkan, so developers can easily see those of interest.
  • Comment-based documentation for our beginner examples HelloAPI and IntroducingPVRShell for Vulkan have been reworked. These can now be treated as a complete walk-through of the Vulkan API with step-by-step explanations, including the difficult but important parts such as correct frame synchronisation and texture loading.
  • Added support for VK_EXT_DEBUG_MARKER and VK_EXT_DEBUG_REPORT. Objects can now be easily named in PVRVk, with their user-selected names shown in debugging applications. An exception can be thrown on layer errors if required.
  • Upgraded the sprite rendering library, PVRUIRenderer, to use Indirect Drawing. This allows the developer to modify text elements at runtime without a need to re-record its command buffers.
  • Added a Navigation 3D example for Vulkan and OpenGL ES, showing techniques helpful for navigation such as frustum culling.

Fixes & Enhancements

  • Improved PVRVk and PVRUtilsVk separation. Some functionality previously in PVRVk has been moved to PVRUtilsVk. This minimises non Vulkan specific functionality in PVRVk, and makes for a thinner wrapper on top of Vulkan. Developers who intend to only use PVRVk may find this a better map to raw Vulkan.
  • OGLESPVRScopeRemote had a mistaken additional call to executeCommands() removed, identified from unexpected results in PVRTune.


New Documents

  • Migrating from OpenGL ES to Vulkan document

PVRHub v3.5

  • Fixed installation of PVRTrace on Android Oreo 8.1.
  • “PVRTune Config\Per-process CPU usage data” is now enabled by default. This controls whether PVRPerfServer will retrieve and send the following per-process (per-PID) information: executable names, CPU usage and memory consumption.
  • Linux scripts now create symbolic links to the PVRTrace libraries for common driver names.

PVRTrace v3.11


  • Fixed a potential crash on Windows if PVRTrace is loaded after rendering threads are created.
  • Now works with Android P.


  • Fixed potential stack overflow that could occur when jumping frames.
  • Captured Android native buffers (EGL_NATIVE_BUFFER_ANDROID) can now be played back on Linux (with EGL_LINUX_DMA_BUF_EXT) using DRM dumb buffers.
  • Fixed loading of trace files that contain ES 3.2 calls.
  • Fixed playback issue in glCopyImageSubData where the src and dst names were 0.


  • Fixed a bug in the export to txt feature where threadIds would be written incorrectly.

PVRVFrame v10.8

  • Fixed an issue in the emulation of glFramebufferTexture2DMultisampleEXT where the attached texture would not be drawn to.

PVRGeoPOD v2.24

  • Added support for Physically Based Rendering (PBR) materials for 3DSMax and Blender. This includes Metalicity, Rugosity, and IOR.
  • Added automatic triangulation of all meshes to Blender. This solves the error reported when exporting not triangulated meshes.

PVRTune v14.145

  • Removed the defunct option for automatic timeline hiding.
  • When selecting a task, left and right cursor keys can be used to move between tasks on a timeline.
  • New Graph context menu option: Fade Unrelated Timing Data. If enabled, and a task is selected, tasks which are not in the same group (e.g. Frame number) will be shown in grey.
  • Developers can now choose to enable/disable the coloured sections on the timing blocks such as PID and Render Target.
  • The mouse forward/backward buttons can now be used to undo/redo item selections.
  • Timelines are now presented to the developer as a tree structure.
  • Overhauled the presentation of data in the properties window. Properties window now uses a tree structure which makes browsing the information from various activities much easier and clearer.
  • Frame number 0 will now be grouped.
  • Graphs:
    • Only the top and bottom areas (<0 and >graph_scale) are colourised if also displaying the gradients that indicate the 25%, 50%, 75% quarters.
    • The timeline-separating lines are now full-width, and more translucent.
  • PVRPerfServer: command-line help text reviewed and updated, largely following the suggestions given by http://docopt.org/.
  • The GUI find function can now search the “Timelines” window. The keyword “timeline” can be used to filter search results.
  • Clicking a task will now keep it selected permanently.
  • “Fade Unrelated Timing Data” new feature accessed through the context menu on the graph. If enabled (disabled by default) will desaturate tasks which are not part of the current task grouping.
  • Graph Panes: the highlighted counter is now rendered last to avoid obscuring when rendering counter values under the mouse.

PVRTexTool v4.20.0

  • The imageSize values saved in the mip levels of KTX files now take into account any padding to the data.

PowerVR Tools and SDK 2017 R2

Removed support for 32-bit versions of the GUIs and command-line tools.

Framework v5.0

The PowerVR Framework has a new major version (5.0) and has been largely re-imagined. It is now much more focused on showing the most efficient use for each Graphics API instead of providing a common unified interface between them.
  • Removed PVRNativeAPI, PVRPlatformGlue, PVRApi
  • Renamed PVREngineUtils to PVRUtils
  • PVRUtils now does not rely on the an API abstraction (PVRApi), instead having separate implementations for OpenGL ES and Vulkan
  • Added a new header file loading OpenGL ES and its extensions at runtime without compile time linking
  • Provided a modified Vulkan.h file that is auto-generated from the Vulkan spec, providing strongly typed enums for Vulkan
  • Added the module PVRVk, which is a Vulkan C++ wrapper, very powerful but still completely faithful to the Vulkan spec
  • PVRVk also provides constructors with default parameters, reference counted objects, reasonable class hierarchies and in general making working with Vulkan a breeze
  • Made the debugger break command that is triggered on Assertions to trigger *after* the relevant assertion message has been logged so as to facilitate debugging.
  • Removed a (debug) assertion from RefCountedWeakReference, that would erroneously assert if someone tried to copy-construct a RefCountedWeakReference to an existing object that had been destroyed


  • Added the demo FramebufferDownsample showing how to use the FramebufferDownsampleIMG extension
  • Added the demo TextureFilterCubic showing how to use the TextureFilteringCubicIMG extension
  • Added the demo OpenCLExample, showing how to use OpenCL with OpenGL ES, including image sharing between CL and GL
  • PVRScope User Manual: PVRScopeComms functions take a pointer, not a reference: corrected the code examples.
  • Added a highly optimised 19-tap Gaussian Blur example


  • Fixed installation of PVRTrace on some Android O devices.
  • Updated manual to HTML format

PVRTexTool v4.19

  • Added support for 3ds Max 2018.
  • Updated manual to HTML format

PVRShaderEditor v2.11

  • Updated and unified compilers for PowerVR Rogue architectures. All variant families now share a single compiler binary
  • Resolved various shader compilation crashes and improved internal error handling
  • Added tool to save the compiler binary outputs
  • Fixed launching the application with a file path as a parameter
  • Fixed syntax highlighting preferences
  • Fixed various issues related to setting an empty temporary file path
  • Disabled incorrect handling of macro override for PFX2 files
  • Updated text in new file templates
  • Minor text fixes
  • Updated manual to HTML format

PVRVFrame v10.7

  • Fixed several bugs in shader translator which caused PLS shaders to not compile.
  • Fixed a bug where decompressing unsupported compressed formats may cause a crash if the current GL_UNPACK_ALIGNMENT value is greater than 4.
  • Added a system report page to PVRVFrameGUI.
  • Fixed a bug where an ES 3.1 context could be created even when the selected hardware profile does not support it.
  • Fixed a bug in the conversion of shaders that enable GL_EXT_shader_pixel_local_storage2 and GL_OVR_multiview2.
  • Fixed OVR_multiview emulation on platforms that don’t expose GL_ARB_geometry_shader4 but have a high enough version of GL for support.
  • Fixed shader conversion when the host’s glsl version is less that 430 and imageSize is used.
  • Fixed an issue loading ASTC texture data.
  • Updated manual to HTML format

PVRTrace v3.10

  • Recorder: Added support for EGL_KHR_partial_update
  • Recorder: Fixed a bug with the capture of EGLClientBuffer data of format HAL_PIXEL_FORMAT_YV12 where only half the chroma data was being recorded.
  • Recorder: The capturing of EGLClientBuffer data on Android now supports the new gralloc1 interface.
  • Player: Added support for EGL_KHR_partial_update
  • Player: Fixed loading of glDrawBuffer calls when n is 0
  • Player: The playing back of EGLClientBuffer data on Android now supports the new gralloc1 interface.
  • GUI: Worked around a crash that could occur in rare cases when generating framebuffer attachment images
  • GUI: Added GL_CLAMP_TO_BORDER as a recognised value for the GL_TEXTURE_WRAP_* parameters
  • GUI: Fixed the displaying of the stencil parameters in the state widget
  • GUI: Fixed displaying of the attribute value for eglGetSyncAttribKHR
  • GUI: Fixed displaying of GL_VERTEX_ATTRIB_ARRAY_ENABLED in the state widget
  • GUI: Fixed a bug in the buffer data viewer where data sometimes wouldn’t show up
  • GUI: Fixed a crash in image analysis that could occur in certain situations if glBindVertexBuffer was present
  • GUI: Fixed a crash that could occur if the trace file contained calls to glVertexAttribBinding
  • GUI: Fixed a crash that could occur if the trace file contained calls to glVertexAttribFormat
  • GUI: The values of uniforms of type GL_SAMPLER_EXTERNAL_OES now display in the program viewer widget.
  • Updated manual to HTML format

PVRShaman v2.6

  • Updated manual to HTML format

PVRScope v14.144

  • PVRScope User Manual: PVRScopeComms functions take a pointer, not a reference: corrected the code examples.
  • Updated manual to HTML format

PVRGeoPOD v2.23

  • Added support for 3ds Max 2018.
  • Added support for Maya 2018.
  • Blender: Added support for Custom Normals.
  • 3ds Max: Added support for exporting procedural textures as PVR files.
  • Strips are now stitched into a single one using degenerate polygons. Sending a single strip per mesh is more optimal than sending multiple small ones. This behaviour is now hard-wired and cannot be toggled by the user.
  • Added Cancel button to the export window.
  • Fixed plug-in crash in Maya 2017 for Mac OSX.
  • Fixed strip primitive output that was exporting strips of length one (bug introduced in v2.22).
  • Fixed disabling bone-batching. Now a single bone-batch is exported with the full mapping from node_id to bone indices. Please, refer to the documentation for more details.
  • Fixed exporting skin meshes with more than 4 bones per vertex. The 4 more relevant bones will be moved to these slots.
  • Updated documentation with new sections for Bone Batching and PVR Textures
  • Updated manual to HTML format

PVRTune v14.144

  • PowerVR Series8XT support.
  • CPU:
    • PVRPerfServer now sends and PVRTune can now show the CPU core description. It is shown in the counter description for the per-CPU-core counters.
    • We now track max frequency, current frequency limit and current frequency.
  • Monitor window
    • Fixed the missing counter “components”. E.g. charts will now show the contributions from known/tracked PIDs.
    • Can now click on a counter and the Properties window will update. Just like clicking on a counter anywhere else.
    • Also show the counter source in the item name.
  • Counters
    • Rename counter “texturing load” to “texturing active”. 100% means that it’s doing something 100% of the time, but not necessarily that it is 100% loaded.
    • Describe a “word” in the “GPU memory words per second” counter descriptions.
    • GPU Memory counters now describe the bus width as “(often 16 or 32 bytes)”.
    • Tweak CPU counters created. Distinguish between CPU Active (old CPU Load) and CPU Load (taking into account CPU throttling).
    • Per-PID “CPU load” counters renamed to “CPU active”.
  • Counter Table: fix issue where disconnecting and then reconnecting would cause the counter table to collapse all items.
  • Limit the maximum number of recently used files/servers to 24.
  • No longer disable any of the Open methods during/after connection. We have to be able to handle a file drag&drop at those points in time anyway.
  • Disable “Restore Default Panes” when not connected.
  • Connection Menu: ditch New. Added Android shortcut. Recents: start from Alt+1 because Alt+0 requires very long fingers.
  • Fixed render of stacked Marks trending to black: rather than drawing any & all stacked Marks (which is slower and trends towards black), now calculate an average colour and draw once.
  • Per-task string: re-order data to be more like an address (more specific first, less specific last). Add the word “duration” after the task time. Add the CID name after the CID number, when there is one.
  • Preferences:
    • Slightly simplify an option by inverting it in the GUI, naming it “equal sized timelines” rather than “equal sized timeline levels”.
    • Fix bug where the meaning of equal sized timelines vs timeline levels was inverted.
  • Updated manual to HTML format


  • New framebuffer downsample snippet
  • New cubic filtering snippet


  • Updated PowerVR Performance Recommendations The Golden Rules
  • Updated PowerVR Performance Recommendations
  • New PowerVR Low Level GLSL Optimisation
  • Updated PowerVR Hardware Architecture Overview for Developers
  • Updated PowerVR Instruction Set Reference
  • Updated PowerVR Supported Extensions
  • Updated PowerVR Framework SDK document with all the new Framework (Vulkan) details

PowerVR Tools and SDK 2017 R1

PVR Framework v4.3

  • Replaced the getNativeObject virtual function of all PVRApi objects with a more efficient native_cast function.
  • The PVRPlatformGlue functionality has been wrapped into the PVRNativeApi library, since there is no longer a benefit in separating the window/surface creation part of the API from the rendering part. This greatly simplifies several aspects of both libraries.
  • Cleaned up PVRNativeApi code to make calling utility functions more intuitive.
  • Added support for multiple queues and queue families, with an algorithm for assigning a number of different queues for different reasons based on what is available on the platform.
  • Added multithreading support to the Framework, allowing a simple interface to create Shared contexts for OpenGL ES, or multiple Queues for Vulkan. Also provided loader and uploader classes for easily loading textures from different threads.
  • Added two asynchronous loading classes to the Framework, allowing easy asynchronous streaming of Textures and potentially other assets.
  • Moved all utilities that use the PVRApi abstraction into a new PVREngineUtils module, as well as the UIRenderer. Removed the old PVRUIRenderer module.
  • Added some missing std::forward calls in the RefCountedResource that would have prevented “perfect forwarding” of parameters to the construct functions. Perfect forwarding now works as expected.
  • Added a helper function to create suitable Sampler object for sampling the hardware camera Texture provided from a CameraInterface object. Fixed the wrapping mode to Clamp as it was wrongly left to default Repeat.
  • PVRCore, having grown quite a bit since the original release, has been restructured into different folders. Top-level items are still available in the Core folder, whilst individual files can be accessed from the folders labelled Base, DataStructures, Interfaces, IO, Logging, Math, Strings and Texture.
  • PVRNativeApi and PVRApi have been decoupled from PVRAssets by moving the Texture code (except loaders) from PVRAssets to PVRCore. Removed other dependencies from PVRNativeApi and PVRApi, so that PVRAssets now only depends on PVRCore.
  • Added the DepthBias feature – that was only implemented for Vulkan – to OpenGL ES.

PowerVR SDK v4.3 Examples

  • Returned the Camera Interface examples to use target Android level 22 instead of 24 in order for the system to not expect runtime permissions in android Marshmallow/Nougat systems.
  • Changed the HelloAPI Vulkan examples to use FIFO (vsync) instead of MAILBOX(triple-buffering) as the former has much better battery economy. Changed the running time to 600 frames (usually 10 seconds).
  • Added an additional condition in the Skinning PFX to additionally ensure that only tangent-spaced models get rendered with the skinning/bumpmapped model.
  • Fixed a race condition in GnomeHorde that might cause a deadlock in some circumstances.
  • Added a new example (Multithreading) showcasing how to use the Framework asynchronous loaders to do a loading screen or other asset streaming use cases.

SDK v4.3 Builds

  • Updated the platform headers to properly support the latest Android NDK.

PVRTrace v3.9

  • Added OpenGL ES 3.2 support.
  • Added the following extensions: GL_OVR_multiview, GL_OVR_multiview_multisampled_render_to_texture and GL_OES_viewport_array.
  • PVRTraceGUI: Fixed saving out of trace files which was broken in the previous release.
  • The width and/or height of a window surface is now updated during eglMakeCurrent calls if either dimension is larger than at any previous point during the recording period.
  • The glProgramBinary call no longer throws a GL_INVALID_ENUM error when DisableBinaries is enabled. Instead, the call fails without error, as if the binary has become incompatible with the driver.

PVRTune v14.143

  • If there is a server name mismatch, warning pop ups will appear.
  • Correct counter descriptions: Times are always scaled to seconds, but the descriptions were claiming times are in milliseconds.
  • Now index parameter management out of memory events from the TA and highlight them in black.
  • Add a total memory (read + write) words/sec counter: GPU memory words per second.
  • “File\Export\Export counters to CSV…” no longer includes empty columns.
  • Counter Table: If there are no HW counter groups, counters are shown. E.g. SGX544 using old DDK branches 1.7 and 1.8 were needlessly missing counters generated from timing data. Only counters sourced from HW counters should be missing.
  • Counter default colours:
    • Options window: new option to choose the default counter colours. This can be set to default (ie previous behaviour), a fixed palette of 32 or a fixed palette of 16.
    • If the setting is changed, counter colours are set to the new defaults immediately.
    • Counter colours can still be overridden manually.
    • PID colours are unchanged (ie they use the default behaviour).
  • Increased width of colour icon. These are used for counters, PIDs and timelines. Removed the subtle gradient.
  • Graph panes: The user can now choose whether or not to show the ruler, using the right-click context menu. Timing data and graphed counters will no longer overlap the ruler, but text will; hence showing the ruler allows more space to display text about items under the mouse pointer.
  • New docking windows list all Timelines, each with a tick box to control visibility. Also display an icon with the timeline colour, if there is one. If Timing or Marks are enable, only render power/state data is shown in the background, while the UI timeline labels are shown on the left.
  • PID docking window: Now allows sorting by column.
  • PVRScope Android build now builds both a static library and also a dynamic library.

PVRVFrame v10.6

  • Added support for EGL_EXT_client_extensions and EGL_EXT_platform_base.
  • Fixed a bug on Linux where no multisampled framebuffer configurations were being generated.
  • Fixed a crash which occurred when setting an attrib divisor without an attribute array.
  • Fixed a possible crash in case where context is made current after its shared context is deleted.
  • Fixed a bug where no default VAO was generated for shared contexts.
  • Fixed support for GL_OES_EGL_image.
  • Fixed a bug where the current program was being incorrectly stored as shared state.

PVRHub v3.3

  • Fixed crash when an activity cannot be found to view the PDF user manual.
  • Added a PVRTrace config option to disable shader and program binaries (on by default).
  • Added a PVRTrace config option to record the names of calls to unknown extension functions (on by default).
  • Added a PVRTrace config option to exit after the last frame is recorded (on by default).

PVRGeoPOD v2.22

  • Added support for Adjacency Lists to be used in geometry shaders.
  • Added support for half-float vertex type.
  • Added option to not export hidden objects.
  • Added a switch to disable bone batching. This allows exporting any number of bones without splitting the mesh.
  • Updated documentation with new features and a clearer explanation on how to install the plug-ins manually.
  • Removed automatic pointer focus when hovering over vertex type combo-boxes. This avoids the common mistake of setting unexpected formats for the vertices when scrolling the view.
  • Standalone version can have now file-association with the formats FBX, DAE, 3DS, DXF and OBJ.
  • Relaxed check for iGame version. This will allow the plug-in to work on newer released updates to 3DSMax.
  • Maya Plug-in: Added QT libraries to the package. This solves a crash on MacOS when the plug-in was trying to use the custom QT libraries bundled with Maya.
  • Stand-alone FBX:
    • Fixed child-object position when parent pivot position is not the default.
    • Fixed problem when exporting normals per control point. It was generating too many vertices with the wrong normal values instead the real shared normal.
  • Renamed Triangle Sorting methods to make them more meaningful and added a fast stripping method.
  • Fixed default window width to accommodate the profiles list more comfortably.
  • Blender plug-in for Linux. Fixed hang after export.
  • Enhanced Geometry Settings interface. Now optimisations are fully controlled by the user instead being triggered by PVRGeoPOD itself.
  • 3dsMax plug-in. Removed folder called 15 as all versions of 3dsMax up to 2017 are supported.
  • Updated the documentation with the new features, and a clearer explanation on how to install the plug-ins manually.
  • Updated POD Format Specification to account for new blocks (6021 Mesh Type and 6022 Adjacency Index List).

PVRTexTool v4.18

  • Added a Vulkan API format filter to PVRTexToolGUI.
  • Added helper functions to PVRTexLib to convert to and from Vulkan format enums.
  • PVRTexToolGUI now outputs B10G11R11 instead of R11G11B10, as this is the actual format in the supported APIs. This matches the GL_RGB/GL_UNSIGNED_INT_10F_11F_11F_REV combination in OpenGL and DXGI_FORMAT_R11G11B10_FLOAT in Direct3D.
  • Added plug-ins for 3DSMax 2016 and 2017.
  • Added plug-ins for Maya 2016 and 2017.

PVRShaderEditor v2.10

  • Added new compilers for Series7XT, Series8XE, and the Khronos reference compiler for SPIR-V.
  • Added support for PFX3 format.
  • Widgets are now all dockable/undockable.
  • A syntax mode switcher has been added to the status bar.
  • Improved the intuitiveness of the compiler selection UI, especially when switching tabs.
  • Added a series of back-end compiler improvements, so compiler crashes are handled more gracefully.

PowerVR Tools and SDK 2016 R2


  • Added builds for ARMV8 (64bits).

PVR Framework v4.2

  • New Features
    • PFX Specification 3.0, a complete overhaul of the PFX specification allowing a full description of a rendering situation including passes, subpasses, different auto or manual selected pipelines, buffer or uniform specifications and others. See Skinning example.
    • RenderManager (beta), a new class designed to utilize the new PFX spec for almost completely automated rendering. See Skinning example.
    • Added direct support for hardware Bicubic filtering (GL_IMG_cubic_filtering) to the Framework.
    • PVRApi: Added references to all objects that are used in a CommandBuffer or DescriptorSet, so that keeping external references to these objects is no longer necessary. Affected objects: Buffers, Fbos, DescriptorSets, SecondaryCommandBuffers, Textures etc. Any object that is used in a command recorded in a command buffer will automatically be kept alive with reference counting until the command buffer is reset/rerecorded, as will any object that is added into a DescriptorSet.
    • Added a command line option to contol the logging output (-loglevel=[critical,error,warning,information,verbose,debug]).
    • Changed the EGL Create Context functionality to try out a lot more detailed configurations when trying to create a context.
    • Added Tessellation capability, fixed support for loading tessellation shaders, added proper shader types for tessellation control and evaluation shaders.
    • Updated the Vulkan upload texture code so that it uses Buffers (instead of images with VK_IMAGE_TILING_LINEAR, that may not be supported in some platforms) as staging for uploading texture data from disk.
    • Changed the way descriptor set binding ids are interpreted. Previously, each binding had to be unique, which might cause problems (running out of id’s) in OpenGL ES, for uniformity with Vulkan. Now, the user can use the full range of bindings for each object type in OpenGL ES. The Framework will allow reuse of bindings and it is up to the user to use the strategy that works with the API he targets.
    • Updated Android projects to use Gradle 2.14 (improve build times and stability).
    • Updated the bundled header files to latest available versions.
    • Added a full PowerVR Framework Development Guide document.
  • Bug Fixes
    • Fixed a bug where the size of the OpenGL ES implementation of pvr::api::Texture would not get its dimensions properly set when loaded from a file.
    • Fixed a bug with iOS touch input.
    • Fixed a bug where the array slices were calculated wrongly when loading Cubemaps in Vulkan
    • Fixed a bug in the CommandBuffer::beginRenderPass overload which takes single clear color to clear all the color attachments of an fbo.
    • Done a tweak in the Shell where if ExitRenderFrame or ExitShell were called, main() would return with code 1 instead of 0.
  • Interface Changes
    • Fixed a bug in the order/usage of CommandBuffer::DrawIndexed call, where for the OpenGL ES implementation, the Vertex Offset parameter was actually used as an Index offset (first index) and the firstIndex was ignored. Now, the IndexOffset is ignored, and if VertexOffset is used in an OpenGL ES context, an assertion is thrown.
    • Changed the addAttachmentState function from implicitly assigning consecutive attachment indices to setAttachmentState which explicitly takes the assignment index.
    • Renamed the GraphicsContext::getCurrentSwapChain() function to getSwapChainIndex(), like it is in the Shell class.
    • Removed the GraphicsContext from the UIRenderer init(…) interface, since it can trivially be inferred by the RenderPass.
    • Changed the updateBuffer interface to better map to both Vulkan and OpenGL ES. Now, on buffer creation, instead of a “hint”, buffers will take a “mappable” flag which indicates if the user requires a client-side mappable buffer.

PowerVR SDK v4.2 Examples

  • Demos ported to the Vulkan API
    • DeferredShading: demonstrates how to use multiple subpasses with framebuffer attachments using local memory.
    • ParticleSystem: Compute physics.
    • ExampleUI: Advanced 2D Techniques.
    • PostProcessing: Simple multi-pass rendering demo.
    • Glass: Advanced multi-pass rendering demo.
    • PVRScopeExample: Reading and displaying GPU hardware counters.
    • PVRScopeRemote: Information interchanges between application and PVRTune.
  • New demo: OpenGL ES Multiview VR (Showing the Multiview extension for OpenGL ES).

PVRGeoPOD v2.20

  • Standalone (CL/GUI)
    • Added support for Autodesk FBX Format (*.fbx).
    • Added support for Autodesk 3DS Format (*.3ds).
    • Added support for Autodesk AutoCAD DXF Format (*.dxf).
    • Added support for Alias Wavefront OBJ Format (*.obj).
    • Enhanced support for Khronos COLLADA Format (*.dae).
  • Optimsed the building of the edge list to speed up the sorting optimisation.

PVRHub v3.2

  • Added better detection of rooted devices.
  • Support for Android N.

PVRShaderEditor v2.9

  • OCL Occupancy Calculator. A new tool to visualise how changes to OpenCL kernels would theoretically affect performance on hardware.
  • Enhanced compiler configuration widget
    • Per shader configuration.
    • o Now more flexible and robust when handling external compilers.
  • Added the Khronos reference GLSL compiler.
  • Removed the ‘Optimise’ function which is now obsolete due to improvements to our offline compilers.
  • New tabs are now correctly given focus.
  • Keyboard tab key is no longer bound to ‘Open Find Dialog’ command.
  • Multiple instances of PVRShaderEditor should now open correctly.
  • External changes to a file are now detected correctly.
  • Fixed issue where Windows user names which included whitespaces would prevent the compilers from executing.

PVRShaman v2.4

  • Fixed crash when calculating the bounding-box and vertex data was not interleaved.
  • Built-in shader editor and profiler now exclusively handles PFX files.

PVRTexTool v4.17

  • Now supports PVRTC compression of textures with dimensions larger than 4096 pixels.

PVRTrace v3.8

  • Recorder
    • Added advanced config option “UniformBufferOffsetAlignment” to the “Tracing” section that allows the user to override the returned value of GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT and GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT. The value must be a multiple of the platform’s values and should be used when the value on the recorded device is different to the device you wish to playback/analyse on. To use the platform’s alignment do not define this value.
    • Moved the DisableBinaries config option to the Tracing section of the config.
  • Playback
    • Fixed the –optimised-memory option.
    • Fixed the –delay option on Linux.
  • GUI
    • Added option to specify the frame delimiter choosing from a list of suitable API functions.
    • Fixed a bug in the frame caching where the render would fail if we failed to compress the rendered image.
    • Frame caching now correctly gets refreshed when disabling/enabling calls.
    • Disabling the render caching now correctly takes affect straight away instead of the next time a trace file is loaded.
    • Fixed the formatting of hex object names in the ObjectDataViewer title so they match the formatting in EGLState widget.
    • Fixed a lock up when exiting on some Linux devices.
    • Fixed a crash that could occur when using network recording.
    • Added all currently known values of EGL_LINUX_DRM_FOURCC_EXT to the egl attributes to string functionality.

PVRTune v14.142

  • Added “File\Export\Export counters to CSV…”. This allows the user to enter a period in milliseconds; PVRTune calculates the counter values using the specified period and writes to a CSV file. New PVRTune command-line options: –periodms, –export-csv-timing, –export-csv-counters.
  • Remove counter “triangles culled”.
  • Add counter “Triangle ratio”, this is TA tris out / tris in. Affected by culling and clipping.
  • Add counter “slot occupancy”.
  • It is now possible to search for dynamic Marks.
  • “Connection\Close” now has a keyboard shortcut of Ctrl+D. Convenience; “Disconnect”; End-of-Transmission character (EOT). (Was Ctrl+C, but this is normally used for copy & paste.)
    • It’s no longer necessary to “right-click, copy”, Ctrl+C now works for that.
  • PVRTune main window startup: now test whether the restored geometry is on screen. If not on any screen: place the window automatically.
  • PVRPerfServer: handle the case where the OS CPU and memory usage counters may not have progressed if we are reading at a greater rate than CONFIG_HZ.
  • PowerVR GX6650 devices: fixed missing device information in “PVRPerfServer Details” dialog box, and missing counters: 2D active, Compute active, Renderer active, Tiler active.
  • PID window
    • Fix properly showing PID colour-icons and a possible crash.
    • Fix a possible Ctrl+C crash.
  • Counter Table: using the keyboard cursor keys to move up and down the list now updates the Counter Properties window, just like when clicking on a counter.
  • Can now use the Edit menu to choose between three clock transform algorithms: Auto, DDK or Specified Clock Speed. The default for “new enough” Rogue drivers is now DDK, otherwise the default is Auto.

PVRVFrame v10.5

  • Improved performance of draw calls.
  • Fixed a bug which caused memory growth when using glDebugMessageInsert.
  • Fixed a bug where eglCreateContext would erroneously check for the presence of ARB_buffer_storage when an ES 3.1 context was requested.
  • Fixed a possible invalid memory access in eglCreateSyncKHR.
  • Fixed GL_TESS_EVALUATION_SHADER and GL_TESS_CONTROL_SHADER not being accepted by glCreateShader.

PowerVR Tools and SDK 2016 R1.2

PowerVR SDK v4.1.2

  • Fixed a bug in iOS touch input where it could sometimes be very difficult to register a touch due to very small allowed pixel distance.
  • Fixed a bug in the VulkanBumpmap example where Samplers were local and allowed to be destroyed while still in use.
  • Changed the SwapInterval / VSync strategy to map better between OpenGL and Vulkan. The -vsync command line parameter now works with either (On, Off, Relaxed, Mailbox, Half) methods, or with SwapInterval numbers of (0,1,2,-1). Half is not usually supported on Vulkan (and will map to On), Mailbox is not usually supported in OGLES (and will map to Off).
  • The Framework static library prebuild binaries are no longer packaged with the SDK to reduce package size.

PVRTune v14.141.1

  • New PVRScope API: PVRScopeReadTimingData(). This function can be called periodically if you wish to access the start and end times of tasks running on the GPU. The first time this function is called will enable the feature; from then on data will be stored. If you wish to call this function once only at the end of a test run, call it once also prior to the test run.

PVRShaman v2.3.1

  • Fixed failure to start on OS X due to missing QT library.

PowerVR Tools and SDK 2016 R1.1

PowerVR SDK v4.1.1

  • Re-introduced and enhanced the workaround for EGL context report on systems that claim overoptimistic capabilities.
  • Several stability and memory corruption issues fixed for OpenGL ES and Vulkan.
  • Fixed a double-delete bug and made the object wrapper destructors more defensive.
  • Changed Linux builds default optimization level from O3 to O2 as this was causing instabilities with some GCC versions. This fixes pre-built demo binaries for Linux.
  • SDKBrowser: Updated ReleaseNotes to reflect 2016 R1 and R1.1 releases.

PVRVFrame v10.3.1

  • Fixed “strict” mode due to it being too strict, which caused issues on some AMD graphic cards.


  • Updated Windows signature to SHA-2. This will stop the “The signature is corrupt or invalid” message.

PowerVR Tools and SDK 2016 R1


In our first release of 2016, we have provided a host of new fixes and updates – including a fully functioning Vulkan backend for the PVR Framework. The Framework itself consists of a light-weight abstraction layer, as well as utility functions, that provide explicit control of Vulkan whilst reducing the amount of code required to render a scene. It features, among other things: utilities for common tasks, such as object creation and asset uploading (e.g. mesh loading & pipeline baking), simplified object lifetime management, and cross-platform setup. It also includes the GnomeHorde demo, specifically created to show multi-threaded command buffer management for Vulkan. Builds
  • Added support for the MIPS r6el toolchain.
PVRFramework v4.1
  • Brand new fully functioning Vulkan Backend.
  • PVRCore:
    • New Embedded Refcounted Pointer allows better integration in several cases that need to have awareness of their refcounting and/or have to provide smart pointers to themselves.
    • Frustum class with frustum querying/culling functions to facilitate visibility tests.
  • PVRApi:
    • PVRApi has been broken into PVRNativeApi (the OpenGLES/Vulkan bindings) and the rest PVRApi (the API abstraction).
    • Several API objects had their implementations updated to correctly work with Vulkan.
    • Functions that create objects that are allocated from Pools have been moved from the Context to the actual Pool objects.
    • Numerous CPU-side performance/memory optimisations.
    • Textures and TextureViews had their interface changed slightly (Swizzling is now part of the view, Allocation is part of the texture).
    • Pipeline Creation had its interface tweaked to work with Vulkan (RenderPass/SubPass is now passed to the Pipeline as a parameter).
    • Some objects (Context, Pool) updated with the new embedded refcounting strategy.
    • Utils: a new StructuredMemoryView class allows storing the layout of UBOs and similar objects whose structure needs to be known to be updated. Supports providing custom pointers or connecting with buffers for auto-mapping/unmapping.
    • Texture upload util function also return de-compressed format and boolean indicating whether the texture has been de-compressed.
    • Framebuffer ColorAttachmentView and DepthStencilAttachmentView are now being removed and instead the Fbo uses the TextureView as their attachment.
  • PVRUIRenderer:
    • PVRUIRenderer needs the render pass and the subpass at the initialization.
  • PVRNativeApi:
    • Texture upload util function return de-compressed format and boolean indicating if the texture has been de-compressed.
  • Gnome Horde: A demo specifically created to show a strategy for multi-threaded command buffer creation for Vulkan.
  • Ported to Vulkan: HelloApi, IntroducingPVRShell, IntroducingPVRAssets, IntroducingPVRApi, Bumpmap, Skinning, Deferred shading.
PVRTexTool v4.16
  • Library: Fixed BRN58175. Declared and defined an empty default destructor for PVRTextureHeader to prevent the compilation of a default destructor in the linking binary.
PVRShaderEditor v2.7
  • ShaderEditComponent: Fixed an issue where the compiler process was timing out early, and no output would be retrieved.
  • The compiler executable is now selectable per tab.
PVRVFrame v10.3
    • Added support for EGL_KHR_create_context_no_error.
    • Added support for GL_KHR_no_error.
    • Fixed eglMakeCurrent returning EGL_BAD_ALLOC when requesting an ES 3.2 context.
    • Fixed EGL_BAD_MATCH being reported when explicitly requesting an ES 3.2 context.
    • Fixed a case where shaders may fail to translate when the host GLSL version is less than 330.
    • Fixed possible shader translation failures when using instancing or uniform blocks.
    • Fixed a bug where shaders might fail to translate when the host GLSL version is less than 150.
    • Fixed a possible crash on Linux during context creation when GLX_ARB_create_context is not available.
    • Fixed EGL_BUFFER_SIZE sometimes being initialized incorrectly on Windows (BRN57130).
    • Fixed error checking in glInvalidateFramebuffer and glInvalidateSubFramebuffer (BRN58009).
    • Stopped erroneously reporting support for GL_IMG_shader_binary and GL_IMG_program_binary.
    • Fixed a bug in OES_required_internalformat support where some internal formats weren’t being accepted.
PVRGeoPOD v2.17
      • 3DSMax: Added support for 3DSMax 2016 SP2 (igame version 18.6.667.0).
PVRTune v14.141
      • Added counter: “ISP pixel load”.
      • Added “Overdraw” counter.
      • Hide counters for cores that the HW does not have.
PVRTrace v3.7 PVRTraceGUI
      • Added string representations of enums defined by EGL_EXT_image_dma_buf_import and EGL_IMG_image_plane_attribs .
      • Added a progress bar to show the progress of image analysis. This implements BRN49610 and BRN58206.
      • Added enums from GL_KHR_no_error and EGL_KHR_create_context_no_error. This fixes BRN56048.
      • Fixed a bug that caused image analysis to fail when interrupting the analysis.
      • Pixel analysis by default now works on the whole frame and not just up to the scrubber. An option is available in the preferences to make the pixel analysis work along with the scrubber.
      • The find results widget now becomes visible when a search is started. This fixes BRN58413.
      • Added support for viewing buffer object data in hex format.
      • Image analysis renders are now cached for all renders that don’t require pixel analysis. The caching can be enabled/disabled in the preferences.
      • We no longer do highlighting in single primitive mode if it isn’t the single primitive we’re showing.
      • Added support for EGL Displays and GLES Samplers to the object data viewer.
      • When viewing a program object you can now see the values of uniforms (only if the trace file was recorded with 4.0 or later).
      • Added a Call Hierarchy widget which will show you all the calls the current call/object depends on at that point in time.
      • Added options to save out the pixel analysis table data.
      • Memory barriers will now display GL_ALL_BARRIER_BITS if that is what it is set to.
      • Program stages will now display GL_ALL_SHADER_BITS if that is what it is set to.
      • Fixed playback of separate shader objects.
      • Tweaked the Draw Call List widget design to better accommodate separate shader objects.
      • Under the EGL Objects tabs EglImages are now split by target.
      • We now recognise extension GL_EXT_texture_sRGB_decode.
      • Fixed the function quick help for glUnmapBuffer.
      • Fixed the loading of ES1.1 trace files that do matrix operations using the default matrix mode.
      • Fixed a bug where it was possible to have an empty EGLSurfaces header in the EGL Objects list.
      • You can now copy search results to the clipboard by right-clicking on the Search’s heading and choosing copy.
      • Added command-line option “–render-offscreen” that will render to an offscreen framebuffer object instead of the draw surface.
      • Saving screenshots now adequately takes into account the packing alignment and pixel pack buffers.
      • Added command-line option “–print-object-mapping” which will print the mapping between recorded object names and playback object names.
      • Added .pvrtrace to the recognised file types for the OSX playback.
      • Modified the usage of the command-line option “–save-frame-buffer” so it takes an optional range of frames to output instead of the output location. If you wish to define an output location for the framebuffers you can define it with “–output=”.
      • Fixed the displaying of the filesize for files above 2147483647 bytes. This fixes BRN58259.
      • Added –override-shaders command-line option that will allow you to modify shaders. On first run this command-line will dump out the shader to the location of the trace file. On subsequent runs the shaders will be loaded and used during playback. This implements BRN58130.
      • Added command-line option –export-saved-frame-buffers that exports the framebuffers saved in the trace file. This implements BRN58141.
      • Added command-line option –disable-no-error which disables the use of EGL_KHR_create_context_no_error and GL_KHR_no_error during playback. This implements BRN56049.
PVRTrace Recorder
      • The message “Recording… Current frame” is now correctly output for frame 0.
      • Fixed a bug in the config attribute querying code that could have made the following call return an error of EGL_BAD_ATTRBUTE.
      • Optimised recording of glUnmapBuffer. Buffers mapped with GL_MAP_FLUSH_EXPLICIT_BIT or without GL_MAP_WRITE_BIT are not saved out during this call.

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/li>
      • 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.

PowerVR Tools and SDK v3.5


In this release, support has been added to PVRVFrame for Android Extension Pack (AEP) as well as new hardware profiles for Dell Venue 8 3840, Lenovo K900, Google Nexus Player, Onda V972, etc. In PVRTune, a new set of counters has been defined for Series6 family to make both high-level and low-level analysis easier, for example, the counters are now categorized under Overview, GPU Advanced, Renderer, Shader, etc. PVRTrace features optimized memory usage as well as an enhanced user interface with a new draw call inspector and better render state machine analysis and browsing. In PVRTexTool, we have added support for ASTC. PVRShaderEditor now supports OpenCL profiling and disassembly. PVRHub supports 64bit platforms and also has an updated configuration file format and relaxed requirements for superuser. The SDK now provides out of the box support for Google’s Android Studio IDE. Examples
      • Android: Examples are ported to Android Development Studio and Gradle instead of Eclipse and Ant.
      • Android: TextureStreaming – added detection of relevant extensions to allow OpenGL ES 3.0 support and fallback to using OpenGL ES 2.0 shaders if the extensions are not present.
      • FilmTV: Added support for GL_EXT_multisampled_render_to_texture and GL_IMG_multisampled_render_to_texture.
      • PVRScopeExample: updated to also show the PVRScope ‘standard’ counters.
      • OGLES 1 ShadowTechniques: Fixed crash on minimise/restore from android (BRN53618).
      • Glass demo: Used different textures for the two balloons to make it easier to discern between reflection/refraction.
      • Fixed wrong OpenGL ES token use (GL_BGRA was defined and used instead of GL_BGRA_EXT).
PVRShaman v2.3
      • Fixed a textual error in the PFX Semantics window.
      • Fixed a bug where a malformed POD file could be generated by adding an empty material.
      • Fixed a bug where the ‘Cancel’ button wouldn’t work when attempting to close a scene with unsaved changes to a shader.
      • Fixed a bug where the user manual wouldn’t be located if the working directory changed.
      • Updated Scene Explorer and POD Explorer to better reflect the underlying POD structure.
      • Added blender-style camera controls:
        • Rotate: Middle-click + drag
        • Zoom: Mouse-wheel
        • Pan: Shift + middle-click + drag
PVRTexTool v4.1.5
      • Added support for ASTC textures.
      • BRN53734, BRN52880, BRN53241: Fixed loading of KTX textures with mipmaps.
      • Encoded textures now correctly report that they are modified (unsaved) upon creation with an asterisk, and ask if you want to close them without saving.
      • Freshly generated textures (e.g. Composed Cubemaps, New Texture Arrays, etc.) now correctly prompt the user to save.
PVRVFrame v10.1
      • Fixed a bug in glGetVertexAttribPointerv where INVALID_OPERATION would be reported when there is no bound VAO.
      • Fixed a bug in glGetVertexAttribPointerv where null may be returned even when the pointer is set.
      • Fixed depth texture values in ES 3.0 being stored only in the red channel when passed to the fragment shader.
      • Fixed a bug where some texture formats specified using glTexStorage2D would be erroneously translated.
      • Fixed generic VA zero defaulting to 0,0,0,0 instead of 0,0,0,1.
      • Fixed glGetVertexAttrib(GL_CURRENT_VERTEX_ATTRIB) not returning the correct value when index == 0 and VAA 0 is disabled.
      • Fixed a bug in eglChooseConfig where passing nullptr as the configs parameter would return the total configs instead of the number of matching configs.
      • Fixed a bug in glGetActiveUniform where GL_INVALID_VALUE would be reported in cases where it shouldn’t be.
      • Fixed uniforms named ‘texture’ not being correctly queryable when using GLSL ES 1.0 shaders.
      • Fixed an issue with glDraw* calls where the glVertexAttribPointers use client side buffers and the first parameter is not 0.
      • Fixed EGL_BAD_ATTRIBUTE being reported by eglSurfaceAttrib(EGL_SWAP_BEHAVIOR)
      • Fixed GL_INVALID_VALUE being reported by glTexStorage2D(GL_ETC1_RGB8_OES) on AMD systems.
      • Fixed a texture swizzling bug where using GL_ONE would have the effect of GL_ZERO.
      • Fixed a case where SRGB gamma correction might not be disabled for the main framebuffer.
      • Fixed EXT_pvrtc_sRGB compressed textures not being decompressed correctly.
      • Fixed packHalf2x16 not compiling with 3.0 contexts.
      • Added support for EXT_draw_buffers_indexed.
      • Added support for EXT_geometry_shader.
      • Added support for EXT_primitive_bounding_box.
      • Added support for EXT_read_format_bgra.
      • Added support for EXT_separate_shader_objects.
      • Added support for EXT_shadow_samplers.
      • Added support for EXT_texture_border_clamp.
      • Added support for EXT_texture_buffer.
      • Added support for EXT_tesselation_shader.
      • Added support for GL_EXT_gpu_shader5.
      • Added support for GL_EXT_shader_io_blocks.
      • Added support for GL_EXT_texture_cube_map_array.
      • Added a workaround for an obscure Windows/NVIDIA driver bug where in some situations the bound array buffer would get messed up after binding a VAO.
      • Added ‘Context Info’ tab in PVRVFrame GUI which shows basic information about the emulated and underlying OpenGL ES and OpenGL contexts.
      • Added hardware profiles for:
        • Dell Venue 8 3840
        • Lenovo K900
        • Google Nexus Player
        • Onda V972
        • redhookbay
        • Samsung Galaxy Note 3 SM-N9005
PVRTune v14.111.1 PVRTuneGUI
      • Fixed BRN51238. PVRTuneGUI: Connection timeout advise – “Have you remembered to use ‘adb forward tcp:6520 tcp:6520’ to connect to an Android device over USB?” Text is permanently visible and goes bold if the connection does not succeed in 250ms.
      • Preferences dialog box:
        • Added option ‘Draw Marks across all timelines’: fixes BRN48806.
        • Added option ‘Hide empty timelines’: fixes BRN48807.
      • PVRTune window now defaults to mostly-full-screen.
      • Graph view: choose a better default splitter position, so that the table is not larger than the graphs.
      • Changed default docking window layout.
      • Renamed docking window ‘Renderstate Override’ to ‘Render State Override’.
      • Render State Override: Moved tick boxes to the left.
      • Rogue now has two counter groups: Graphics and Compute.
      • PVRTune search: counters now show up in search results as appropriate based on executable (PID name) or PVRScope connection name.
      • PVRTune warnings now immediately pop up in a dialog box, as well as presenting the exclamation mark button in the status bar.
      • PVRTune monitor:
        • Moved CPU and Memory stats to the bottom. This prevents the per-core CPU stats from taking so much space on low resolutions.
        • Now allows the user to specify the time range via a context menu, or the combo box. The combo box has been moved to the bottom, and inside the scroll area; this means it does not forcibly use screen space at low resolutions and can be scrolled away.
      • Counter Table:
        • Counter table now grouped as a tree view with filter options removed.
        • Fixed a rare crash when adding/removing columns.
        • Groups and counter tool tips now have more info about any PID/CIDs mentioned.
        • Enabled dynamic sorting. This keeps the default groups in a sensible order at startup, as apps start & quit.
        • Context menu now says ‘Counter Properties’ rather than just ‘Properties’. Also updated keyboard shortcuts via &’s.
        • The Master table can no longer have the ‘view’ column disabled, this reduces counter pop.
        • Replaced ‘filtering’ with a tree view:
          • Removed counter table ‘filter’ button.
          • Default tree view grouping is by ‘source’.
          • Right-click context menu allows the grouping to be changed to ‘filter’, equivalent to the old filtering option.
          • Removed ‘number’ column.
      • PVRPerfServer for Linux/Android: now outputs a warning if ‘/sys/kernel/debugs/pvr/gpu_tracing_on’ is enabled.
      • Linux: fixed the case where PVRPerfServer is ran as ‘root’ but then apps are run as a user but they can’t connect via PVRScope.
      • Command-line option ‘–pid’ is now enabled by default. Added ‘–nopid’ to allow it to be disabled.
      • Now sends info about all known PIDs when PVRTune connects; fixes missing data about already-running PIDs.
PVRTune Complete only (NDA)
      • Added HW counter support for PowerVR Series7.
      • Added support for selecting ‘custom counters’ (including e.g. SLC) on Rogue DDK branches that support it.
      • Added (non selectable) data and counters for SLC read/write counters for SGX branches 1.7 and newer.
      • Added all Standard Outputs for any abstract counters that are supported. Just in case they weren’t explicitly created.
      • Renamed ‘Anti-aliasing: samples per pixel’ to ‘TSP samples per pixel’.
      • Counter Table: Debug counters are now hidden by default. They can be enabled via Edit\Preferences. This setting is not registry saved.
      • Added counters:
        • Anti-aliasing: samples per pixel
        • Pixel quad efficiency
        • Shader clock cycles (pixel) per sample
        • Iterators per sample
      • Bug fixes in PVRTune’s Custom counter group GUI.
PVRShaderEditor v2.6
      • Added support for OpenCL compilers for PowerVR Series6 family.
      • Ability to view disassembly information for OpenCL PowerVR Series6 family.
      • Added section in the manual about GLSL Compiler tool.
PVRGeoPOD v2.16.4
      • Standalone: Fixed BRN53593. Texture names should now be converted to POD for Collada files exported from Maya’s FBX Exporter. Between SDK 3.3 and 3.4 a fix for an unrelated issue broke a workaround for their off-specification texture exporting.
      • 3ds Max: Added support for igame version 17.3.374.0.
      • GUI: Fixed the output of logging information.
      • GUI: Fixed a crash that could occur when doing multiple exports.
PVRTrace v3.5
      • Changed the default file extension to .pvrtrace.
      • Changed the default filename for the exported calls to mention the trace filename as well as the current frame or if it contains all the frames.
      • Fixed the sharing of object names when multiple shared contexts are used.
      • Fixed loading of GLsync variables from trace files recorded with version 3.3 and earlier.
      • Added support for missing functions from extension GL_EXT_separate_shader_objects.
      • New configuration file structure, supporting multiple configurations with wildcard process name matching.
      • Added GL_TEXTURE_CROP_RECT_OES as a recognised enum.
      • Added EXT_Separate_Shader_Object functions to the GUI.
      • Added option to copy a call to the clipboard.
      • Added option to copy the image analysis/texture/fbo attachment contents to the clipboard.
      • Added static analysis entry for EGL sync use.
      • Added a static analysis report for redundant eglMakeCurrent calls.
      • Fixed the ‘clear disabled calls’ right-click option.
      • Fixed reporting of redundant glViewport and glScissor calls.
      • Fixed tab ordering on Preferences dialog. This fixes BRN51760.
      • Overhauled the state, modifications and draw call widgets and removed the texture and shader tabs by merging their functions into a generic object data viewer.
      • You can now view the attachments of framebuffer objects.
      • Rewrote the code that handles jumping back and forth between frames. A result of this change is that frame buffer objects should now display correctly when jumping.
      • Right-click no longer selects a call.
      • Re-arranged the GUI so more things are in dockable widgets.
      • Thread colours are now shown in the find results.
      • Find results will now mention if the search was ‘Incomplete’ due to it hitting the search result maximum limit. This fixes bug BRN52734.
      • Alphatest/discard is no longer represented by red in the PowerVR Depth Complexity to avoid confusion.
      • Static Analysis now correctly handles multi-threaded trace files.
      • The Go To dialog now allows you to jump to a certain call as well as to a frame.
      • The Static Analysis now mentions if it doesn’t find any warnings or errors.
      • Statistics Graph:
        • Added line column to show statistic values for the frame you’re hovering over.
        • Moved the context menu options into file and view menus.
        • Added export currently graphed data option.
        • Added headings to the exported CSV data.
        • Fixed a crash if you load a trace file while the dialog is open.
        • Fixed an ever-growing dialog if you open multiple trace files in a single sitting.
        • Exporting CSV data will now report success or error instead of being silent.
        • The thread tab will now be enabled if you first open a single threaded trace followed by a multi-threaded trace.
        • The statistics graph dialog can now be opened from the statistics dock widget.
        • Ctrl + C will now copy the graph area to the clipboard.
        • Fixed off by 1 frame error.
        • Fixed zooming in and out shortcuts so Ctrl+ is in and Ctrl- is out.
      • Scaling of the default framebuffer now takes into account scissors.
      • Fixed X11 and Window scaling. In the case of the latter we also now take the window decoration into account when scaling.
      • We now playback EGL_KHR_wait_sync and EGL_KHR_fence_sync instead of ignoring their calls.
      • The window list now displays the width and height on start up.
      • Added –config command-line option that allows you to override config attributes. It also supports –config= to override a specific config. However, the trace file will need to have been recorded with 3.5 or newer for this to work.
      • Added command-line option ‘–fake-client-buffers’ which will use textures to fake clientbuffers if their formats match a GL version.
      • We now output a message saying which window will be played if –window is used.
      • If we now fail to find a recorded value and playback value mapping for attribute/uniform/uniform block locations then we attempt to use the recorded value.
PVRTrace Recorder
      • Added a message to tell the user that we’re disabling shader/program binaries.
      • Fixed recording of EXT_separate_shader_objects functions.
      • Tweaked the way we determine the width and height of the window surface. This works around an issue on Android where in rare situations incorrect values would be recorded.
      • Fixed recording of the texture parameter GL_TEXTURE_CROP_RECT_OES.
      • Fixed renderstate override and the frame number in the API timeline on Android KitKat when in profile mode.
PVRHub v2.2
      • A superuser APK is no longer needed to start and stop tracing.
      • Advanced and process-specific PVRTrace settings that are not configurable through PVRHub itself are now retained instead of overwritten in the pvrtraceconfig.json file.
      • Now installs both the 32-bit and 64-bit PVRTrace recording libraries on 64-bit platforms.
      • PVRTrace user manual: Included sections for draw call inspection and current call inspection as a result of GUI changes.
      • PVRShaman user manual: Fixed a problem where some keywords in the PFX semantics table had an incorrect description.
      • PVRTexTool user manual: Added a section for explaining the different encoding modes for PVRTC and ETC.
      • PVRShaderEditor: Added section in the manual about GLSL Compiler tool.
      • BRN51829: Fixed typos in Series6 Compiler ISR.
      • SDK Browser: Added new instructions for building SDK examples on Android using Gradle and Android Development Studio.
      • Added a new separate document for capturing default PVRTune counter list and description.

PowerVR Tools and SDK v3.4


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


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


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


      • CPVRTPrint3D: Fixed out-of-bounds access.


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

PVRShaman v2.2.2

      • Incorporated new icons in the GUI.

PVRTexTool v4.1.4

      • Increased performance of ETC decompression. It’s now up to about 20% faster per surface, depending on the compression scheme.
      • Fixed scaling issue. All test cases now work 100% correctly when downscaling.
      • Fixed crash when saving a texture with MIP Maps to a KTX file.
      • Updated icons to new consistent style.
      • Fixed padding argument so that they actually pad the metadata.
      • Fixed bug with ‘-squarecanvas +’ where size was being set to the largest of width and depth instead of width and height.
      • Updated PVRTC Compressor to version 1.190, which fixes the single region crash, which caused small PVRTC2 textures (or MIP Maps) to crash the tool.
      • Fixed bug in PVRTC2 compressor where it won’t properly compress textures that generate a single PVRTC region in the Y dimension (i.e. any texture, or MIP Map level in a texture, with a height of 4 or lower).
PVRTexTool Plugins
      • Added 2015 versions of Autodesk 3DSMax and Maya.
      • Fixed channel order when loading PVR files in Maya.

PVRVFrame v10.0

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

PVRTune v14.88

      • Renamed TA to Tiler, and 3D to Renderer.
      • Added counters:
        • Shader proportion: pixel.
        • Shader proportion: vertex.
        • Shader proportion: compute.
        • Vertices per batch.
        • Shader slot scheduled count: compute.
        • Shader slot scheduled count: pixel.
        • Shader slot scheduled count: vertex.
        • Shader slot size: pixel.
        • Shader slot size: vertex.
        • GPU task time per frame: Tiler core.
        • GPU task time per frame: Renderer core.
        • GPU task time per frame: 2D core.
        • GPU task time per frame: Compute core.
      • Complete build and custom counter groups:
        • Custom counters: editable fourth column.
        • Rename the count modes “unary” and “binary”.
        • Added a filter input box for the first three columns.
        • Set the stretch factors to give the rightmost two columns more space.
        • Removed uniformItemSizes for the first list. That also affects width, which means the horizontal scroll bar wasn’t appearing soon enough.
        • Fixed tab order, and put the focus in the filter box by default.
        • Now saves and restores the dialog’s geometry each time.
        • Now create counters for custom HW sources.
        • BVNC string parsing. Should now handle V=’cb’ or V=’3p’ style BVNCs. When automatically creating per frame and per second counters for HW sources, now also creates a per clock counter.
        • When automatically creating per frame and per second counters for HW sources, now also creates a raw counter. This lets you see the actual count in the time period. Perhaps useful in the counter table, but not in the graph.
        • SGX XT counter: “Shader load: Compute”.
        • New counter: Batches per frame.
        • New counter: Shader proportion: event.
        • PVRTune regression fix: Counter Table group combo box now correctly displays the chosen group.
        • Fixed some counter sources not being visible after choosing them in a custom group.
      • PID docking-window: fixed occasional disappearance of known application names (they are only received if PVRPerfServer is run with the -pid option).
      • Monitor docking-window:
        • Data no longer “pauses” during periods of no GPU activity.
        • Added the missing shader core load, for Rogue.
      • Counter properties docking-window:
        • No longer lets the window size grow due to a long counter Name or Source string.
        • Also sets the Name and Source strings as StatusTips (ToolTips are too distracting) – allows larger strings be read.
      • Added support for nested user timelines. PVRTune renders these as a “flame graph”.
      • Connection screen:
        • URL buttons now automatically shrink their text to fit (lost during port to Qt).
        • “Connect To:” box now gets the focus by default, as it should, and as it used to. Can once again simply run and press Enter to go straight to the last connection.
        • Now convert all file path slashes to ‘/’. This fixes/removes the possibility of two ‘matching’ paths in the file history but with different slashes on Windows.
        • Status bar: now has a visual semaphore indicating connection warnings; click to show the PVRPerfServer Details dialog box.
        • Added more feedback to PVRPerfServer details: now shows warnings at the bottom.
        • Complete build: additional info.
        • Fixed some rare crashes.
        • Main window: fixed the ’empty window’ behind the splash screen during first (no preferences file) start up.
      • Changed the default docking-window layout:
        • Top Dock left to right: counter table (default top-most), search, remote editor.
        • Bottom: Monitor (default top-most), Props, RS override, PID.
      • Mouse hover over the Monitor now causes counters to highlight. Also, in the bar chart style, empty components will now have a hit-test result.
      • The Counter Table context menu now has a new option “Properties”, which enables and brings the Counter Properties docking window foremost, and sets the focus to the Y-Axis input box.
      • Graphs:
        • Graphs now scroll more smoothly even when received data is intermittent.
        • Fixed an issue where start-up with a zoom value of one (1) would mean that the mouse-wheel could not be used to zoom out, but other methods could.
        • Fixed vertical centering of timeline labels on Windows and Linux.
        • Renderstate Override: sets vertical policy to preferred, rather than fixed. Makes it a much more polite docking window.
        • Fixed a case where scrolled graph rendering could show pixel corruption (refresh would fix).
      • PVRTune performance optimisations.
      • Bug-fix: restore proper counter tool-tips.
      • No longer remember zoom or position between sessions. When loading from a file, automatically “view all” when complete.
      • New icons.
      • PVRPerfServer command-line:
        • All non-single-character commands must now be prefixed with two dashes, e.g. –pid rather than -pid.
        • Added new command line option quit after time (qat) e.g. “–qat=4.2” which commands PVRPerfServer to auto-quit after a time of 4.2 seconds.
      • PVRPerfServer for Linux, BB10 and Android: made unnecessary and removed command line option “–disable-user-input”.
PVRScope Library
      • PVRScopeComms.h:
        • Don’t prefix strings with psz (thereby specifying NULL-terminated), when in fact there is a string-length parameter. pplSendMark() comment improved: the input string is not time-stamped, it’s done internally.
        • New class: CPPLProcessingScoped. Helper class which will send a processing begin/end pair around its scope. You would typically instantiate these at the top of a function or after the opening curly-brace of a new scope within a function.
        • PVRScopeComms.h: updated comments; pplSendProcessingBegin() / pplSendProcessingEnd() pairs can now be nested.
      • PVRScope: Headers should work with C code.
      • PVRScopeReadCountersThenSetGroup(): removed nTimeUS parameter as it is now queried internally.
      • Split PVRScopeReadCountersThenSetGroup() into two new functions: PVRScopeReadCounters() and PVRScopeSetGroup().
      • PVRScopeStats: new function PVRScopeFindStandardCounter().
      • Fix for per-render counters (per-frame were ok).
      • Fixed a regression in the first SDK 3.3 release that could cause noisy data.

PVRShaderEditor v2.5

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

PVRGeoPOD v2.16.3

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

PVRTrace v3.4

      • Added data compression for trace files to reduce their size.
      • PVRTrace will now output an error message if you attempt to load a trace file with a file format newer than the latest format recognised.
      • PVRTrace files are no longer allowed to have ‘:’ in their name. This caused issues when recording on Android where it is allowed and trying to pull the file on to Windows where it isn’t.
      • glTexEnv and glGetTexEnv now show the enum values as strings where appropriate.
      • Frame count now begins at 0 to match the recorder.
      • Export frame stats now exports information from the first frame.
      • Significantly reduced memory usage.
      • glStencilMask now shows its mask as a hex value instead of an unsigned int.
      • Fixed a bug in the renderstate tracking of glCopyBufferSubData.
      • Fixed an issue with the generation of the PowerVR depth complexity for some trace files.
      • You can now view the attributes of a config used for context and window creation by hovering over the config parameter of their respective eglCreate* functions.
      • We now display an error message if the profiling compiler fails to compile a shader.
      • Added the GL_EXT_debug_marker functions.
      • The image analysis spinning loading symbol now scales with the window.
      • glIsQueryEXT now loads the return value.
      • The static analysis now shows errors for shaders that failed to compile and programs that failed to link if and only if the trace was recorded with the latest version. Also, if you hover over the call in the static analysis window it’ll mention the compilation/linking information log.
      • The call summary export now includes lists all API calls instead of just the ones used. This should make is easier to diff application runs.
      • Fixed call highlighting on Linux.
      • The “cancel” button has been removed from the search dialog. Now, if a search is running the “find” button becomes the “cancel” button.
      • Softened the static analysis warning about using scissor rectangles as this only applies to SGX.
      • If the trace file was recorded with the save framebuffers option you can now export the framebuffers to a folder as separate images.
      • Fixed a crash that occurred if the statistics dialog was open when exiting.
      • The call view can now be navigated with the page up and down keys.
      • Fixed the function quick help which was broken for some functions.
      • Added the function quick help to extension functions where possible.
      • Fixed a bug where the thread list would not get cleared when loading multiple trace files.
      • Play failed calls is now disabled by default.
      • By default we now playback calls that caused errors during recording. This can be disabled within the GUI or in playback via the command-line.
      • Fixed an issue with playing back uniform blocks.
      • Added support for the query EXT functions.
      • Added –robust that will force the use of EGL_EXT_create_context_robustness and GL_EXT_robustness and will check the reset status of the GL context after each call. If you do –robust=0 it will disable the use of those extensions.
      • Added support for playing back eglCreateImageKHR with targets:
PVRTrace Recorder
      • Fixed 2×2 texture override when the application is using texture 3D and 2D array.
      • Fixed force flat colour fragment shader for applications that use GLSL 300 ES shaders.
      • You can now set the default states of the renderstate overrides in the config.

PVRHub v2.1

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


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


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

PowerVR Tools and SDK v3.3

PowerVR Tools and SDK v3.3 Release 2


      • New: OpenGL ES 3.0 SDKs for iOS and Android.
      • New: OpenGL ES 3.1 SDK for Windows and Linux emulation.
      • New: TextureStreaming demo for iOS and Android. Demonstrates how live camera data can be efficiently uploaded to OpenGL ES.
      • New: PVRShaderEditor now supports syntax highlighting for GLSL ES 3.10 shaders.


      • Added OpenGL ES 3.1 PC Emulation SDK for Windows and Linux.
      • Added OpenGL ES 3.0 SDK for iOS and Android.


      • IntroducingPOD: Always write an alpha value of 1.0 in the fragment shader to avoid potential OS compositor artefacts.
      • Skybox2: Tweaked the precision modifiers.
      • Android, OGLES2TextureStreaming: Added Android demo which makes use of the Camera Interface.
      • iOS, OGLES2TextureStreaming: Added missing CameraInterface dependencies.
      • iOS, OGLES2TextureStreaming: Changed mapping iOS camera texture to the recommended GL_LUMINANCE and GL_LUMINANCE_ALPHA (which works in OGLES2/3).
      • iOS, OGLES2MultiThreading: Changed main application file from .cpp to .mm to enable correctly including relevant objective-c style header files.
      • iOS, OGLES2Glass: Fixed run time error on iOS when binding the default FBO object.


      • Context creation failures updated to contain requested API version.


      • Added Android Camera Interface.

PVRShaman v2.2.1

      • Added missing types, qualifiers & built-ins for GLSL ES 3.00 syntax highlighting.
      • Added GLSL ES 3.10 syntax highlighting.

PVRTexTool v4.1.3

      • Fixed crash when trying to compare images of different sizes. Error message is now correctly displayed.
      • Fixed floating point texture loads so that they don’t get converted to 8-bit unorm on load.
      • Fixed shared version of the library’s compression algorithm to remove artefacts caused by a VS2010 compiler optimisation gone awry.
      • Fixed d3d format to PVR format conversion for D3DFMT_A16B16G16R16F.
PVRTexTool Plugins
      • Maya: Fixed channel order when loading PVR files in Maya.

PVRVFrame v9.9

      • Fixed a bug where glGet(GL_NUM_EXTENSIONS) would return the wrong value.
      • Fixed a bug in GLSL translation where #define may be stripped incorrectly.
      • No longer erroneously exposes glShaderStorageBlockBinding.
      • Added support for proper creation of ES 3.1 contexts.
      • Fixed memory leaks.
      • Fixed symbols not being exported correctly:
        • glBindVertexBuffer
        • glVertexAttribBinding
        • glVertexAttribFormat
        • glVertexAttribIFormat
        • glVertexBindingDivisor
        • glCreateShaderProgramv
        • glGetBooleani_v
        • glGetTexLevelParameterfv
        • glGetTexLevelParameteriv
        • glMemoryBarrierByRegion
      • Fixed glPointSizePointerOES not being exported on Linux.

PVRTune v14.15.2

      • Counter renaming: US, USC and USSE to Shader.
      • Added Rogue counters: Shader load: Compute and Shader ALU efficiency.
      • Restored some missing counters when running with Series6 HW.
      • Fixed a crash at start-up when the “hide unnecessary tabs” option is disabled.
      • Counter results in a Search window are now interactive. Hover to highlight; click to select; drag and drop onto graph views, underscore if highlighted elsewhere.
      • Added counters per PID, per GPU core task time counters, alongside existing task load counters. (BRN47467).
      • Search and Monitor no longer consume CPU time when their dock window is not topmost.
      • Counter table: restore old behaviour: Inactive counters now fade before disappearing (if ‘hide inactive’ is enabled).
      • “Search” widget dropdown box items should be listed chronologically (BRN45741).
      • Counter Table and Search windows no longer force themselves to be top-most at app start-up.
      • Fix for per-core CPU usage on Linux/Android when cores are being enabled/disabled on the fly (BRN47850).
      • When the ‘-pid’ option is used, now also send the executable name for all PIDs seen using the GPU.
      • Fixed a crash when using the ‘sendto’ option along with applications that use PVRScope (BRN47848).
PVRScope Library
      • Fix for per-render counters only (per-frame were ok) that caused the data to be out by a factor of two.
      • Fix a regression in the first SDK 3.3 release that could cause noisy data.

PVRShaderEditor v2.4

      • Added missing types, qualifiers & built-ins for GLSL ES 3.00 syntax highlighting.
      • Shader type is detected by file extension first. If the extension is unknown, fuzzy logic is used to guess the shader type.
      • Added GLSL ES syntax highlighting for the following extensions:
        • EXT_shader_framebuffer_fetch
        • EXT_shader_pixel_local_storage
        • OES_shader_multisample_interpolation
        • GL_KHR_blend_equation_advanced
        • EXT_shader_pixel_local_storage
        • OES_sample_variables
        • OES_shader_image_atomic
        • OES_texture_storage_multisample_2d_array
      • Added GLSL ES 3.10 syntax highlighting.
      • Updated the New File wizard to support GLSL ES 3.10 vertex, fragment and compute shaders.
      • Added background compilation for GLSL ES 3.10 vertex, fragment and compute shaders when a GLSL ES 3.10 capable compiler is active (a pre-release version of our GLSL ES 3.10 compiler can be downloaded from our support portal: https://pvrsupport.imgtec.com/downloads).

PVRGeoPOD v2.16.2

      • Added support for IGame version and
      • Added support for 3DSMax 2015 (IGame 17.0.630.0) and Maya 2015.
      • The exporter now exports mesh nodes as dummy nodes when the “export geometry” option is unticked. This fixes a crash that can occur if the mesh is the parent of another type of node, e.g., light.

PVRTrace v3.3.1

      • The image analysis image now uses bilinear filtering when scaling the image below 100%.
      • These enums are now represented by strings in the GUI:
      • Added missing types, qualifiers & built-ins for GLSL ES 3.00 syntax highlighting.
      • Added GLSL ES 3.10 syntax highlighting.
PVRTrace Recorder
      • The recording of clientbuffers now supports sampling the data once at time of egl image creation using config value 3.
      • Fixed playback of glVertexAttribDivisor.
      • Fixed the playback for some traces which would fail to create a window surface if they weren’t the first trace file open.

PVRHub v2.0

      • Added a dialog to help the user kill an already running app.
      • Changed the PVRHubDaemon backend implementation.
      • Improved stability and speed.
      • The backups are now made (and restored) every time the Android build ID changes (i.e. system upgrade).
      • Scripts now generate a pvrtraceconfig.json file.
      • Added OpenGL ES 3.0 support.

PVRMonitor v1.01

      • Added a new CPU widget that displays multiple cores as vertical bars on the same lines as PVRTune.
      • Now the GPU values can be smoothed over 0.5seconds, similar to the CPU values.
      • Few minor UI tweaks.


      • Extensions: Updated GL_OES_EGL_image/GL_OES_EGL_image_external descriptions to match their actual behaviour.
      • PVRTrace user manual: Updated the document with revised manual Android installation instructions (rooted).
      • PVRGeoPOD user manual: Updated compatibility table to show support for new 3dsMax 2014/2015 and Maya 2015 versions.


      • Updated InstallBuilder to v9 to solve the problem with cached files after an installation failure.
      • Removed MSVC2010 redistributable installer as it was causing SDK installations to fail.
      • Fixed missing PVRTune documentation shortcut.

PowerVR Tools and SDK v3.3 Release 1


      • 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.2.0

      • 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.2

      • 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.
PVRTrace Recorder
      • 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.

Want to get the best performance from your applications?

Support & resources

Get your answers online with our comprehensive documentation, developer forum and our dedicated PowerVR developer support desk.