PowerVR Tools and SDK 2019 Release 1

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