PowerVR Tools and SDK 2018 Release 2

SDK v5.2

sRGB Correctness:

  • In OpenGL ES, where appropriate and supported, EGL_KHR_gl_colorspace is used. Otherwise, shader-based gamma correction is applied prior to writing out final colour values to the on screen framebuffer.
  • In Vulkan, where appropriate, swapchains are now created using sRGB colour image formats.
  • Made use of sRGB versus linear image formats as appropriate, for textures used throughout the SDK.
    • PVRVFrame (PowerVR emulation library) must also be updated to ensure the demos run correctly.

Examples:

  • New: IntroducingPVRVk example – a simple tutorial for using PVRVk. It contrasts well with its sister example IntroducingPVRShell – which has the same functionality, but without PVRVk.
  • New: Image Based Lighting example demonstrating how to achieve Physically Based Rendering efficiently on mobile, including different metallicity and roughness values.
  • Updated: PostProcessing example has been completely rewritten to demonstrate a set of heavily optimised bloom post-processing techniques, mostly related to Gaussian Blur.
  • Added rules in Vulkan example CMakeLists to run Spir-V compilation as part of a pre-build step, improving ease of use and iteration times.
  • Added a CMake command to PVRScopeExample and PVRScopeRemote to copy the PVRScope libraries in the executable folder on Windows, where they are dynamically linked.
  • When passing the  -h or --help parameters, the application now displays the help text and exits, instead of running normally.
  • Changed OpenCLExample to use “classic” OpenCL instead of cl-hpp.
  • Bug fix: The frustum-culling algorithm used in the Navigation3D and GnomeHorde examples no longer has inefficient overdraw.

Framework:

  • Moved CommandLine to PVRCore for access from applications not using PVRShell, such as command-line applications.
  • Removed texture functions from the pvr::assets namespace (which is now reserved for Model related information) and up into the pvr:: namespace.
  • Removed the OpenGL ES context version parameter when initialising UIRenderer for OpenGL ES, as it can be inferred internally from the currently bound context.
  • Optimised various functions where std::vectors were used as local temporaries in functions as temporary scratch memory. Now they are only used if static memory overflows.
  • Split out all PFX-related functionality into its own PVRPfx project to avoid it cluttering PVRUtils.
  • Various bug fixes and improvements made to PVRVk and PVRUtilsVk:
    • Fixed some strict aliasing undefined behaviour issues that could potentially surface in -O3 builds:
      • All casts are now c-style or static-cast whenever suitable, instead of reinterpret_cast.
      • All setters use memcpy instead of type-punning.
      • All primitive types returned by value.
    • Added getDeviceMemory function for images.
    • Improved surface creation logic for handling DisplayMode surfaces.
    • Removed the unnecessary use of RobustBufferAccess in debug builds.
    • Improved the logic of creating/updating descriptor sets that could occasionally cause bugs.
    • Added support for configurable queue priorities.

General SDK:

  • Updated: Support for Android Studio 3.2.
  • Updated: Vulkan headers are now 1.1.92.0.
  • Updated: VMA is now version 2.1. This has enabled the following helpful debugging aids from VMA in debug builds:
    • VMA_DEBUG_INITIALIZE_ALLOCATIONS
    • VMA_DEBUG_MARGIN
    • VMA_DEBUG_DETECT_CORRUPTION
  • Vulkan GLSL shaders have moved from “#version 450” to “#version 320 es” so that the more appropriate mobile shaders rather than desktop shaders are being used. This ensures that precision qualifiers are appropriately applied.
  • Improved use of shader precision qualifiers throughout the SDK. highp is now used only in places where using mediump would result in a loss of precision.
  • Cleaned up the CMake build system for more intuitive CMakeLists.txt files. Common.cmake is now broken down into:
    • Common.cmake
    • PlatformLibraries.cmake
    • PlatformFolders.cmake
    • Functions.cmake – now contains commonly-used functionality in functions or macro format, greatly improving the readability of CMakeLists.txt.
  • Added missing support for properly loaded ASTC textures.
  • Increased the default window resolution from 800×600 to 1280×800 to better represent modern mobile scenarios.
  • Improved support for LunarG Vulkan validation layers on Android, packaging them into debug apk builds for a better “out-of-the-box” experience.
  • Replaced the bundled Windows glslangValidator to use static linking, to avoid any MSVC++ dependencies.
  • Incremental updates to bundled GLM, pugixml, and Android validation layer libraries (I7d74b42f762f0ee7972fa8ad381f7aec502c19ed) and glslangValidator (glslang version: 7.8.2853).
  • Improved selection of xlib/xlib-xcb/xcb for Vulkan.
  • Removed error-out, and defined suitable flags to GLM to allow building (in pure mode – no SIMD) on older APPLE compilers.

