- The Framework now supports Vulkan Memory Allocator (VMA) directly. VMA can be used for memory allocation by all internal utilities that create buffers or images, the examples, and the UIRenderer.
- In PVRVk the Vulkan per-device function pointers have been moved from the global scope to each device. This helps where multiple devices from different vendors are used. Previously only a single physical device could be automatically supported at a time.
- A CMake build system has replaced the project files. Android, iOS, Windows, Linux, QNX, and macOS continue to be supported, but other platforms will be easier to add. Also working across platforms is now easier. Due to the nature of Android, gradle scripts are provided, and make use of the same CMake files all other platforms use. The Framework modules and Examples can still be built individually or together using a top-level CMakeLists.txt, or a gradle that builds the entire SDK.
- Refactored the Framework to use exceptions instead of return codes to signify errors, giving the developer absolute control of error handling. This streamlines areas throughout the SDK, including reducing the complexity of the examples, and removed the necessity for checking and propagation of return codes. Runtime exceptions not caught earlier are ultimately caught by PVRShell which displays their error message and exits, providing a very powerful prototyping debugging tool.
- When running debug builds with a debugger attached, a debugger break is executed when an exception is encountered. Developers can immediately inspect the call stack of the error, or choose to move on.
- Restructured the SDK folder structure to make it shallower, simpler and more familiar. The old Builds folder is gone and replaced with /include, /libs and /res folders in the root of the SDK. Examples are separated into OpenGL ES and Vulkan, so developers can easily see those of interest.
- Comment-based documentation for our beginner examples HelloAPI and IntroducingPVRShell for Vulkan have been reworked. These can now be treated as a complete walk-through of the Vulkan API with step-by-step explanations, including the difficult but important parts such as correct frame synchronisation and texture loading.
- Added support for VK_EXT_DEBUG_MARKER and VK_EXT_DEBUG_REPORT. Objects can now be easily named in PVRVk, with their user-selected names shown in debugging applications. An exception can be thrown on layer errors if required.
- Upgraded the sprite rendering library, PVRUIRenderer, to use Indirect Drawing. This allows the developer to modify text elements at runtime without a need to re-record its command buffers.
- Added a Navigation 3D example for Vulkan and OpenGL ES, showing techniques helpful for navigation such as frustum culling.
Fixes & Enhancements
- Improved PVRVk and PVRUtilsVk separation. Some functionality previously in PVRVk has been moved to PVRUtilsVk. This minimises non Vulkan specific functionality in PVRVk, and makes for a thinner wrapper on top of Vulkan. Developers who intend to only use PVRVk may find this a better map to raw Vulkan.
- OGLESPVRScopeRemote had a mistaken additional call to executeCommands() removed, identified from unexpected results in PVRTune.
- Migrating from OpenGL ES to Vulkan document
- Fixed installation of PVRTrace on Android Oreo 8.1.
- “PVRTune Config\Per-process CPU usage data” is now enabled by default. This controls whether PVRPerfServer will retrieve and send the following per-process (per-PID) information: executable names, CPU usage and memory consumption.
- Linux scripts now create symbolic links to the PVRTrace libraries for common driver names.
- Fixed a potential crash on Windows if PVRTrace is loaded after rendering threads are created.
- Now works with Android P.
- Fixed potential stack overflow that could occur when jumping frames.
- Captured Android native buffers (EGL_NATIVE_BUFFER_ANDROID) can now be played back on Linux (with EGL_LINUX_DMA_BUF_EXT) using DRM dumb buffers.
- Fixed loading of trace files that contain ES 3.2 calls.
- Fixed playback issue in glCopyImageSubData where the src and dst names were 0.
- Fixed a bug in the export to txt feature where threadIds would be written incorrectly.
- Fixed an issue in the emulation of glFramebufferTexture2DMultisampleEXT where the attached texture would not be drawn to.
- Added support for Physically Based Rendering (PBR) materials for 3DSMax and Blender. This includes Metalicity, Rugosity, and IOR.
- Added automatic triangulation of all meshes to Blender. This solves the error reported when exporting not triangulated meshes.
- Removed the defunct option for automatic timeline hiding.
- When selecting a task, left and right cursor keys can be used to move between tasks on a timeline.
- New Graph context menu option: Fade Unrelated Timing Data. If enabled, and a task is selected, tasks which are not in the same group (e.g. Frame number) will be shown in grey.
- Developers can now choose to enable/disable the coloured sections on the timing blocks such as PID and Render Target.
- The mouse forward/backward buttons can now be used to undo/redo item selections.
- Timelines are now presented to the developer as a tree structure.
- Overhauled the presentation of data in the properties window. Properties window now uses a tree structure which makes browsing the information from various activities much easier and clearer.
- Frame number 0 will now be grouped.
- Only the top and bottom areas (<0 and >graph_scale) are colourised if also displaying the gradients that indicate the 25%, 50%, 75% quarters.
- The timeline-separating lines are now full-width, and more translucent.
- PVRPerfServer: command-line help text reviewed and updated, largely following the suggestions given by http://docopt.org/.
- The GUI find function can now search the “Timelines” window. The keyword “timeline” can be used to filter search results.
- Clicking a task will now keep it selected permanently.
- “Fade Unrelated Timing Data” new feature accessed through the context menu on the graph. If enabled (disabled by default) will desaturate tasks which are not part of the current task grouping.
- Graph Panes: the highlighted counter is now rendered last to avoid obscuring when rendering counter values under the mouse.
- The imageSize values saved in the mip levels of KTX files now take into account any padding to the data.
PowerVR Tools and SDK 2017 R2
Removed support for 32-bit versions of the GUIs and command-line tools.
The PowerVR Framework has a new major version (5.0) and has been largely re-imagined. It is now much more focused on showing the most efficient use for each Graphics API instead of providing a common unified interface between them.
- Removed PVRNativeAPI, PVRPlatformGlue, PVRApi
- Renamed PVREngineUtils to PVRUtils
- PVRUtils now does not rely on the an API abstraction (PVRApi), instead having separate implementations for OpenGL ES and Vulkan
- Added a new header file loading OpenGL ES and its extensions at runtime without compile time linking
- Provided a modified Vulkan.h file that is auto-generated from the Vulkan spec, providing strongly typed enums for Vulkan
- Added the module PVRVk, which is a Vulkan C++ wrapper, very powerful but still completely faithful to the Vulkan spec
- PVRVk also provides constructors with default parameters, reference counted objects, reasonable class hierarchies and in general making working with Vulkan a breeze
- Made the debugger break command that is triggered on Assertions to trigger *after* the relevant assertion message has been logged so as to facilitate debugging.
- Removed a (debug) assertion from RefCountedWeakReference, that would erroneously assert if someone tried to copy-construct a RefCountedWeakReference to an existing object that had been destroyed
- Added the demo FramebufferDownsample showing how to use the FramebufferDownsampleIMG extension
- Added the demo TextureFilterCubic showing how to use the TextureFilteringCubicIMG extension
- Added the demo OpenCLExample, showing how to use OpenCL with OpenGL ES, including image sharing between CL and GL
- PVRScope User Manual: PVRScopeComms functions take a pointer, not a reference: corrected the code examples.
- Added a highly optimised 19-tap Gaussian Blur example
- Fixed installation of PVRTrace on some Android O devices.
- Updated manual to HTML format
- Added support for 3ds Max 2018.
- Updated manual to HTML format
- Updated and unified compilers for PowerVR Rogue architectures. All variant families now share a single compiler binary
- Resolved various shader compilation crashes and improved internal error handling
- Added tool to save the compiler binary outputs
- Fixed launching the application with a file path as a parameter
- Fixed syntax highlighting preferences
- Fixed various issues related to setting an empty temporary file path
- Disabled incorrect handling of macro override for PFX2 files
- Updated text in new file templates
- Minor text fixes
- Updated manual to HTML format
- Fixed several bugs in shader translator which caused PLS shaders to not compile.
- Fixed a bug where decompressing unsupported compressed formats may cause a crash if the current GL_UNPACK_ALIGNMENT value is greater than 4.
- Added a system report page to PVRVFrameGUI.
- Fixed a bug where an ES 3.1 context could be created even when the selected hardware profile does not support it.
- Fixed a bug in the conversion of shaders that enable GL_EXT_shader_pixel_local_storage2 and GL_OVR_multiview2.
- Fixed OVR_multiview emulation on platforms that don’t expose GL_ARB_geometry_shader4 but have a high enough version of GL for support.
- Fixed shader conversion when the host’s glsl version is less that 430 and imageSize is used.
- Fixed an issue loading ASTC texture data.
- Updated manual to HTML format
- Recorder: Added support for EGL_KHR_partial_update
- Recorder: Fixed a bug with the capture of EGLClientBuffer data of format HAL_PIXEL_FORMAT_YV12 where only half the chroma data was being recorded.
- Recorder: The capturing of EGLClientBuffer data on Android now supports the new gralloc1 interface.
- Player: Added support for EGL_KHR_partial_update
- Player: Fixed loading of glDrawBuffer calls when n is 0
- Player: The playing back of EGLClientBuffer data on Android now supports the new gralloc1 interface.
- GUI: Worked around a crash that could occur in rare cases when generating framebuffer attachment images
- GUI: Added GL_CLAMP_TO_BORDER as a recognised value for the GL_TEXTURE_WRAP_* parameters
- GUI: Fixed the displaying of the stencil parameters in the state widget
- GUI: Fixed displaying of the attribute value for eglGetSyncAttribKHR
- GUI: Fixed displaying of GL_VERTEX_ATTRIB_ARRAY_ENABLED in the state widget
- GUI: Fixed a bug in the buffer data viewer where data sometimes wouldn’t show up
- GUI: Fixed a crash in image analysis that could occur in certain situations if glBindVertexBuffer was present
- GUI: Fixed a crash that could occur if the trace file contained calls to glVertexAttribBinding
- GUI: Fixed a crash that could occur if the trace file contained calls to glVertexAttribFormat
- GUI: The values of uniforms of type GL_SAMPLER_EXTERNAL_OES now display in the program viewer widget.
- Updated manual to HTML format
- Updated manual to HTML format
- PVRScope User Manual: PVRScopeComms functions take a pointer, not a reference: corrected the code examples.
- Updated manual to HTML format
- Added support for 3ds Max 2018.
- Added support for Maya 2018.
- Blender: Added support for Custom Normals.
- 3ds Max: Added support for exporting procedural textures as PVR files.
- Strips are now stitched into a single one using degenerate polygons. Sending a single strip per mesh is more optimal than sending multiple small ones. This behaviour is now hard-wired and cannot be toggled by the user.
- Added Cancel button to the export window.
- Fixed plug-in crash in Maya 2017 for Mac OSX.
- Fixed strip primitive output that was exporting strips of length one (bug introduced in v2.22).
- Fixed disabling bone-batching. Now a single bone-batch is exported with the full mapping from node_id to bone indices. Please, refer to the documentation for more details.
- Fixed exporting skin meshes with more than 4 bones per vertex. The 4 more relevant bones will be moved to these slots.
- Updated documentation with new sections for Bone Batching and PVR Textures
- Updated manual to HTML format
- PowerVR Series8XT support.
- PVRPerfServer now sends and PVRTune can now show the CPU core description. It is shown in the counter description for the per-CPU-core counters.
- We now track max frequency, current frequency limit and current frequency.
- Monitor window
- Fixed the missing counter “components”. E.g. charts will now show the contributions from known/tracked PIDs.
- Can now click on a counter and the Properties window will update. Just like clicking on a counter anywhere else.
- Also show the counter source in the item name.
- Rename counter “texturing load” to “texturing active”. 100% means that it’s doing something 100% of the time, but not necessarily that it is 100% loaded.
- Describe a “word” in the “GPU memory words per second” counter descriptions.
- GPU Memory counters now describe the bus width as “(often 16 or 32 bytes)”.
- Tweak CPU counters created. Distinguish between CPU Active (old CPU Load) and CPU Load (taking into account CPU throttling).
- Per-PID “CPU load” counters renamed to “CPU active”.
- Counter Table: fix issue where disconnecting and then reconnecting would cause the counter table to collapse all items.
- Limit the maximum number of recently used files/servers to 24.
- No longer disable any of the Open methods during/after connection. We have to be able to handle a file drag&drop at those points in time anyway.
- Disable “Restore Default Panes” when not connected.
- Connection Menu: ditch New. Added Android shortcut. Recents: start from Alt+1 because Alt+0 requires very long fingers.
- Fixed render of stacked Marks trending to black: rather than drawing any & all stacked Marks (which is slower and trends towards black), now calculate an average colour and draw once.
- Per-task string: re-order data to be more like an address (more specific first, less specific last). Add the word “duration” after the task time. Add the CID name after the CID number, when there is one.
- Slightly simplify an option by inverting it in the GUI, naming it “equal sized timelines” rather than “equal sized timeline levels”.
- Fix bug where the meaning of equal sized timelines vs timeline levels was inverted.
- Updated manual to HTML format
- New framebuffer downsample snippet
- New cubic filtering snippet
- Updated PowerVR Performance Recommendations The Golden Rules
- Updated PowerVR Performance Recommendations
- New PowerVR Low Level GLSL Optimisation
- Updated PowerVR Hardware Architecture Overview for Developers
- Updated PowerVR Instruction Set Reference
- Updated PowerVR Supported Extensions
- Updated PowerVR Framework SDK document with all the new Framework (Vulkan) details
PowerVR Tools and SDK 2017 R1
PVR Framework v4.3
- Replaced the getNativeObject virtual function of all PVRApi objects with a more efficient native_cast function.
- The PVRPlatformGlue functionality has been wrapped into the PVRNativeApi library, since there is no longer a benefit in separating the window/surface creation part of the API from the rendering part. This greatly simplifies several aspects of both libraries.
- Cleaned up PVRNativeApi code to make calling utility functions more intuitive.
- Added support for multiple queues and queue families, with an algorithm for assigning a number of different queues for different reasons based on what is available on the platform.
- Added multithreading support to the Framework, allowing a simple interface to create Shared contexts for OpenGL ES, or multiple Queues for Vulkan. Also provided loader and uploader classes for easily loading textures from different threads.
- Added two asynchronous loading classes to the Framework, allowing easy asynchronous streaming of Textures and potentially other assets.
- Moved all utilities that use the PVRApi abstraction into a new PVREngineUtils module, as well as the UIRenderer. Removed the old PVRUIRenderer module.
- Added some missing std::forward calls in the RefCountedResource that would have prevented “perfect forwarding” of parameters to the construct functions. Perfect forwarding now works as expected.
- Added a helper function to create suitable Sampler object for sampling the hardware camera Texture provided from a CameraInterface object. Fixed the wrapping mode to Clamp as it was wrongly left to default Repeat.
- PVRCore, having grown quite a bit since the original release, has been restructured into different folders. Top-level items are still available in the Core folder, whilst individual files can be accessed from the folders labelled Base, DataStructures, Interfaces, IO, Logging, Math, Strings and Texture.
- PVRNativeApi and PVRApi have been decoupled from PVRAssets by moving the Texture code (except loaders) from PVRAssets to PVRCore. Removed other dependencies from PVRNativeApi and PVRApi, so that PVRAssets now only depends on PVRCore.
- Added the DepthBias feature – that was only implemented for Vulkan – to OpenGL ES.
PowerVR SDK v4.3 Examples
- Returned the Camera Interface examples to use target Android level 22 instead of 24 in order for the system to not expect runtime permissions in android Marshmallow/Nougat systems.
- Changed the HelloAPI Vulkan examples to use FIFO (vsync) instead of MAILBOX(triple-buffering) as the former has much better battery economy. Changed the running time to 600 frames (usually 10 seconds).
- Added an additional condition in the Skinning PFX to additionally ensure that only tangent-spaced models get rendered with the skinning/bumpmapped model.
- Fixed a race condition in GnomeHorde that might cause a deadlock in some circumstances.
- Added a new example (Multithreading) showcasing how to use the Framework asynchronous loaders to do a loading screen or other asset streaming use cases.
SDK v4.3 Builds
- Updated the platform headers to properly support the latest Android NDK.
- Added OpenGL ES 3.2 support.
- Added the following extensions: GL_OVR_multiview, GL_OVR_multiview_multisampled_render_to_texture and GL_OES_viewport_array.
- PVRTraceGUI: Fixed saving out of trace files which was broken in the previous release.
- The width and/or height of a window surface is now updated during eglMakeCurrent calls if either dimension is larger than at any previous point during the recording period.
- The glProgramBinary call no longer throws a GL_INVALID_ENUM error when DisableBinaries is enabled. Instead, the call fails without error, as if the binary has become incompatible with the driver.
- If there is a server name mismatch, warning pop ups will appear.
- Correct counter descriptions: Times are always scaled to seconds, but the descriptions were claiming times are in milliseconds.
- Now index parameter management out of memory events from the TA and highlight them in black.
- Add a total memory (read + write) words/sec counter: GPU memory words per second.
- “File\Export\Export counters to CSV…” no longer includes empty columns.
- Counter Table: If there are no HW counter groups, counters are shown. E.g. SGX544 using old DDK branches 1.7 and 1.8 were needlessly missing counters generated from timing data. Only counters sourced from HW counters should be missing.
- Counter default colours:
- Options window: new option to choose the default counter colours. This can be set to default (ie previous behaviour), a fixed palette of 32 or a fixed palette of 16.
- If the setting is changed, counter colours are set to the new defaults immediately.
- Counter colours can still be overridden manually.
- PID colours are unchanged (ie they use the default behaviour).
- Increased width of colour icon. These are used for counters, PIDs and timelines. Removed the subtle gradient.
- Graph panes: The user can now choose whether or not to show the ruler, using the right-click context menu. Timing data and graphed counters will no longer overlap the ruler, but text will; hence showing the ruler allows more space to display text about items under the mouse pointer.
- New docking windows list all Timelines, each with a tick box to control visibility. Also display an icon with the timeline colour, if there is one. If Timing or Marks are enable, only render power/state data is shown in the background, while the UI timeline labels are shown on the left.
- PID docking window: Now allows sorting by column.
- PVRScope Android build now builds both a static library and also a dynamic library.
- Added support for EGL_EXT_client_extensions and EGL_EXT_platform_base.
- Fixed a bug on Linux where no multisampled framebuffer configurations were being generated.
- Fixed a crash which occurred when setting an attrib divisor without an attribute array.
- Fixed a possible crash in case where context is made current after its shared context is deleted.
- Fixed a bug where no default VAO was generated for shared contexts.
- Fixed support for GL_OES_EGL_image.
- Fixed a bug where the current program was being incorrectly stored as shared state.
- Fixed crash when an activity cannot be found to view the PDF user manual.
- Added a PVRTrace config option to disable shader and program binaries (on by default).
- Added a PVRTrace config option to record the names of calls to unknown extension functions (on by default).
- Added a PVRTrace config option to exit after the last frame is recorded (on by default).
- Added support for Adjacency Lists to be used in geometry shaders.
- Added support for half-float vertex type.
- Added option to not export hidden objects.
- Added a switch to disable bone batching. This allows exporting any number of bones without splitting the mesh.
- Updated documentation with new features and a clearer explanation on how to install the plug-ins manually.
- Removed automatic pointer focus when hovering over vertex type combo-boxes. This avoids the common mistake of setting unexpected formats for the vertices when scrolling the view.
- Standalone version can have now file-association with the formats FBX, DAE, 3DS, DXF and OBJ.
- Relaxed check for iGame version. This will allow the plug-in to work on newer released updates to 3DSMax.
- Maya Plug-in: Added QT libraries to the package. This solves a crash on MacOS when the plug-in was trying to use the custom QT libraries bundled with Maya.
- Stand-alone FBX:
- Fixed child-object position when parent pivot position is not the default.
- Fixed problem when exporting normals per control point. It was generating too many vertices with the wrong normal values instead the real shared normal.
- Renamed Triangle Sorting methods to make them more meaningful and added a fast stripping method.
- Fixed default window width to accommodate the profiles list more comfortably.
- Blender plug-in for Linux. Fixed hang after export.
- Enhanced Geometry Settings interface. Now optimisations are fully controlled by the user instead being triggered by PVRGeoPOD itself.
- 3dsMax plug-in. Removed folder called 15 as all versions of 3dsMax up to 2017 are supported.
- Updated the documentation with the new features, and a clearer explanation on how to install the plug-ins manually.
- Updated POD Format Specification to account for new blocks (6021 Mesh Type and 6022 Adjacency Index List).
- Added a Vulkan API format filter to PVRTexToolGUI.
- Added helper functions to PVRTexLib to convert to and from Vulkan format enums.
- PVRTexToolGUI now outputs B10G11R11 instead of R11G11B10, as this is the actual format in the supported APIs. This matches the GL_RGB/GL_UNSIGNED_INT_10F_11F_11F_REV combination in OpenGL and DXGI_FORMAT_R11G11B10_FLOAT in Direct3D.
- Added plug-ins for 3DSMax 2016 and 2017.
- Added plug-ins for Maya 2016 and 2017.
- Added new compilers for Series7XT, Series8XE, and the Khronos reference compiler for SPIR-V.
- Added support for PFX3 format.
- Widgets are now all dockable/undockable.
- A syntax mode switcher has been added to the status bar.
- Improved the intuitiveness of the compiler selection UI, especially when switching tabs.
- Added a series of back-end compiler improvements, so compiler crashes are handled more gracefully.
PowerVR Tools and SDK 2016 R2
- Added builds for ARMV8 (64bits).
PVR Framework v4.2
- New Features
- PFX Specification 3.0, a complete overhaul of the PFX specification allowing a full description of a rendering situation including passes, subpasses, different auto or manual selected pipelines, buffer or uniform specifications and others. See Skinning example.
- RenderManager (beta), a new class designed to utilize the new PFX spec for almost completely automated rendering. See Skinning example.
- Added direct support for hardware Bicubic filtering (GL_IMG_cubic_filtering) to the Framework.
- PVRApi: Added references to all objects that are used in a CommandBuffer or DescriptorSet, so that keeping external references to these objects is no longer necessary. Affected objects: Buffers, Fbos, DescriptorSets, SecondaryCommandBuffers, Textures etc. Any object that is used in a command recorded in a command buffer will automatically be kept alive with reference counting until the command buffer is reset/rerecorded, as will any object that is added into a DescriptorSet.
- Added a command line option to contol the logging output (-loglevel=[critical,error,warning,information,verbose,debug]).
- Changed the EGL Create Context functionality to try out a lot more detailed configurations when trying to create a context.
- Added Tessellation capability, fixed support for loading tessellation shaders, added proper shader types for tessellation control and evaluation shaders.
- Updated the Vulkan upload texture code so that it uses Buffers (instead of images with VK_IMAGE_TILING_LINEAR, that may not be supported in some platforms) as staging for uploading texture data from disk.
- Changed the way descriptor set binding ids are interpreted. Previously, each binding had to be unique, which might cause problems (running out of id’s) in OpenGL ES, for uniformity with Vulkan. Now, the user can use the full range of bindings for each object type in OpenGL ES. The Framework will allow reuse of bindings and it is up to the user to use the strategy that works with the API he targets.
- Updated Android projects to use Gradle 2.14 (improve build times and stability).
- Updated the bundled header files to latest available versions.
- Added a full PowerVR Framework Development Guide document.
- Bug Fixes
- Fixed a bug where the size of the OpenGL ES implementation of pvr::api::Texture would not get its dimensions properly set when loaded from a file.
- Fixed a bug with iOS touch input.
- Fixed a bug where the array slices were calculated wrongly when loading Cubemaps in Vulkan
- Fixed a bug in the CommandBuffer::beginRenderPass overload which takes single clear color to clear all the color attachments of an fbo.
- Done a tweak in the Shell where if ExitRenderFrame or ExitShell were called, main() would return with code 1 instead of 0.
- Interface Changes
- Fixed a bug in the order/usage of CommandBuffer::DrawIndexed call, where for the OpenGL ES implementation, the Vertex Offset parameter was actually used as an Index offset (first index) and the firstIndex was ignored. Now, the IndexOffset is ignored, and if VertexOffset is used in an OpenGL ES context, an assertion is thrown.
- Changed the addAttachmentState function from implicitly assigning consecutive attachment indices to setAttachmentState which explicitly takes the assignment index.
- Renamed the GraphicsContext::getCurrentSwapChain() function to getSwapChainIndex(), like it is in the Shell class.
- Removed the GraphicsContext from the UIRenderer init(…) interface, since it can trivially be inferred by the RenderPass.
- Changed the updateBuffer interface to better map to both Vulkan and OpenGL ES. Now, on buffer creation, instead of a “hint”, buffers will take a “mappable” flag which indicates if the user requires a client-side mappable buffer.
PowerVR SDK v4.2 Examples
- Demos ported to the Vulkan API
- DeferredShading: demonstrates how to use multiple subpasses with framebuffer attachments using local memory.
- ParticleSystem: Compute physics.
- ExampleUI: Advanced 2D Techniques.
- PostProcessing: Simple multi-pass rendering demo.
- Glass: Advanced multi-pass rendering demo.
- PVRScopeExample: Reading and displaying GPU hardware counters.
- PVRScopeRemote: Information interchanges between application and PVRTune.
- New demo: OpenGL ES Multiview VR (Showing the Multiview extension for OpenGL ES).
- Standalone (CL/GUI)
- Added support for Autodesk FBX Format (*.fbx).
- Added support for Autodesk 3DS Format (*.3ds).
- Added support for Autodesk AutoCAD DXF Format (*.dxf).
- Added support for Alias Wavefront OBJ Format (*.obj).
- Enhanced support for Khronos COLLADA Format (*.dae).
- Optimsed the building of the edge list to speed up the sorting optimisation.
- Added better detection of rooted devices.
- Support for Android N.
- OCL Occupancy Calculator. A new tool to visualise how changes to OpenCL kernels would theoretically affect performance on hardware.
- Enhanced compiler configuration widget
- Per shader configuration.
- o Now more flexible and robust when handling external compilers.
- Added the Khronos reference GLSL compiler.
- Removed the ‘Optimise’ function which is now obsolete due to improvements to our offline compilers.
- New tabs are now correctly given focus.
- Keyboard tab key is no longer bound to ‘Open Find Dialog’ command.
- Multiple instances of PVRShaderEditor should now open correctly.
- External changes to a file are now detected correctly.
- Fixed issue where Windows user names which included whitespaces would prevent the compilers from executing.
- Fixed crash when calculating the bounding-box and vertex data was not interleaved.
- Built-in shader editor and profiler now exclusively handles PFX files.
- Now supports PVRTC compression of textures with dimensions larger than 4096 pixels.
- Added advanced config option “UniformBufferOffsetAlignment” to the “Tracing” section that allows the user to override the returned value of GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT and GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT. The value must be a multiple of the platform’s values and should be used when the value on the recorded device is different to the device you wish to playback/analyse on. To use the platform’s alignment do not define this value.
- Moved the DisableBinaries config option to the Tracing section of the config.
- Fixed the –optimised-memory option.
- Fixed the –delay option on Linux.
- Added option to specify the frame delimiter choosing from a list of suitable API functions.
- Fixed a bug in the frame caching where the render would fail if we failed to compress the rendered image.
- Frame caching now correctly gets refreshed when disabling/enabling calls.
- Disabling the render caching now correctly takes affect straight away instead of the next time a trace file is loaded.
- Fixed the formatting of hex object names in the ObjectDataViewer title so they match the formatting in EGLState widget.
- Fixed a lock up when exiting on some Linux devices.
- Fixed a crash that could occur when using network recording.
- Added all currently known values of EGL_LINUX_DRM_FOURCC_EXT to the egl attributes to string functionality.
- Added “File\Export\Export counters to CSV…”. This allows the user to enter a period in milliseconds; PVRTune calculates the counter values using the specified period and writes to a CSV file. New PVRTune command-line options: –periodms, –export-csv-timing, –export-csv-counters.
- Remove counter “triangles culled”.
- Add counter “Triangle ratio”, this is TA tris out / tris in. Affected by culling and clipping.
- Add counter “slot occupancy”.
- It is now possible to search for dynamic Marks.
- “Connection\Close” now has a keyboard shortcut of Ctrl+D. Convenience; “Disconnect”; End-of-Transmission character (EOT). (Was Ctrl+C, but this is normally used for copy & paste.)
- It’s no longer necessary to “right-click, copy”, Ctrl+C now works for that.
- PVRTune main window startup: now test whether the restored geometry is on screen. If not on any screen: place the window automatically.
- PVRPerfServer: handle the case where the OS CPU and memory usage counters may not have progressed if we are reading at a greater rate than CONFIG_HZ.
- PowerVR GX6650 devices: fixed missing device information in “PVRPerfServer Details” dialog box, and missing counters: 2D active, Compute active, Renderer active, Tiler active.
- PID window
- Fix properly showing PID colour-icons and a possible crash.
- Fix a possible Ctrl+C crash.
- Counter Table: using the keyboard cursor keys to move up and down the list now updates the Counter Properties window, just like when clicking on a counter.
- Can now use the Edit menu to choose between three clock transform algorithms: Auto, DDK or Specified Clock Speed. The default for “new enough” Rogue drivers is now DDK, otherwise the default is Auto.
- Improved performance of draw calls.
- Fixed a bug which caused memory growth when using glDebugMessageInsert.
- Fixed a bug where eglCreateContext would erroneously check for the presence of ARB_buffer_storage when an ES 3.1 context was requested.
- Fixed a possible invalid memory access in eglCreateSyncKHR.
- Fixed GL_TESS_EVALUATION_SHADER and GL_TESS_CONTROL_SHADER not being accepted by glCreateShader.
PowerVR Tools and SDK 2016 R1.2
PowerVR SDK v4.1.2
- Fixed a bug in iOS touch input where it could sometimes be very difficult to register a touch due to very small allowed pixel distance.
- Fixed a bug in the VulkanBumpmap example where Samplers were local and allowed to be destroyed while still in use.
- Changed the SwapInterval / VSync strategy to map better between OpenGL and Vulkan. The -vsync command line parameter now works with either (On, Off, Relaxed, Mailbox, Half) methods, or with SwapInterval numbers of (0,1,2,-1). Half is not usually supported on Vulkan (and will map to On), Mailbox is not usually supported in OGLES (and will map to Off).
- The Framework static library prebuild binaries are no longer packaged with the SDK to reduce package size.
- New PVRScope API: PVRScopeReadTimingData(). This function can be called periodically if you wish to access the start and end times of tasks running on the GPU. The first time this function is called will enable the feature; from then on data will be stored. If you wish to call this function once only at the end of a test run, call it once also prior to the test run.
- Fixed failure to start on OS X due to missing QT library.
PowerVR Tools and SDK 2016 R1.1
PowerVR SDK v4.1.1
- Re-introduced and enhanced the workaround for EGL context report on systems that claim overoptimistic capabilities.
- Several stability and memory corruption issues fixed for OpenGL ES and Vulkan.
- Fixed a double-delete bug and made the object wrapper destructors more defensive.
- Changed Linux builds default optimization level from O3 to O2 as this was causing instabilities with some GCC versions. This fixes pre-built demo binaries for Linux.
- SDKBrowser: Updated ReleaseNotes to reflect 2016 R1 and R1.1 releases.
- Fixed “strict” mode due to it being too strict, which caused issues on some AMD graphic cards.
- Updated Windows signature to SHA-2. This will stop the “The signature is corrupt or invalid” message.
PowerVR Tools and SDK 2016 R1
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.
- Brand new fully functioning Vulkan Backend.
- 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 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 needs the render pass and the subpass at the initialization.
- 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.
- Library: Fixed BRN58175. Declared and defined an empty default destructor for PVRTextureHeader to prevent the compilation of a default destructor in the linking binary.
- 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.
- 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.
- 3DSMax: Added support for 3DSMax 2016 SP2 (igame version 18.6.667.0).
- Added counter: “ISP pixel load”.
- Added “Overdraw” counter.
- Hide counters for cores that the HW does not have.
- 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.
- 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
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.
- Updated EULA to separate PowerVR SDK (now under MIT licence) and PowerVR Tools (with a revised free license).
- 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.
- 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.
- Updated to use Qt5.
- 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.
- The astcenc process is now spawned correctly in PVRTexToolGUI for OSX.
- 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.
- 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.
- Added support for Series6XE USC counters.
- PVRTune now supports just SGX DDK v1.7 onwards.
- Added recognition of the following HW: G6020, GE7400, GE7800, GT7200, GT7400, GT7600, GT7800, GT7900.
- Added support for PowerVR Series5XE GX5300.
- 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
- Connection window: Removed the “adb forward” tip, since we have the button now/li>
- 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.
- Fixed BRN57650: Re-enable ‘Specify Clock Speed’ in PVRTuneDeveloper.
- 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.
- 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.
- 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 (IGame version 18.0.873.0).
- 3DSMax: Added support for 3DSMax 2016 SP1 (IGame version 18.3.490.0).
- 3DSMax: Dropped support for anything older than 2013.
- Maya: Fixed an issue in 2015 which caused geometry to go missing in some scenes.
- Maya: Dropped support for anything older than 2013.
- Enums provided by EGL_EXT_buffer_age are now recognised.
- 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 modeAdded option to copy the image analysis/texture/fbo attachment contents to the clipboard.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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 now builds to a minimum API Level of 18 (was 14), which is Android 4.3 from July 2013.
- 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 Browse.
PowerVR Tools and SDK v3.5
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.
- 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.
- Fixed wrong OpenGL ES token use (GL_BGRA was defined and used instead of GL_BGRA_EXT).
- 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
- Added support for ASTC textures.
- BRN53734, BRN52880, BRN53241: Fixed loading of KTX textures with mipmaps.
- 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.
- 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
- Samsung Galaxy Note 3 SM-N9005
- 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 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
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.
- Added support for Android arm64-v8a, x86_64 and mips64.
- 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.
- 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.
- CPVRTPrint3D: Fixed out-of-bounds access.
- 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.
- Incorporated new icons in the GUI.
- 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.
- Updated icons to new consistent style.
- 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.
- 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).
- Added 2015 versions of Autodesk 3DSMax and Maya.
- Fixed channel order when loading PVR files in Maya.
- 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.
- 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.
- 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 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.
- No longer remember zoom or position between sessions. When loading from a file, automatically “view all” when complete.
- New icons.
- 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”.
- PVRPerfServer command-line:
- 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.
- 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.
- 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).
- 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.
- 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.
- 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:
- Fixed 2×2 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.
- 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.
- 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.
- 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
- 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.
- Added OpenGL ES 3.1 PC Emulation SDK for Windows and Linux.
- Added OpenGL ES 3.0 SDK for iOS and Android.
- 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.
- Context creation failures updated to contain requested API version.
- Added Android Camera Interface.
- Added missing types, qualifiers & built-ins for GLSL ES 3.00 syntax highlighting.
- Added GLSL ES 3.10 syntax highlighting.
- 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.
- 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.
- Maya: Fixed channel order when loading PVR files in Maya.
- 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:
- Fixed glPointSizePointerOES not being exported on Linux.
- 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.
- 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).
- 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).
- 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.
- 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:
- 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).
- Added support for IGame version 16.5.277.0 and 18.104.22.168.
- 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.
- The image analysis image now uses bilinear filtering when scaling the image below 100%.
- These enums are now represented by strings in the GUI:
- Added missing types, qualifiers & built-ins for GLSL ES 3.00 syntax highlighting.
- Added GLSL ES 3.10 syntax highlighting.
- The recording of clientbuffers now supports sampling the data once at time of egl image creation using config value 3.
- 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.
- 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).
- Scripts now generate a pvrtraceconfig.json file.
- Added OpenGL ES 3.0 support.
- 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.
- 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.
- 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
- 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.
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.
- 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.
- 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.
- Improved the Android OS lifecycle.
- Modified PVRShellOutputDebug on Windows to dynamically allocate its buffer instead of using a fixed size of 1024
- 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.
- 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.
- 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.
- 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.
- 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.
- Enable SPM counter in Developer build.
- Renamed some US counters to USC.
- Increase the maximum graph y-axis value that may be entered.
- 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.
- Fixed the exporting of .h/.cpp files from Maya and Max.
- 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.
- 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.
- 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.
Support & resources
Get your answers online with our comprehensive documentation, developer forum and our dedicated PowerVR developer support desk.