PowerVR Tools and SDK 2020 Release 2

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.

PVRFrame 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.