PVRVFrame v10.9

  • New: Correct support for sRGB.
  • ES 3.x contexts are now elevated to ES 3.2 to replicate the behaviour of PowerVR drivers.
  • Bug fix: Fixed glGetProgramResourceIndex so it returns the correct index value.
  • Bug fix: Fixed glSampleCoveragex which was not correctly handling value.
  • Bug fix: Fixed a bug in shader translation where PLS variables were not being converted correctly when used as an argument.
  • Bug fix: Fixed a rare case of textures becoming unmapped when using glCopyTexSubImage.
  • Bug fix: Fixed vertex attributes not being tracked correctly when using glVertexAttribIPointer.
  • Bug fix: Fixed a crash in EGL initialisation on macOS.

PVRTune v14.146

  • New: PVRPerfServer can now be deployed and launched automatically to Linux (via ssh) or rooted Android (via adb) devices from PVRTune GUI. Users can now “click and connect” instead of installing PVRPerfServer manually.
  • PVRPerfServer command line options can be set from the connection window before a connection is established.
  • “Sort by name” and “sort by reference” have been added back to the Timelines window.
  • Updated: The Monitor window now allows switching between the (default) Bar and Graph view. The new Graph view displays the critical loads as a graph rather than an averaged bar.
  • New: Statistics Report window, which can be accessed via the Monitor window. Statistics Report has two modes: Frame and Range.
    • Frame mode: PVRTune consolidates an entire frame’s worth of data into a manageable layout for inspection. It also displays critical counters over the range defined by the frame. Selection of the frame can be made from the timing graph.
    • Range mode: PVRTune displays counters for a user-defined selected range on the timing graph. This data may also be exported to JSON.
    • Export to JSON is also available via the command-line with these new options:
      • --frame
      • --export-json-reportstats-frame –frame) to JSON>
      • --range-start-us
      • --range-length-us
      • --export-json-reportstats-range –range-start-us and --range-length-us) to JSON>
  • Updated: GPU memory counters as follows:
    • “GPU memory read words per second” has been renamed to “GPU memory read bytes per second”. The value now represents bytes instead of words.
    • “GPU memory write words per second” has been renamed to “GPU memory write bytes per second”. The value now represents bytes instead of words.
    • “GPU memory words per second” has been renamed to “GPU memory total bytes per second”. The value now represents bytes instead of words.
  • New: GPU memory counter:
    •  “GPU memory interface load” – the counter value represents the percentage of GPU memory bus utilisation, which is the interface between main memory and SLC. This is derived as: (total bytes read + total bytes written) / theoretical peak bus transfer rate.
  • Significantly reduced the amount of packet loss over networked connections when large amounts of data are being streamed to the client.
  • Bug fix: When using the command-line, PID and RTData colour tips are now shown on timing data.

PVRScope:

  • New: There is now a Mark on the timing graph when the connection name is received, and when the connection is gracefully closed.
  • New: There is now a time range indication that the connection was live, based on the events received.
  • Client and Scope timeline names are now clearer.
  • libPVRScopeServices.so fix for Linux, now linked to runtime.

