PowerVR Tools and SDK 2020 Release 1

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 Reset, Counter 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.