PowerVR Tools and SDK 2017 Release 1
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.