PowerVR SDK Browser

# Release Notes

2016 R1 | v4.0 | v3.5 | v3.4 | v3.3

For the latest version of the Release Notes please go here.

## PowerVR Tools and SDK 2016 R1

### Overview

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.

### Examples

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

##### PVRTracePlayback

- 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

### Overview

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.

### General

- Updated EULA to separate PowerVR SDK (now under MIT licence) and PowerVR Tools (with a revised free license)

### Examples

- 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

### Framework

- 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

PVRTexToolGUI

- 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 BRN57650: Re-enable 'Specify Clock Speed' in developer mode
- 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
- As per SDK 4.0 roadmap: removed old SGX DDK support - pre head of 1.7 branch. NIFs BRN32929 and BRN32930
- Added support for Series6XE USC counters
- Added support for PowerVR Series5XE GX5300. Needs testing
- Added recognition of the following HW: G6020, GE7400, GE7800, GT7200, GT7400, GT7600, GT7800, GT7900
- Added support for HW with no programmable counters
- 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

PVRTuneGUI

- Custom counter group dialog box: merged middle two columns
- Connection window: Removed the "adb forward" tip, since we have the button now
- 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
- Removed the timer; updated the colour when we check which counter is selected - eEventCountAppCycleActivity

PVRPerfServer

- 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 SP1 (IGame version 18.3.490.0)
- 3DSMax: Dropped support for anything older than 2013
- 3DSMax: Added support for igame version 18.0.873.0 (3DS Max 2016)
- Maya: Fixed an issue in 2015 which caused geometry to go missing in some scenes
- Maya: Dropped support for anything older that 2013

### PVRTrace v3.6.1

- 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
- Enums provided by EGL_EXT_buffer_age are now recognised

PVRTraceGUI

- 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 mode
- 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)

PVRTracePlayback

- 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

- 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

### Documentation

- 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 Browser

## PowerVR Tools and SDK v3.5

### Overview

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.

### PVRTools

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

PVRTexToolGUI

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

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

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

PVRTraceGUI

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

PVRTracePlayback

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

### Documentation

- 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

### Overview

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.

### Builds

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

### Examples

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

### PVRShell

- CPVRTPrint3D: Fixed out-of-bounds access.

### PVRTools

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

PVRTexToolGUI

- Updated icons to new consistent style.

PVRTexToolCLI

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

PVRTexLib

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

### PVRVTune 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.

PVRTuneGUI

- 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.
- Updated PVRTuneComplete's welcome message in light of it being covered by the NDA licence, rather than the DDK source licence.
- No longer remember zoom or position between sessions. When loading from a file, automatically "view all" when complete.
- New icons.

PVRPerfServer

- 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 17.2.259.0).

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

PVRTraceGUI

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

PVRTracePlayback

- 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:

- EGL_GL_TEXTURE_2D_KHR
- EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR
- EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR
- EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR
- EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR
- EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR
- EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR
- EGL_GL_TEXTURE_3D_KHR
- EGL_GL_RENDERBUFFER_KHR

PVRTrace Recorder

- Fixed 2x2 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

Android

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

### Documentation

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

### Installer

- 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

### Overview

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

### Builds

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

### Examples

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

### PVRShell

- Context creation failures updated to contain requested API version.

### PVRTools

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

PVRTexToolGUI

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

PVRTexLib

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

PVRTuneGUI

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

PVRPerfServer

- 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 16.5.277.0 and 17.1.149.0.
- 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:

- EGL_NATIVE_BUFFER_ANDROID
- GL_CONSTANT_COLOR
- GL_ONE_MINUS_CONSTANT_COLOR
- GL_ONE_MINUS_CONSTANT_COLOR
- GL_ONE_MINUS_CONSTANT_ALPHA

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

PVRTracePlayback

- 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

Android

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

Linux

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

### Documentation

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

### Installer

- 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

### Overview

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

### Note

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.

### Examples

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

### PVRTools

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

### PVRShell

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

PVRTexLib

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

PVRTexToolGUI

- 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

PVRTraceGUI

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

### Documentation

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

© Imagination Technologies Limited
All rights reserved