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