PowerVR Tools and SDK 2016 Release 1


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