PVRTune Complete only:

  • New: Support for Vulkan and OpenCL client streams and events subject to DDK compatibility. See the user manual for a full list of supported API events.
  • New: Timeline showing Vulkan Debug markers.
  • Device information (variant, series, clock corrections) and any warnings are now displayed even when there is no HW stream – for example: NoHW drivers.
  • Device warnings are now displayed when a PVRTune instance disconnects/reconnects to the same file/server.
  • “Cycles per*” counters no longer use a fixed number of 16 for the number of ALU pipes. They now use a new per-BVNC capacity: “eCapALUPipes“.
  • When exporting counter definitions to CSV, the description is now written last, and any newlines are converted to two characters.
  • TA kick event properties now show the draw call count. This is the number of draw calls that were grouped into the TA kick task.
  • TA kick reason will show “eglSwapBuffers” if the TA kick was caused by a call to eglSwapBuffers.
  • New: Support for two new Host (kernel module) stream packets:
    • Host Device Info: shows the current device health status.
    • Host Info: shows the per-PID driver memory usage statistics.
  • New: Host memory usage counters, which are only available when Host Info packets are enabled in PVRPerfServer and supported by the DDK:
    • Total Host Memory Usage.
    • Graphics Memory Usage (per-PID).
    • Kernel Memory Usage (per-PID).
  • Bug fix: Queued tasks could be incorrectly identified as a HWCore task.

PVRGeoPOD v2.25

  • New: Support for 3ds Max 2019.

PVRTrace v3.12

  • Player: New: --timestamp-calls command-line option that will print out a timestamp before the defined calls are played.
  • Player: Bug fix: Fixed an issue where playback of glReadPixels would be skipped in some instances.
  • Player: Bug fix: Fixed playback of glGetInternalformativ.
  • Brought the exported shader filenames inline between the player and the GUI.

PVRCarbon v0.2

  • New: OpenGL ES support.
  • Recorder: New: Frame delimiter option to control how the recorder splits an application into frames.
  • Recorder: New: Disable shader binary option.
  • Recorder: New: Options to override vendor, version, and renderer strings.
  • Recorder: New: Option to disable extensions at record time.
  • Recorder: New: Option to define the location of libEGL and libGLESv2 on the host system. If undefined, PVRCarbon will attempt to locate them.
  • Recorder: Renamed exitAfterPresent option to exitAfterFrame.
  • Recorder: Updated to Vulkan version 1.1.83.
  • Recorder: The prefix for options when set as android properties is now “pvrcbn.” instead of “pvrcarbon.“.
  • Player: New: --timestamp-calls command-line option that prints out a timestamp before the defined calls are played.
  • Player: New: Exporting to debuggable C++ code now supports multi-threaded recordings.
  • Player: The cpp exported code now copies the data and shaders to the executable folder at build time.
  • Player: Implemented the display surface path in the C++ exporter for the generic create_surface implementation.
  • Player: The C++ exporter will now correctly set up the displaymodes and their displays.
  • Player: Added fallbacks for VK_FORMAT_S8_UINT and VK_FORMAT_D16_UNORM_S8_UINT if they are not supported.
  • Player: Added NvOptimusEnablement and AmdPowerXpressRequestHighPerformance exports to tell the AMD and Nvidia drivers to use the most powerful GPU if multiple exist.
  • Player: Bug fix: Fixed a crash that could occur if the expected data file is missing.
  • Player: Bug fix: When detecting if PVRTC is supported, the extension is now correctly checked for.
  • GUI: When exporting to C++, all the files will now be exported to a unique folder in the location selected.
  • GUI: Added support for remotely recording a debuggable application on Android via adb.
  • GUI: Bug fix: Fixed dependency generation for GetDisplayModePropertiesKHR
  • GUI: Bug fix: Fixed dependency generation for GetPhysicalDeviceDisplayPropertiesKHR
  • GUI: Bug fix: Fixed a crash that could happen when closing.
  • GUI: Bug fix: Fixed a possible infinite loop that could occur when using the remote recorder.
  • GUI: Bug fix: Fixed exporting of spv files.

Documentation

  • Updated the “Contact Us” page in all user manuals to reflect latest links and support pages.
  • Improved readability of Performance Recommendations, Golden Rules, Compute, Navigation Techniques, Low level GLSL Optimisations.
  • Improved readability, and information about new features with the PVRTune user manuals.
  • Improved appearance and readability of SDK Browser.