Previous Tools Release Notes
SDK
- ASTC as preferred format over PVRTC.
- Fixed validation errors in four SDK examples (HybridHardShadows, HybridReflections, HybridSoftShadows, RayTracingDenoising).
- Updated toolchains for QNX (armv7, armv8, gcc-x86_32, gcc-x86_64).
- Extended max swapchain number in all Vulkan demos, making swapchain images completely dynamic for any swapchain number.
- Added new module for GL ES Safety Critical applications on Automotive.
- Subgroups Demo validation: Verification subgroup size is greater than zero.
- Fix in HelloRayTracing Vulkan Demo removing unneeded memory properties for buffer allocations.
- Fix in PipelineCache Vulkan Demo to return correct pipeline cache size.
- PVRScope libraries update to PVRTune Developer 23.1.
- Added new GL ES Safety Critical Example: Automotive Surround View.
- Added new GL ES Example: Shader Based Anti Aliasing Demo.
- Added new Vulkan Example: GPU-controlled rendering.
- Added new Vulkan Example: SPH Fluid simulation.
- Added new Vulkan Example: Timeline semaphores.
- The documentation from this repository has been moved to https://docs.imgtec.com/
PVRCarbon v0.11
General
- Add vkQueueWaitIdleto list of custom delimiters.
CLI
- Add Android command-line binaries for PVRCarbonFrameAnalysis, PVRCarbonTrim, and PVRCarbonToCpp. These are intended to be ran from an adb shellon powerful rooted Android devices for times where analysis/trimming operations can’t be performed on Linux/Windows platforms.
- Add command-line option –frameto PVRCarbonFrameAnalysis to specify the frame to analyse.
- Fix invalid unordered_map<K, T> keyerror seen with PVRCarbonToCpp when exporting some Vulkan recordings with the –disable-surface-replacement
- Improve validation of –uid-rangeand –frame-range command-line arguments.
Export To C++
- Improve maximum path length handling.
- Improve buffer device address handling.
- Add support for VK_KHR_ray_tracing_pipelineand VK_KHR_acceleration_structure.
GUI
Frame Analysis
- Add data viewer to Buffer objects.
- Fix displaying OpenGL ESdraw indirect data in the Input Assembly widget.
- Add support for viewing vertex attribute data.
- Add support for viewing uniform, uniform buffer, and storage buffer data.
- Fix crashes seen when exporting some tables to file.
Layers
- Add support for handling and updating VkImageFormatListCreateInfoin the format emulation layer.
- Add VK_LAYER_POWERVR_gpu_timestampswhich is a Vulkan layer that can be used to provide accurate timing information using Vulkan’s timestamp queries mechanism.
Player
- Add option –api-debug-report-levelto define the severity of messages returned by the Vulkan validation layers when –enable-api-debug-report is enabled. The player now defaults to showing errors
- Fix a bug in –capture-frameswhere the last capture may not be written to file.
- Remove option –ignore-capture-replay-compatibility. The player will now warn if the playback platform is different to the recorded platform but will attempt to use recorded device addresses if the capture replay feature is supported.
- Rename –show-windowsto –create-windows and clarify its behaviour in the documentation.
- Add –hide-created-windowsoption to hide native windows on their creation. Currently only implemented for Windows.
- Add filtering of EGL_CONTEXT_OPENGL_NO_ERROR_KHRfrom eglCreateContext calls if EGL_KHR_create_context_no_error is unsupported.
- Add command-line option –drm-deviceto allow the user to override the default DRM device /dev/dri/card0 used for creating DMA buffers when playing back native buffers.
- Improve the selection of physical devices to better match the physical devices used at record time.
- Improve the robustness of the synchronisation used when rendering offscreen with –offscreen.
- Add command-line options –dump-gpu-timestamps, –dump-gpu-timestamps-pathand –dump-gpu-timestamps-base-filename which can be used to enable and configure the use of VK_LAYER_POWERVR_gpu_timestamps to provide accurate timing information during playback of recordings.
Recorder
- Disable VK_EXT_shader_module_identifierduring recording as it produces non-portable recordings. This extension and its features can be enabled by setting the disable_identifiers config option to false.
- Add config option PVRCARBON_native_buffer_drm_deviceto define the DRM device to use. If undefined, PVRCarbon will query /dev/dri/card0 – /dev/dri/card9 to find the device.
Trimming
- Add support for Vulkan timeline semaphores.
- Fix screenshot saving during trimming.
- Add command line argument –strip-recorded-framebuffersto strip screenshots while trimming.
- Add support for VK_EXT_debug_utilsand VK_EXT_debug_report.
- Improve the selection of queues used for trimmed resource initialisation.
- Add support for VK_KHR_ray_tracing_pipelineand VK_KHR_acceleration_structure.
- Add support for OpenGL ES sync objects.
PVRTune v14.156
General
- We no longer support rogueddk branches 1.6, 1.7 and 1.8; and we no longer support .PVRTune files from 4.0, 16.1, 16.2 or 17.1. Use PVRTune from the 23.1 release for that.
- Improve documentation of where Custom Marks will be displayed in PVRTune (in a PVRScope Timeline or in the PVRPerfServer Timeline).
GUI
- Implement DTEC-4444 and DTEC-4470: Improve Stream & TL identification in GUI. Improve Stream and Timeline names, prefix a Device colour swatch to each timeline (before the Timeline, normally PID, colour swatch).
- Implement DTEC-4649: PVRTune export Properties for all tasks to a TXT file.
- Fix DTEC-5126: A line of text is broken on the welcome screen of PVRTune.
- Fix DTEC-5129: Windows DPI-scaling crops view of Smooth spinner.
- Improve DTEC-5326: Vulkan client stream, fix occasional crash and improve performance.
- Implement DTEC-5424: Add descriptions for “2d|compute|renderer|tiler time” counters in PVRTune.
- Implement DTEC-5537 Feature request: Option to show precise counter values in PVRTune’s Counter Table. Added “Show precise values” to context menu.
- Implement DTEC-5620: Remove broken “Integrate Connection” option; now the Connect window will always be integrated.
- Fix DTEC-5622: Graph Pane context menu “Pause View” option: keep check state in sync and fix occasional need for duplicate keyboard shortcut keypresses. Also ensure the view is paused when viewing a selected time range.
- Fix DTEC-5685 Counter Table: “Show Selected” crashes for folders (should not be available).
- Implement DTEC-5673 Timelines docking window: Add context menu with Show All/Hide All options.
- Implement DTEC-5748: Show ContextID on GLES, OCL and OGL timelines.
- Fix DTEC-5756: Occasional miscoloured text: white text not readable.
- Implement DTEC-5845 PVRTune: Disable Clock Transform menu when no sub-menu options.
- Fix DTEC-5851: “PVRPerfServer Details” docking windows contents disappear when pressing ESC on keyboard.
- Fix DTEC-5855 PVRTune: Segmentation fault error when running PVRPerfServer with –nopid option on Ubuntu.
- Implement DTEC-5882 PVRTune: PVRPerfServer-> Details…. menu should be deleted.
- Implement DTEC-5883 StatsReport: Remove Context Menu, replace with controls.
- Fix DTEC-5885 PVRTune: Graph settings tab gets out of screen.
- Fix DTEC-6109 PVRTune: Incorrect numbering when adding new tabs.
- Fix DTEC-6113: HTML markup showing in Status Bar.
- Fix DTEC-6131: Dynamic DPI changes (i.e. move PVRTune between monitors with different DPI scaling) in graph panes. Fixes minor layout issues: enlarged line spacing, enlarged arrows, placement of items on HUD.
PVRScope
- Fix DTEC-4304: Allow PVRScopeComms to migrate between threads.
PVRPerfServer
- Implement DTEC-4785: PVRPerfServer command-line option –execto run a process and exit after.
- Implement DTEC-6110: PVRPerfServer –sendtoshould append “.PVRTune” if missing.
PVRTuneComplete
General
- Implement DTEC-4299: Read and display ExtJobRef. Group enqueue/fail with the begin/end on NNA devices.
- Implement DTEC-4415: Per-core power on/off events on NNA devices.
- Implement DTEC-4417: Export and display ‘priority’ on NNA (4NX) devices.
- Implement DTEC-4859: PVRTune documentation of NNA and GPU sources.
GUI
- Implement DTEC-5320: Vulkan Shader Analysis instructions generate a .txt file; update the “File/Load Shader Analysis…” file extension filter.
- Implement DTEC-4298: Show NNA clock cycles and calculated clock speed.
- Implement DTEC-5749: Allow ‘unknown’ client events to form a task.
- Fix DTEC-5953: Rogue MC2 DMCycle calculation can be incorrect.
- Fix DTEC-5831: Possible improper processing of Rogue MC2 counter readings. Also improve Properties view of “Counter Reset”, “Counter Config” and “Expected counter readings” with Rogue MC2.
- Fix DTEC-6129: “Duration” ToolTip should not display for child items.
PVRVFrame v10.15.4
- Fix warning Undefined behaviour: A GL error occurred and GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR was set for this contextwhich was being incorrectly output in some code paths.
PVRStudio v1.0.2
- New Remote Android deployment plugin. Allows to build native-only applications and deploy to any Android device.
- Android remote screen-capture.
- Enhanced documentation navigation and style and updated content.
- All system dialogs are now properly themed following the ID style.
- Enhanced Welcome landing page to make it simpler and quicker to navigate.
- Updated Profiling Compilers and SpirV-Tools for SpirV and GLSL analysis and profiling.
Profiling Compilers v23.2
- First release. Command-line wrapper for PowerVR GPU Profiling Compiler to allow inclusion in toolchains. The Profiling Compilers read GLSL, SpirV and OpenCL kernels and output profiling statistics and GPU assembly code in both in TXT and JSON formats.
SDK
General
- PVRUtils: Improved feedback on Vulkan for no compatible memory types found. Fixed incorrect mappability now only HOST_VISIBLE_BIT is taken into account.
- PVRVk: Added missing success check for vkDeviceWaitIdle. Fixed construction of pvrvk::DescriptorPool when using descriptors of types VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV.
- PVRScope: Fix SDK Make error when looking for libPVRScopeDeveloper.a library for Linux_armv8_64
- PVRShell: Migrated from wl_shell to the newer xdg_shell provided by wayland-protocols. Fixed Wayland surface-related errors.
- Framework: Added get supported depth stencil format overload without display attributes
Examples
- Ray tracing examples fixes: Allowed packing of transformation matrices for shaders when VkPhysicalDeviceLimits::minUniformBufferOffsetAlignment has value different from 64, fixed validation errors.
- OpenGLES PostProcessing demo: Changed default buffer mapping behaviour to be non-coherent. Added manual flushing for mapped buffers and -coherent flag option to enable coherent buffer mapping.
- Vulkan HelloRayTracing demo: Removed serialisation on renderImage, avoiding potential performance bottleneck.
PVRCarbon v0.10
General
- Update Vulkan support to 1.3.240.
Export To C++
- Allow VMA to use VK_KHR_dedicated_allocation if supported and enabled.
- Allow VMA to use buffer device address features if Vulkan 1.2 is used and the bufferDeviceAddress feature has been enabled.
- Allow VMA to use buffer device address features if VK_KHR_buffer_device_address is supported and enabled and the bufferDeviceAddress feature has been enabled.
- Fix the disabling of unsupported VkDeviceCreateInfo-pNext chain features.
- VkDebugUtilsMessengerCreateInfoEXT, VkDebugReportCallbackCreateInfoEXT and VkDeviceDeviceMemoryReportCreateInfoEXT are now ignored if used in pNext chains.
- Update the included VMA to v3.0.1.
Export To Text
- Add support for creating the output folder if it doesn’t exist.
- Fix the appended file extension.
- Add –export-results option to enable/disable the exporting of results.
- Add –export-arguments option to enable/disable the exporting of call arguments.
- Add –export-argument-names option to enable/disable the exporting of argument names.
- Add –export-struct-members option to enable/disable the exporting of API structure members.
Frame Analysis
- Add support for capturing VkSamplerYcbcrConversion information.
GUI
- Update the ‘Save As’ dialog to support the saving of individual APIs.
- The GUI will now offer to relaunch PVRCarbonPlayer if it crashes.
Frame Analysis
- Improve triggering of Frame Analysis when the Renderer isn’t active due to prior playback issues.
- Add support for displaying VkSamplerYcbcrConversion information.
- Add support for displaying Vulkan descriptor types, DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, and DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK.
- Add support for displaying VK_EXT_debug_utils and VK_EXT_debug_marker object names.
- Add support for displaying OpenGL ES 3.2, GL_KHR_debug, and GL_EXT_debug_label object labels.
- Add support for displaying VK_EXT_debug_utils and VK_EXT_debug_marker labels in the Task List.
- Add support for displaying OpenGL ES 3.2, GL_KHR_debug, and GL_EXT_debug_marker groups/markers.
- Fix opening of RenderDoc captures in the launched RenderDoc process.
Export To Text
- Add option to enable/disable the exporting of results.
- Add option to enable/disable the exporting of call arguments.
- Add option to enable/disable the exporting of argument names.
- Add option to enable/disable the exporting of API structure members.
Static Analysis
- Fix vertical widget resizing.
Player
- Change default behaviour for –capture-frames to make the images fully opaque.
- Add –preserve-alpha option to keep the alpha channel for captured frames intact.
- Implement playback of vkGetPhysicalDeviceCalibrateableTimeDomainsEXT.
- Implement playback of vkGetPhysicalDeviceSurfacePresentModes2EXT.
- Fix offscreen playback of glDiscardFramebufferEXT.
- PVRCarbonPlayer will now log the supported EGL/OpenGL ES extensions during playback of recordings which use EGL/OpenGL ES calls.
- X11 windows can now be closed by pressing escape or using the close window button.
- Fix playback of recordings which used VkSwapchains with fewer images than supported by the playback platform.
- Add support for playing back vkWaitForFences when VK_TIMEOUT is returned at playback time and VK_SUCCESS was returned at record time.
- Add support for playing back vkGetQueryPoolResults when VK_NOT_READY is returned at playback time and VK_SUCCESS was returned at record time.
- Fix the disabling of unsupported VkDeviceCreateInfo-pNext chain features.
Recorder
- On Android and Linux improve handling of SEGV_ACCERR read errors caused by incorrect application API usage.
- Fix a bug where libPVRCarbon.so would be kept loaded longer than necessary when using VK_LAYER_POWERVR_carbon.
Static Analysis
- Fix crashes seen when analysing failed vkCreateGraphicsPipelines calls.
Trimming
- Add support for trimming Vulkan recordings.
- Add –apis option to allow exporting a particular API from a recording.
PVRTexTool v5.5.0
GUI
- DTEC-4608: The diff mode UI settings are now persistent between mode changes.
- DTEC-4609: The grid size in a new image view now defaults to the most recent value that was set by the user in any other open view.
- The encode window now displays the new texture size (based on the currently selected pixel format) and relative percentage change from the textures current pixel format.
- Add new Texture Info dialog which displays the textures vital stats and metadata, this dialog can be accessed by clicking on the info button in the top-right hand corner of the image viewer.
- DTEC-4541: Fix incorrect search results returned by the texture format BPP filter in the encode window.
- DTEC-4593: Replace the bias value control in colour diff mode with buttons that allow the user to toggle between absolute and signed difference modes.
PVRTexLib
- Add support for Colour, Tolerance and Blend diff functionality to the public C API. New APIs include; PVRTexLib_ColourDiff, PVRTexLib_ToleranceDiff and PVRTexLib_BlendDiff.
PVRTune v14.155
General
- Implement DTEC-4855: Support RGX_HWPERF_GPU_STATE_CHG data. Enable via “PVRPerfServerComplete –DeviceStateChg=1”, or via the PVRTune GUI option “Device State Change”. When enabled, a small additional timeline per GPU shows green for active, red for blocked, nothing for idle.
- Implement DTEC-1701: Add performance warnings on options that can increase the amount of data being generated.
- Implement DTEC-4951: fix formatting in PVRPerfServer Details / Devices (push content of shorter tab pages to the top).
- Fix DTEC-4866: PVRTuneDeveloper: GPU mem read/write/total counters zero/grey on volcanic.
- Implement DTEC-4984: Convert mdita documentation to rst/sphinx documentation for release.
GUI
- Fix DTEC-4826: incorrect installation path of the RISC-V variant of PVRPerfServer caused remote deployment to fail for RISC-V based platforms.
- Fix Counter Table context menu crash: right-clicking (for example) to bring up the context menu while disconnected would result in crashes.
- Fix Developer-build Counter Table display of counters for multiple devices by distinguishing multiple devices/drivers.
- Fix DTEC-5139: duplicate tab view names displayed on the main page.
- Fix DTEC-5130: per graph pane close button should only be available when there is more than one pane. Previously, the button was available but did nothing when only one pane is shown.
PVRTuneComplete
- Implement DTEC-4496: C++17 is required. Drop support for QNX Software Development Platform 7.0 (QNX700). Drop support for building with gcc 7.5.0 (Ubuntu 18).
- Fix DTEC-4758: erroneous zero core count possible on multi-core devices. Also show the multi core (MC) count in GPU string; MC count (if >1) will now show in PVRPerfServer “* GPU device:” output and in PVRTune Counter Table.
- Fix DTEC-4916: revert broken pipeline starved metrics. To use the latest default/built-in counters and groups, use menu “Edit/Custom Groups..”, click “Load Default”, “Apply” and “Close”.
- Fix DTEC-4951. Fix NNA device recognition. Fix .bin to .PVRTune file conversion when GPU & NNA drivers present.
- Fix DTEC-5076: HW counters unavailable for a small number of BXEP and CXM BVNCs.
- Fix DTEC-5094: Max PBE pixels per clock (PPC) incorrect for some Hood, 9XM, 9XE, 9XEP, BXM, BXS, CXTP, DXT.
GUI
- Implement DTEC-4268: show icon to indicate whether or not this binary’s default Counter Groups are loaded. Show a badge if some groups on some device(s) will require a special driver build with elevated SW-defined-limits on the number of HW counter readings that can be supported. When data is loaded, show a second icon indicating whether the current group, on the current device(s), require a special driver build; escalate to a red icon if the current driver does not report support for enough counters.
- Implement DTEC-4755: added support for special driver builds supporting more than 12 counters on volcanic devices. In the PVRPerfServer Details docking window: fixed bad formatting of the ‘unexpected counter blocks’ warning; do not warn about a ‘missing’ legacy PIPELINE_STATS counter block on volcanic; allow select and copy of warnings.
- Implement DTEC-4978: show current DriverID and StreamID in ‘raw’ CSV export.
- Implement DTEC-4866: Counter Group editing now supports a compatibility check for Developer build variants. This option is to allow PVRTune Developers to verify that a designed counter group will work in the Developer variant build, if used as the new default counters.
PVRVFrame v10.15.3
- Fix invariant replacement in GLSL ES to GLSL conversion.
- Fix swizzled PLS variable replacement in GLSL ES to GLSL conversion.
- Fix glRenderbufferStorageMultisample internal format validation.
PVRTexTool v5.4.0
PVRTexLib
- Fixed a file loading issue which resulted in some KTX2 files failing to load.
- Fixed a crash that could occur when compressing certain textures to PVRTC.
- The library now interprets 16 bit image files, such as PNG, as being in linear colour space.
PVRTune v14.154
GUI
- Fix a case where PVRScope time stamps could become disordered, causing certain events to disappear at certain zoom levels.
- Fix DTEC-3846: Metrics derived from certain counter sources can sometimes display unexpected and erroneous values on Volcanic devices.
- Fix DTEC-3912: Fix issues that caused parts of the user interface to become unreadable if the macOS system dark theme was used.
- Task [Time] “Duration” is now shown to only four decimal places.
PVRTune Complete
- Implement DTEC-4259: Support new HW performance counters added in Series CXTP and DXT devices.
- Implement DTEC-4297 NNA Export and display ‘core_mask’
- Implement DTEC-4416 NNA Per-core active times
- Implement DTEC-4300 NNA PID not being shown in KM tasks
- Implement DTEC-2690 HWPerf: support Pipelined DataMasters
- Add support for ePVRSSFWActKickCancel.
GUI
- Marks now also show any DeviceID value.
- Marks now also show event ordinals, which are easier to cross reference with data from hwperfbin2json and CSV Raw files exported from PVRTune.
- Vulkan client stream: differentiate activity properties sections by numbering each recorded command, and show the VulkanObjectID.
- Fix Statistics Report JSON view and export: identically named keys would overwrite each other, rather than be kept separate. Seen in Vulkan client stream data where e.g. many “Execute Commands” or “Bind Descriptor Sets” etc at the same level of the tree would collapse down to one.
- Added new groups in the Counter Groups window for Series CXTP/DXT (RT) devices.
- Implement DTEC-3703: Display the device capabilities, constants used in various counter equations, in the PVRPerfServer Details window.
- Implement DTEC-4459: Display compiler profiling statistics and disassembly for Vulkan shaders in the event properties window.
- Task [Time] “Duration” is now the parent item for the three duration values measured in clock cycles.
- Add DMCycle end Mark for timing tasks which have this data, and left align the horizontal black bar.
PVRPerfServerComplete
- Add –driver-gpu parameter; replaces –driver parameter, which still works but is marked as legacy.
- Add –driver-nna parameter.
SDK
- Changed instance creation methodology to ensure that applications target a specific version of Vulkan instead of targeting the Vulkan loader version on the device.
- Allowed users to initialise UI Renderer with a custom font, given an image view.
- Allowed users to set the flags required for the debug callback mesenger to log during the instance creation and destruction. Defaults to only errors and warnings.
- Allowed users to specify validation warnings to disable by passing a vector of IDs.
- Updated CMake to 3.18.
- Updated Gradle build tools to 4.1.2.
Examples
- Added new Vulkan Raytracing Example: Hybrid transparency.
- Added Vulkan Subgroups demo.
- Added new GL ES and Vulkan Examples: Shadows.
- Added new Vulkan Raytracing Example: Denoising.
- Added new Vulkan Example: YCbCr Texture Sampling.
- Explicitly set the targeted instance version. Previous examples would set the instance version to the highest one supported on the device.
- Simplified the Vk device extension feature loading, especially in the RT examples.
- Set the Vulkan raytracing demos to Vulkan version 1.1.
PVRCarbon v0.9
- Added a check in the state tracker for a valid current context before dereferencing it.
- Limited the symbols exported by shared libraries to only those that are necessary.
- Updated PVRCarbon Vulkan support to 1.3.204.
- Added an option to export the API errors to text files. Previously this was always enabled, but now it can be turned off, hiding all failed API calls from the text output as a result.
- Added the ability to export text files in CSV format.
GUI:
- Fixed displaying cube map level thumbnails in the frame analysis.
- Fixed a regression in the EGL context state model introduced last release.
- When performing a local capture on Windows, we now remove the .exe extension when generating the default filename.
- Added Android am instrumentsupport to the remote recorder. Instrumentation entry points for APKswill now be listed in the UI with the activities. If selected, am instrument will be used instead of am start for launching.
- Improved the error message seen if Android remote recording fails to set enable_gpu_debug_layers due to a lack of permissions. It now informs the user to enable “Disable permission monitoring” in “Developer Options” if the device supports it.
- Added glDrawElementsBaseVertexOESsupport to the frame analysis.
- The GUI will now update the displayed final frame number when it begins finalising the data instead of after.
- Added a statistics graph to give an overview of API usage across a recording.
- Updated all icons to be svg.
Recorder:
- Fix for catching exceptions that could occur if we fail to capture Vulkan buffer/image data when writing out the state.
- Fix bundling up the .pvrcbn file on Android when a signal is caught.
- On Windows and Linux we now search for all undefined host libraries when the user only provides paths for some of them. Previously we would only search if all paths were unset.
- On Windows we now package up the pvrcbn file if an unhandled exception occurs during recording.
- Added a texture data transcode step to the writing out of the texture state if the implementation read format of the queried texture data doesn’t match the expected texture level’s format.
- Added print_framesoption which can be used to output frame numbers whilst recording.
- Fixed a segmentation fault that could occur during setup on non-rooted Android devices.
- Improved forward compatibility support for unrecognised Vulkan-typed structures.
- Add state tracking of extension GL_IMG_framebuffer_downsample when not recording from the start of an application.
C++ Exporter:
- Fixed exported code of vkInvalidateMappedMemoryRanges when VMA is disabled
- Fixed a bug that in rare circumstances could result in pointer to array members of Vulkan structures pointing at an invalid address.
- Add exporting of eglQuerySurfaces that query for EGL_BUFFER_AGE_KHR. This stops eglSetDamageRegionKHR failing with EGL_BAD_ACCESS.
- Updated VMA version to v3.0.0.
- Added support for Vulkan Structure pNext chains.
- Updated the exported code to use gradle version 7.3.2 for Android builds.
- Added missing include to the exported h.
- The exported code has been updated to use the KDE Extra CMake Modules for finding Wayland and XCB dependencies.
- Fixed the generation of code for VkPipelineCacheCreateInfo when pInitialData is not null.
Player:
- Improve XCB and X11 window system support.
- On Windows, we now ignore dpi scaling.
- Remove command-line option –skip-failed-callsand make the skipping of failed api calls during playback the default behaviour.
- Add command-line option –do-failed-callsfor playing back calls that failed at record time.
- Add–skip-apis option to skip calls at playback time based on their api.
- Fix for–show-windows failing for OpenGL ES recordings if eglCreateWindowSurface re-uses handles.
- Fix offscreen rendering when resizing framebuffer attachments is required.
- Implement playback of glGetQueryiv[EXT] and glGetQueryObjectuiv[EXT].
- Made glClientWaitSync wait until the sync object is signalled if it was signalled at record time.
- Removed a double lookup of the object handle in vkDebugMarkerSetObjectNameEXT and vkDebugMarkerSetObjectTagEXT. This should fix any incorrectly reported playback warnings about failing to find the object.
- Added checks to vkCreateComputePipelines and vkCreateGraphicsPipelines to see if all extensions required (if any) for the requested shader stages are supported.
- Added support for saving A2_B10_G10_R10 and RGB565 framebuffers to the –capture-framespng code path.
- Captured frames will now be saved out by default with the filename _frame_.png.
- Added new option,–capture-frames-filename-template which can be used to define the filename template used when saving our captured frames.
- Added –skip-callsoption to skip calls at playback time based on their uids.
- Added–print-frames command line option which can be used to print frame numbers whilst playing back.
- Added –capture-frames-formatcommand-line option to specify the format used for captured frames. Current supported formats are png (default) or tga.
- The command-line option –log-levelnow supports ‘all’ as a value (–log-level=all). This option will enable all levels.
- Fixed playback of eglCreatePlatformWindowSurface[EXT]on Android and Wayland.
- Various bug fixes and improvements for playing back calls from VK_KHR_acceleration_structureand VK_KHR_ray_tracing_pipeline.
PVRTexTool v5.3.0
- Add support for loading single-part OpenEXR files.
GUI:
- Added a ‘Show Current In File Explorer’ option, which will open the folder containing the texture in the system file explorer. This option is available from the right-click tab-bar context menu, or via the File menu.
- Fixed an issue that could cause the undo/redo history to become invalid, resulting in unwanted image transformations being applied.
- Added a ‘pixel picker’ display output to the image viewer. Left clicking a texel will now persitantly display the texel co-ordinate and (RGBA) values, in addition to the mouse on-hover values.
- The current image dimensions (WxHxD) text is now displayed as part of the current Mip level.
- Removed the ‘Zoom’ text label in favour of a icon.
- UI now allows users to control the cube view’s vertical field of view.
- UI now displays the pixel value and cube face currently under the mouse cursor when in cube view.
- Fixed incorrect sampling of the +/-Y faces when in cube net view.
- Allow saving a texture in a PVR container as a C style header.
- Allow the user to customise the pixel display per image viewer via the View -> Set Pixel Display dialog.
- The user may pick from one of the following pixel display modes: integer, hexadecimal (applicable for integer textures only), float-decimal, or float-scientific.
- The user may also set the number of decimal digits for floating point modes.
- When a float mode is selected, texture data encoded as integer types will be displayed as a normalised value in the range -1 to 1 or 0 to 1.
CLI:
- The -diffoption is now accepted when the -f (format) option is present, this has the effect of diff’ing the transcoded input texture with the texture specified by -diff.
PVRTexLib:
- Fixed incorrect decompression of EAC RG11, which caused the red and green channel data to be swapped.
- Fixed a bug in the PVRTC compressor that could cause the compressed output to differ between runs when compressing with multiple threads. This was generally seen when utilising close to or the maximum number of threads supported by the host CPU and/or the system was being heavily utilised by other apps while compression was running.
- Fixed a bug in the ETC codec which caused the last byte of compressed data to not be set.
- Updated the PVRTC compressor to v1.228. This revision improves load balancing which in turn increases multi-threaded efficiency. Additionally, this update fixes a previous regression that was causing the compressed result to vary depending on the number of threads used to compress the input.
- Added the following texture comparison error metric functions to PVRTexLib’s public API: PVRTexLib_MaxDifference, PVRTexLib_MeanError, PVRTexLib_MeanSquaredError, PVRTexLib_RootMeanSquaredError, PVRTexLib_StandardDeviation, and PVRTexLib_PeakSignalToNoiseRatio.
- These APIs are also available via the Python wrapper (PVRTexLibPy) as MaxDifference, MeanError, MeanSquaredError, RootMeanSquaredError, StandardDeviation, and
- Added a overloaded constructor to the PVRTexLib API C++ wrapper that accepts a file path as a const char*.
- PVRTexLib_GetTextureDataSizenow returns a 64-bit unsigned integer.
- Enabled PVRTC support for texture dimensions up to 16k * 16k on Linux & macOS (same as Windows).
- Added new PVRTexLib_SaveTextureToMemory API to PVRTexLib (and PVRTexture::SaveTextureToMemoryto the C++ wrapper). This API is similar to the existing ‘save to file’ routines but allows for the file data to be output into a memory buffer, the API currently supports PVR, KTX, ASTC, BASIS and DDS file container types.
- Added a Decompress function to PVRTexLib’s public API and Python wrapper. This API provides a convienient way to decompresses a texture into the most appropriate format based on the textures ‘compressed’ format, for example a PVRTC compressed texture may decompress to RGB888 or RGBA8888. This API may also be used to ‘decompress’ packed formats into something easier to manipulate for example RGB565 will be decompressed to RGB888.
PVRVFrame v10.15.2
- Fixed ASTC glTexStorage emulation on Intel GPUs.
- Fixed a bug in glFramebufferTextureLayer that could cause an invalid operation error or the wrong texture to be attached.
- Worked around Intel link program error “Varying ‘gl_PerVertex;_IN’ has different block does not match across different shaders.” that could occur when using geometry shaders.
PVRTune v14.153
GUI:
- Automatic reconnection dialog box
- Now has a “Never” button to disable the feature.
- Preferences dialog box
- Now has a check box to enable/disable the automatic reconnection dialog.
- Now remembers its size and position on the desktop.
- Added keyboard shortcuts.
- Improved layout of the Warnings pop-up, often broken in the Developer build, and improved the layout/wrapping of the PVRPerfServer Details docking window (which combines Server Control, Server Details and Warnings), which improves behaviour at high DPI scaling settings or low resolution.
- Reduced minimum size of docking and central windows. This gives the the user the flexibility to make them very small if they wish to, so as to give space to other GUI areas; this is particularly useful at high DPI scaling settings or low resolution.
- PVRTune splash-screen/about-box: no longer low resolution and pixellated when OS high DPI scaling is enabled.
- Improved visual quality of icons when DPI scaling is in use: icons are now vector graphics.
- Counter Contributions
- Implement DTEC-2676: split counters, where meaningful, into contributions. Affects HW counters and Rogue ‘custom’ counters (Complete build only), CPU counters, and CPU perf counters. Show in Counter Table.
- Implement DTEC-3477: add new graph option “Fill Solo Graphs”: when a graph view has this enabled and one counter is graphed and Render Timing Data disabled, then the area under graphed counter will be drawn filled, with contributions shown as stacked graphs.
- Add Counter Table context menu option “Show Verbose Tree”. Shows counter contributions explicitly; disabled by default because showing a level in the tree for a single core/contribution is typically a poor use of screen space.
- Implement DTEC-3645: show counter contributions in “Export Counters to CSV”.
PVRTuneComplete :
- Added support for ePVRSSFWActFilterSet.
- eRGX_CR_PERF_BPS_TRIANGLE_TEST_TOTAL renamed (from eRGX_CR_PERF_BPS_TRIANGLE_TESTS_TOTAL) to match DDK.
- Added support for ePVRSSClientOpenCLMarkID_clCreateProgramWithIL.
- Added support for ePVRSSClientOpenCLMarkID_clSetProgramSpecializationConstant.
- Added support for ePVRSSClientTAKickReason_OutOfTABufferSets.
- Added support for PVRSS_POWERDOMAIN_DAUTES.
- Added support for PVRSS_POWERDOMAIN_MARS.
- ePVRSSTiming4PowerSafetyReset renamed (from ePVRSSTiming4PowerPHRPartial) to match DDK.
GUI :
-
- Fix DTEC-237 HWPerf: support GPU periodic HW reset events (PHR). “Power Safety Reset” events can now be seen.
- Display the MSAA mode in the properties window for Tiler and Renderer HW kicks when the OpenGL[ES] client stream is enabled (requires a compatible driver).
- “Resource Viewer” docking window, layout improvements to improve situations at high DPI settings (or low resolution) where this window is preventing docked windows from being made narrower:
- Remove margins to remove wasted whitespace.
- Enable word wrap on the string.
- Move the resource type combo box to be beside the resource scale factor, as they go together, and because scale factor is a parameter to “Capture”, not a view setting for the GUI.
-
- Add Time/Cycles/Ordinal abscissa modes. Abscissa choice is a per-graph setting.
- Clock and Ordinal modes are implemented by dividing the view equally according to the zoom level, then converting each per-pixel-column abscissa-range to time-range. This has the effect of squashing time between events, and allows all timelines and counters to be shown; e.g. no need to disable timelines that don’t have clock counter readings when in clock-cycle abscissa mode.
- Ordinal (logical sequence?) absicissa mode: when timelines are disabled, the events squash up closer; it’s the sequence of shown events that are evenly spaced.
-
- The properties widget now shows the shared EGL graphics context ID (if applicable) and context type (OpenGL, OpenGLES 1, or OpenGLES 3) when a eglCreateContext event is selected. (requires a compatible driver)
- Support cross-referencing API data (for example shader objects) between shared graphics contexts.
- Add shared context editor user interface (Edit -> Shared Context Editor) which allows the user to manually specify shared graphics contexts for OpenGL and OpenGLES. This UI exists to facilitate shared graphics contexts when capturing performance data from drivers that do not send the required data that would allow PVRTune to automatically deduce context sharing.
- Add Time/Cycles/Ordinal abscissa modes. Abscissa choice is a per-graph setting.
PVRPerfServer:
- PVRPerfServer now sends CPU time stamps with nanosecond precision (was microseconds).
PVRScope:
- Fixed a crash that could occur when reading counter data via PVRScopeReadCounters
- PVRScope now sends CPU time stamps with nanosecond precision (was microseconds).
SDK
- Updated SDK version to match GitHub release tags.
- Removed VK_LAYER_ARM_mali_perf_docfrom the framework, as the validation layer features has same functionality. Kept IMG_PERF_DOC for Imagination-specific best practices validation.
- Added new assets: Saloon POD scene and textures.
- Fixed OpenGL ES Image Based Lighting shader compile error on retail PowerVR devices.
Examples
- Added new Vulkan Ray Tracing Example: Hybrid Ray-Traced Refractions. It ray traces two dielectric torus meshes, including all the interactions between each of them and the rest of the scene elements and the environment, and rasterizes the remaining three scene elements which have a diffuse Phong shading.
- Added new Vulkan Ray Tracing Example: Fully RayTraced Hard Shadows.
- Added new Vulkan Example: Ambient Occlusion.
- Replaced VK_LAYER_ARM_mali_perf_docwith VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT in VulkanHelloAPI, VulkanIntroducingPVRShell, and VulkanIntroducingPVRVK.
PVRCarbon v0.8
- Updated PVRCarbon Vulkan support to version 1.2.198.
- Fixed packing of hard float builds so they go to Linux_armv7hfinstead of Linux_armv7.
- Changed Windows PVRCarbon’s console output to not write to file as UTF-16.
GUI:
- Added support for deploying the Player server to Android and remote Linux devices.
- Added support for capturing applications on the localhost and remote Linux devices.
- The option to export recorded framebuffers will now be greyed out if there are no framebuffers to export.
- Fixed an issue in the Frame Analysis UI where selecting a task may highlight multiple tasks.
- Added option to the Remote Recorder to control which process from an Android application to record.
- Fixed the check state for the currently selected Android Intent in the Remote Recorder.
- Improved the error message shown when Android remote recording fails to set “enable_gpu_debug_layers” due to a lack of permissions; now informs the user to “Disable permission monitoring” in the Developer Options if supported by the device.
Recorder:
- Fixed a logic error that stopped the state tracking being enabled for multiple range recordings if the first range started at 0.
- Fixed the SONAME of the non-versioned recording libraries so they work with older non-versioned implementations.
- Added /usr/local/lib/* paths as possible locations to find the host drivers if the user hasn’t specified them.
- Fixed a crash that could occur during recording when framebuffer capture was enabled.
- Added the ability to define repeating frame ranges when recording. The frames option now supports ‘…’ which will repeat the previous range as many times as needed e.g. “0-9,…” will be the equivalent of defining “0-9,10-19,20-29” etc. An offset can also be defined by placing a number before ‘…’ e.g. “0-9,15…” will be the equivalent to “0-9,15-24,30-39”.
- Theframes option is now stricter and requires that defined ranges don’t overlap and are defined in ascending order.
- Themodulus frames option (e.g. %12) has been removed. The same functionality can be achieved with “0,n…”.
- Added tracking for GL_IMG_multisampled_render_to_texturewhen not recording from frame 0.
- Fixed an issue where when not recording from frame 0 the tracked internal format for generated mipmap levels may become invalid.
- Improved forward compatibility support for unrecognised Vulkan-typed structures.
C++ Exporter:
- For portability reasons, we now strip out EGL_ANDROID_get_frame_timestampscalls from exported code.
- Fixed exported VkClearColorValuesnot correctly handling NaN and infinity values.
- Fixed a crash that could occur when exporting a gl call and there is no current context. The exporter will now display an error and skip any gl calls with no current context.
- Fixed a bug where VkSpecializationInfopData would go out of scope before it had been used for pipeline creation.
- Fixed the case of the exported EGLuint64KHR
- Added simple Vulkan return code checking. This feature can be disabled by setting the cmake option ASSERT_ON_VK_ERROR to OFF.
- Addedsimple EGL error checking. This feature can be disabled by setting the cmake option ASSERT_ON_EGL_ERROR to OFF.
- Added simple OpenGL ES error checking. This feature can be disabled by setting the cmake option ASSERT_ON_GL_ERROR to OFF.
- Added simple OpenCL return error code checking. This feature can be disabled by setting the cmake optionASSERT_ON_CL_ERROR to OFF.
- Updated dynamic.cpp for both OpenGL ES and EGL to use ‘using’ for defining their function pointers.
- Android release builds will now use the debug keystore for signing if the user does not define one. This allows the user to easily create release APK files for testing.
- The exported code now contains cmake toolchain files (cmake/toolchains) for cross-compiling on Linux for armv7, armv7hf, armv8, x86_32, and x86_64.
- Fixed a scenario where a filename with numbers after the full stops could generate an invalid default Android package name.
- If available, clang builds will now use the LLD Linker.
- When exporting vkCreateSwapchainKHR we now increase minImageCount if it happens to be smaller than the number of swapchain images created at record time. This ensures the swapchain is created with the correct number of images used by the application.
- Vulkan objects that have the same value at record time now get their own variable names during export.
- vkGetPhysicalDeviceSurfaceSupportKHRis now exported as the validation layers expect it to be called.
- Fixed the generated code for VkPipelineCacheCreateInfo when pInitialData is not null.
Player:
- The player now adjusts a VkSwapchainminImageCount during playback creation so it falls in the range reported by vkGetPhysicalDeviceSurfaceCapabilitiesKHR.
- Playback of Vulkan debug marker/util functions will now produce a playback warning if they fail to find the object handle.
- Fixed a rare issue where we would delete a call object before we had played it. This issue would result in a crash.
- Add new option –exit-after-framewhich will stop the player after the specified frame.
- Updated the –helpfor the Linux RenderDoc capture options to explain how to setup for OpenGL ES.
- The player will now show a warning if the recorded GL version of a context is higher than the playback contexts.
- If rendering offscreen, we no longer attempt to replace recorded platform surface extensions in VkInstanceCreateInfo::ppEnabledExtensionNameswith a supported equivalent. As a result of this, we also filter out any extensions that depend on VK_KHR_surface when rendering offscreen.
- If rendering offscreen, the window system being used is now printed out.
- Ifwe replace VK_KHR_Display in VkInstanceCreateInfo::ppEnabledExtensionNames with another platform surface extension we now also filter out any other extensions that depend on it.
- Fixeda potential crash that could occur when trying to emulate Vulkan 1.1 features with their Vulkan 1.0 extension equivalents.
- We now filter out any extensions from VkDeviceCreateInfo::ppEnabledExtensionNamesif their dependencies weren’t present in VkInstanceCreateInfo::ppEnabledExtensionNames.
- Native Windows are now destroyed when the EGLSurface/VkSurfaceKHRthat use them are destroyed.
- Changed the SurfaceViewused for the playback windows to be Opaque.
- Android now creates a SurfaceViewfor each recorded native window at the recorded dimensions. Previously, the first native window created would use the app glue’s fullscreen window.
- When running on nullws, we now print out a helpful message if eglCreateWindowSurfacefails with BAD_ALLOC that informs the user of a possible fix.
- Calls that fail during playback that failed at record time are now logged as INFORMATION instead of ERRORs.
- When mapping recorded PhysicalDevices to playback PhysicalDevices,we now favour discrete GPUs over any other.
- Createdcommon getNativeWindow and createOffscreenWindowSurface functions in egl::playback::Display to be used by the various create window surface calls.
- Fixed a bug where the order of the RenderDoc command-line options mattered. They can now be defined in any order.
- If –renderdoc-pathdoesn’t include RenderDoc’s .dll/.so filename we now append it.
- Implemented playback of eglCreatePlatformWindowSurfaceand eglCreatePlatformWindowSurfaceEXT.
- Implemented playback of eglGetPlatformDisplayand eglGetPlatformDisplayEXT.
- Created common getNativeWindowand createOffscreenWindowSurface functions in egl::playback::Display to be used by the various create window surface calls.
- Improved PlatformManager’s error messages to make it clearer that they don’t refer to EGLDisplays during playback when you have limited context.
- eglCreateWindowSurfaceplayback now filters out EGL_GL_COLORSPACE_KHR from the attribute list if EGL_KHR_gl_colorspace is unsupported.
- If eglCreateWindowSurfacefails with EGL_BAD_NATIVE_WINDOW we now print out a message informing the user they may need to use ‘–ws‘ to specify the window system to use.
- Added option –displayso you can choose the display to output to on NullWS.
- Added options –landscape, –portraitto force the orientation of the screen on platforms that support it (currently only Android).
- Added option –capture-frames-formatto specify the format used for captured frames. Currently supported formats are png (default) and tga.
- Added “all” as a supported value for option –log-levelto enable all levels.
PVRTexTool v5.2.0
- Added support for a variety of interleaved, semi-planar and planar YUV 4:4:4, 4:2:2 and 4:2:0 formats. PVRTexTool now supports decoding/encoding/viewing all Vulkan YUV formats (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_sampler_ycbcr_conversion.html) as well as most DirectX YUV formats (https://docs.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format).
- Added support for ITU BT601, BT709 and BT2020 colour spaces.
GUI:
- Added support for users to search for a compressed pixel format in the ‘Wrap Raw Data’ dialog.
- Added support for the cubemap view scene camera’s direction of movement in the X and Y axes to be inverted (independently) by the user, using the new ‘Mouse Control’ options in the ‘View’ menu.
- Added support for a rectangular grid, the user may now set the width and height of the grid independently.
- Added a new thumbnail preview system that will display a small preview of the image(s) when the mouse cursor is hovering over a image view tab. There are three preview mode settings, accessible via View -> Tab Preview; ‘None’ disables all previews; ‘Single’ previews the tab that the mouse cursor is currently hovering; and ‘Multi’ previews all open tabs in a scrollable list. Pressing CTRL will keep the preview list open even when the mouse has moved away from the tab. The current tab may be changed by left clicking a preview in the list. Press CTRL again when done to hide the preview list.
- Added more image view tab closing options:
- Close All Unmodified – closes any tabs where the texture has not been modified since last saved;
- Close All but Current – closes all tabs except the currently active tab;
- Close All Left of Current – closes all tabs to the left of the currently active tab;
- Close All Right of Current – closes all tabs to the right of the currently active tab.
- Added a new “Reset” function, which behaves similar to the old “Reload” functionality which restores texture data from a clean copy held in memory; “Reload” now loads a clean copy of the file stored on disk.
CLI:
- Fixed the format (-f) option not correctly recognising ‘d‘ (depth) and ‘s‘ (stencil) as valid channel names.
PVRTexLib:
- Fixed the loading of Luminance (L8) DDS textures. Reported here: https://github.com/powervr-graphics/Native_SDK/issues/68.
- Enabled PVRTC support for texture dimensions up to 16k * 16k on Linux and macOS (now to match Windows).
PyWrapper:
- Added a setup.py script which allows users to install the PVRTexLibPy Python module on their system. To use, run ‘python setup.py’. Can be uninstalled with python -m pip uninstall PVRTexLibPy.
PVRVFrame v10.15.0
- When converting glsl es shaders to glsl we now strip out “#extension GL_EXT_texture_buffer”
- glPopGroupMarker will no longer error if there isn’t something to pop.
Fixed GL_EXT_buffer_storage emulation so it no longer exposes glNamedBufferStorageEXT. This function should only be exposed if GL_EXT_direct_state_access is supported (which it isn’t). - Fixed the GL_SHADING_LANGUAGE_VERSION string so it has a space between the version and the vendor specific information.
Fixed a bug in glIsVertexArray where it could return GL_TRUEif the name is 0. - Fixed a crash on Linux that would occur if GLX_EXT_framebuffer_sRGB was not supported.
- Fixed a bug where glGetTexParameterwould incorrectly return invalid enum if the target was GL_TEXTURE_CUBE_MAP_ARRAY.
- Fixed the EGL_VERSION string so it fits the format described in the egl spec.
eglQueryString now works with EGL_NO_DISPLAYand EGL_VERSION to return the client version. - glBindSampler now returns GL_INVALID_VALUEif the texture unit index is greater than the current profile’s GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
The host profile’s GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS is no longer capped at 32. - GL_OES_vertex_array_objectis now only added to the extension string if it can be emulated.
- Fixed a bug where calling glGetFramebufferAttachmentParameterivon an attachment created with glFramebufferTexture2DMultisample* could return invalid enum.
PVRTune v14.152
- Added support for global/system-wide CPU HW counters. Add global CPU HW counters to PVRTune’s default built-in counters under ‘/System/CPU Performance Events’.
- Fixed issue DTEC-1826 where Nexus Player GPU was not being recognised.
- Added support for Volcanic ray tracing HW counters.
GUI:
- Removed legacy checkbox from Preferences dialog: “Draw Marks across all timelines”.
- Moved “Global” Marks, e.g. when the user presses ‘m’ in PVRPerfServer console, because modern PVRTune can display too much data to have PVRPerfServer Marks covering the entire view. They now go into their own PVRPerfServer timeline, which is hidden by default and appears when a Mark is first received (or can be enabled via the Timelines docking window). Also fixed an issue where the string for these did not appear during mouse hover (it only showed in the Properties docking window).
- Fixed issue DTEC-1578, where PVRTune selection history was not properly recalling selected Marks.
- Add new per-CPU core Perf Events counters to PVRTune’s default counters.
- Improved the following connection screen elements:
- Merged “broadcasting” and “shortcuts” server list.
- Added an entry for the “current” connection, with a close cross. Show a LoadingSpinner while connecting to a server.
- Removed the “Cancel” button; there is now a cancel button on the “Current” server entry in the list.
- Remove the connecting animation; we have the progress spinner now.
- No longer disabled while connected; it was already possible to conect to a new server (using the Menu) before disconnecting, so now it’s allowed here too. (Improve behaviour when “Hide unnecessary tabs” is disabled).
- Implemented feature DTEC-1794, which adds diff capabilities across Graphs.
- Implemented feature DTEC-2146, which adds diff capabilities across multiple PVRTune processes. The PVRTune processes can be on the same PC or different PCs (if they are on the same subnet).
- Starting to select a time range in a graph window while a popup window is still open, no longer results in a selection that lasts until the end of time.
- Fixed connection screen tool tip and status tip on broadcasting servers, so they once again show some information about the server.
- “Save Image with HUD” (F10) and “Save Image” (F11) now save to the “current” directory as used in file dialogs. “Save Image To…” (Ctrl+F11) already did this automatically.
- PVRTune now shows a busy cursor during [potentially] slow file exports.
- Fixed issue DTEC-1780, where there were insufficient significant figures in shorthand numbers (e.g. when selecting small time ranges it’s a bit too keen to show 0.1s when it ought to use ms with more significant figures).
- Enabled run-time choice of showing a per-graph counter list (default off).
CLI:
- Fixed issue DTEC-1927, where the PVRTune/PVRPerfServer Windows CLI was limited to ANSI paths & files.
- Added new command line processor for PVRTune and PVRPerfServer.
- It now respects the “–” syntax to stop processing further arguments as options.
- It now allowsa space between an option and its value, e.g. the option “–sendto=FILE” can now also be written as “–sendto FILE“. On Linux/macOS, this allows the shell do its thing: support the ~ tilde character in path/file options, and allow tab completion. (Some shells can do one or the other with the old syntax too.)
- Fixed issue DTEC-1848, wherePVRPerfServer/PVRTune CLI prevented tab-completion and ~ in paths.
- Implemented feature “DTEC-511”, which adds a CLI help option (-h, –help, and –version).
PVRTuneComplete :
- Support shader invocation counts received from the Vulkan driver.
- Added support for the OpenGL client stream. PVRTune can now capture and present events generated by the OpenGL driver in a similar fashion to other client API streams, GL events will be presented on their own timeline, per context.
PVRTuneComplete GUI :
- Fixed issue DTEC-2317, so that TA OOM events now go to the Tiler or Geometry queue as appropriate. Additionally fixed an issue where these events would show up as a Mark in both the Stream and in the Queue Timeline.
- Preferences dialog: removed those checkboxes that control the visibility of various types of Mark; they are now available more conveniently and reactively from the Graph Config pop-up.
- The data contained in host client info process name events is now presented in the properties widget, when the user selects the mark.
- The ‘System’ and ‘PID’ folders in the ‘Input Sources’ tab in the ‘Create New Counters’ dialog now have ‘CPU Performance Events’ sub-folders, the per-PID variants of the CPU HW counters are distinguished by a ‘PID’ prefix. Note per-PID CPU HW counters are only supported on Linux based platforms.
- Fixed issue DTEC-1851, Added support for Alternate Geometry Processing (AGP) where 2 cores in a multicore setup will execute separate GEOM kicks.
- Fixed issue DTEC-1524, where “Export frame timing” only has a PID column but data is now “per context per PID”.
- Fixed issue DTEC-1953, which caused empty “Timing” data exports. This could happen if no HW counters were enabled.
- Implemented feature DTEC-1523, allowing “Frame Timing” to also export TA etc.. “Frame Timing” exports now have three modes:
- File/Export/Export frame timing data to CSV… –export-csv-frametimingOnly the 3D core/DM is processed. Time between activities is included. Frame time on all DMs should tend to be equal. On the first, last or only frame, if e.g. TA limited, could give an artificially high FPS due to assuming 3D limited. Should very closely match the output from previous releases (21.1 and earlier). // Cores: 3D FrameGap: counted per-core output: no
- File/Export/Export frame timing data (all cores) to CSV… –export-csv-frametiming-allAs above but all DMs are processed and the highest frame time chosen, to fix the first/last/only frame issue when not 3D limited. // Cores: all FrameGap: counted per-core output: no
- File/Export/Export frame timing data (all cores, verbose) to CSV… –export-csv-frametiming-verbose”As above, but gaps between tasks of different frames are ignored. I.e. every frame is treated as though it were a standalone PVRTune file. This also avoids the above-mentioned detail that otherwise, frame time on all DMs would tend to be equal. Stats are output per DM, plus an estimate of the limiting DM, the maximum possible FPS and minimum possible frame time. // Cores: all FrameGap: ignored per-core output: yes
- Support loading OpenCL shader analysis XML files.
- Fixed issue DTEC-2511, where new counter dialog showed instanced inputs. It now only shows pre-instanced inputs.
PVRPerfServer:
- Added the PVRPerfServer command line options –help(alongside the existing -h) and –version. The /h alias is removed.
- Add new –HostClientInfoCLI option – enabled by default. Enabling this option results in (client) PID & process name(s) being emitted into the HOST stream by the DDK.
- Help output now also lists the –ClientAPIOpenGL
- Fixed issue DTEC-1845, where .bin to .pvrtune file conversion loops were looking for PVRScopeServices.
- Add a new command line option to enable OpenGL client stream events: –ClientAPIOpenGL.
PVRScope:
- Fixed PVRScope packet stream geometry events being filtered out.
- Fixed issue DTEC-2216, where pplWaitForConnection() should be able to take an array of pointers.
- PVRScopeGetCounters(): expose the full counter name, including the “folder” name. This is to distinguish e.g. the GPU FPS counter from the per-PID FPS counter.
- Fixed issue DTEC-2465, where PVRScope instances wouldn’t attempt to reconnect after PVRPerfServer crashes or closes through kill -9 (shared memory implementation). PVRScope instances now attempt a reconnect.
PVRStudio vBeta.1.0
- Updated branding on Welcome and Help widgets.
- Cleaned up menu icons and removed system icons so the style is consistent.
- Added context-menu to the toolbar so it can be configured.
- Fixed the list of Recent Projects to show the project name in the list and the full path in the tooltip.
- Added GLSL ES compilation. This allows validation, per-line cycles count, shader statistics and USC disassembly output for any GLSL ES shader open for edition. As-you-type and on-demand compilation.
Other
- New collection of Vulkan layers: PVRRayTracingSimulation. Simulates ray tracing PowerVR hardware.
SDK
- Added support for the Khronos Vulkan Ray Tracing extension. Adding new Ray Tracing examples: Hello Ray Tracing, Hybrid Hard Shadows, Hybrid Soft Shadows, and Hybrid Reflections (currently only compatible with RT ready desktops and laptops, running windows or linux, that support Vulkan version 1.2.162.1).
- Updated Vulkan version to 1.2.162.1, glslang version to 11.2 and included the glslang validator binaries in the PowerVR Native SDK repository.
- Updated build instructions: added the instructions for the correct usage of MoltenVK on macOS and Wayland. Also added a notice that PVRFrame (and OpenGLES examples) aren’t supported on macOS/iOS due to Apple’s deprecation of OpenGL.
- Vulkan and OpenGLES PostProcessing examples: fixed a bug where the exposure uniform wasn’t found resulting in no blur being applied to the final render, also moved exposure calculations (including log2 and exp2 instructions) to the CPU for model/skybox rendering.
- Capped XCB width/height to the size of the X surface (Tested on linux X11 platform) in the Vulkan HelloApi example to mirror the behaviour of PVRShell on linux.
- Fixed an bug in OpenGL ES Image Based Lighting shader compilation that would throw errors on retail PowerVR devices.
PVRCarbon v0.7
- Added support for recording and playing back VK_KHR_ray_tracing_pipeline.
- Added support for recording and playing back VK_KHR_acceleration_structure.
- Added support for recording and playing back OpenCL applications.
- Update PVRCarbon Vulkan support to Vulkan version 1.2.170.
- Fixed a regression that stopped PVRCarbon opening large .pvrcbn files on Windows.
- A warning will now be output during file loading if the file is from a newer version of PVRCarbon.
- On Windows, when the PVRCarbon console output is redirected to file, it should now be UTF-8.
GUI:
- Added a preference option to configure the frame delimiters used on file load. By default, the setting is set to ask the user on load.
- Updated the ImageViewer used for Renders and Recorded Framebuffers to be the same as the one used for Analysis.
- The remote recorder’s intent select page now has a filter and now shows all the intent information in a tooltip if hovered on.
- The remote recorder now allows you to enable/disable APIs for capture.
- The remote recorder utilises Android 10+ functionality to set up PVRCarbon for recording, if available. It now deploys an Android OpenGL ES layer to go with the Vulkan layer, and sets them up using Android settings instead of the Java debugger and library hooks for more robustness.
Recorder:
- The API validation setup for OpenGL ES now correctly handles the situation where EGL_CONTEXT_FLAGS_KHRalready exists in the create context’s attribute list.
- Added cross-API native buffer tracking and recording. Can be configured to balance performance and recording size with an option to change the buffer sampling frequency and whether buffer content is written only on change.
- Increased the minSdkVersionfor the Android recording libraries to 26.
- Fixed a possible crash that could occur when recording VkDescriptorSetLayoutBindingstructures and pImmutableSamplers was not null for non-sampler descriptor types.
- Fixed a crash that could occur if an application called the VK_EXT_debug_markerextension functions without enabling the extension.
- Fixed a crash that could occur for some applications when determining the best default output directory for pvrcbn files on Android.
- Fixed an INVALID_ENUMerror that could occur during recording if the platform doesn’t support GL_VERTEX_ATTRIB_ARRAY_DIVISOR.
- Added an Android OpenGL ES recording layer. This can be used on Android 10 onwards instead of the driver replacement libraries that are installed by the PVRCarbonInstaller.sh script. This is the recommended and safest way to perform standalone/system recordings on Android 10+. PVRCarbonInstaller.sh should be used on legacy Android versions only.
- Added tracking for GL_IMG_multisampled_render_to_texturewhen not recording from frame 0.
- Fixed an issue where the tracked internal format for generated mipmap levels may become invalid when not recording from frame 0.
C++ Exporter:
- Added exports of NvOptimusEnablementand AmdPowerXpressRequestHighPerformance to the exported Windows code so that the best GPU is chosen.
- When exporting, we now optimise out the creation of any EGLConfigs that aren’t referenced.
- Fixed a bug where glReadPixelscould be exported that tried to read into a buffer of zero size.
- Added support for exporting OpenCL recordings.
- Large exported frame functions will now be split up to reduce their stack usage.
- Optimised the code generated for arrays of Vulkan handles that only contain a single value.
- Fixed a race condition that could occur between waking the next thread and pausing the current in exported multi-threaded code.
- Multi-threaded exported code will now wait until all the threads are setup before starting.
- Exported code now requires C++14.
- Vulkan’s create_surfacenow prioritises platform surface extensions over VK_KHR_DISPLAY.
- Line endings of exported files are now consistent.
- Fixed an error that can occur during exporting if the OpenGL ES application enables a vertex attribute array but never defines it.
- Increased minImageCountwhen exporting vkCreateSwapchainKHR if it is smaller than the number of swapchain images created at record time to ensure the swapchain is created with the correct number of images used in the application.
- Vulkan objects that have the same value at record time now get their own variable names during export.
- vkGetPhysicalDeviceSurfaceSupportKHRis now exported as the validation layers expect it to be called.
Player:
- Implemented missing GL_IMG_multisampled_render_to_textureplayback functions.
- Added command-line option –capture-frames-path=that allows the user to define the output directory of captured screenshots. The output path defaults to /sdcard/ on Android, and the working directory on all other platforms.
- Added a safety check for GL_EXT_debug_markerfunctions so they aren’t played back if the platform doesn’t support them.
- Added command-line option –modeto place the player in a particular mode. Currently the only mode supported is “profile” which will enable several features to reduce I/O stalls when profiling the player.
- Added native buffer playback on Android and NullWS.
- Increased the minSdkVersionfor the Android player to 26.
- Improved the playback of Vulkan recordings where the player acquires swapchain images in a different order than recorded.
- Fixed playback of vkEnumeratePhysicalDeviceGroupswhich was incorrectly using vkEnumeratePhysicalDeviceGroupsKHR.
- vkBind*Memory2functions now better take into account playback and recorded device differences.
- Window system being used is now printed when not rendering off-screen.
- If eglCreateWindowSurfacefails with BAD_ALLOC, a message informing the user of a possible fix is now printed when running on nullWS
- Calls that fail during playback that failed at record time are now logged as INFORMATION rather than ERROR.
- When mapping recorded PhysicalDevicesto playback PhysicalDevices, discrete GPUs are now favoured over others.
- Fixed a bug where the RenderDoc command-line options were order-sensitive.
- Appends the RenderDoc .dll/.sofilename if not found by –renderdoc-path.
- Implemented playback of eglCreatePlatformWindowSurfaceand eglCreatePlatformWindowSurfaceEXT.
- Implemented playback of eglGetPlatformDisplayand eglGetPlatformDisplayEXT.
- Improved PlatformManager‘s error messages to make it clearer that they don’t refer to EGLDisplayduring playback when you have limited context.
- Implemented option –displayso you can choose the display to output to on NullWS.
- eglCreateWindowSurfaceplayback now filters out EGL_GL_COLORSPACE_KHR from the attribute list if EGL_KHR_gl_colorspace is unsupported.
- If eglCreateWindowSurfacefails with EGL_BAD_NATIVE_WINDOW, we now print out a message informing the user they may need to use ‘–ws‘ to specify the window system to use.
- Added new options–landscape and –portrait to force the orientation of the screen on platforms that support it (currently only Android).
PVRTexTool v5.1.0
- Add support for .basis files. .basis files can now be loaded and saved with the PVRTexTool UI, CLI, C API, and Python wrapper. Note that saving textures to a .basis file is only supported when the texture format is Basis Universal.
GUI:
- Add a new view mode, ‘Cube Net’, to the image viewer. The cube net view mode allows visualisation of a 3D cube in 2D space, in the form of a single 2D image that comprises all cube faces in the cubemap.
- Add ‘New Texture From Current’ (CTRL+ALT+N) option to the UI. This allows the creation of a new texture from the image (current mipmap level, face, etc.) currently visible in the viewer.
- Allow copy and pasting of user selected cells in the error metrics table.
- Fix a bug in the Error Metrics table where the RMSE values were being placed in the standard deviation row and vice versa.
- When in the diff view and hovering over a texel, the UI will now display the left and right texel values as well as the delta (right – left) value.
- When in diff view channel, masking no longer applies to the central image view when the mode is set to ‘Tolerance’.
- Fixed an issue with channel masking where in some cases, the wrong channel data was being displayed by the image viewer.
- Improved how textures with different channel orders are handled in the diff view with respect to channel masking.
- Synchronise mouse movement (scrolling) between image views when in diff mode.
- Fixed an issue where the grid would be unavailable in the diff viewer.
- Added maximum thread controls ‘Jobs’ to Encode dialog window; uses all available cores by default.
- Fixed an issue in the image viewer where the UI only permitted mouse scrolling in one direction when trying to scroll through texture Z slices (CTRL+ALT) and array surfaces (ALT).
- The ‘New Texture’ dialog now allows the user to set the texture depth, the channel type, and the channel names and order (e.g. RGBA); additionally the maximum number of mipmap levels are updated as the user configures the texture dimensions.
- Exposed a new ‘Create IBL Environment Map’ option in the GUI (File->Create IBL Environment Map) which allows generating diffuse and/or specular IBL maps.
- Added more image view tab options:
- Close All Left of Current
- Close All Right of Current
- Added “Reset” function – behaves like old “Reload” function, which restores texture data from a clean copy held in memory. “Reload” now loads a clean copy from the file stored on disk.
CLI:
- Add new optional arg -j(jobs) which allows users to specify the maximum number of threads to use for transcoding; use all available cores by default.
- Add new command line options to enable generating IBL environment maps from cubemaps:
- -ibldiffuse [samples, dimensions]
- -iblspecular [samples, dimensions, levels to discard]
- -irz(‘Include Roughness Zero’)
PVRTexLib:
- Added support for loading and saving Basis UASTC compressed textures from/to KTX2.
- Fixed .pvr & .ktx2 file loading and saving for basis universal encoded 3D textures.
- Fixed an issue where decompression of 3D textures compressed with basis universal formats could fail or produce incorrect results.
- Added support for user configuration of the maximum number of threads used for transcoding.
- Fixed a race condition that could lead to a deadlock.
- Fixed an issue with loading/saving KTX files for BC4 & BC5 texture formats.
- Fixed an issue where the KTX orientation meta data was not being written out correctly.
- Added support for ‘PVRTC HDR’. This enables encoding HDR texture data into PVRTC compressed textures. Two modes are currently supported: 6bpp and 8bpp; the 6bpp comprises of a 4bpp luma texture and 2bpp chroma texture, while the 8bpp comprises of a 4bpp luma texture and 4bpp chroma texture.
- Added support for generating diffuse irradiance and prefiltered specular environment maps from a cubemap texture. New APIs methods are PVRTexLib_GenerateDiffuseIrradianceCubeMap()and PVRTexLib_GeneratePreFilteredSpecularCubeMap()
PVRVFrame v10.14.0
- Fixed the pixel buffer size check for pixel operations on packed formats.
- glBindSamplernow returns GL_INVALID_VALUE if the texture unit index is greater than the current profile’s GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
- Host profile GL_MAX_COMBINED_TEXTURE_IMAGE_UNITSis no longer capped at 32.
- GL_OES_vertex_array_objectis now only added to the extension string if it can be emulated.
- Fixed a bug where calling glGetFramebufferAttachmentParameterivon an attachment created with glFramebufferTexture2DMultisample* could return an invalid enum.
PVRTune v14.151
GUI:
- New Guided Analysis feature (File → Start Guided Analysis). Highlights potential bottlenecks in a recorded session.
- If the command-line is unable to read the input file, some output is printed along with an error code instead of exiting randomly.
- Fixed a bug in which some HW counters were reading 0.
- Fixed a bug in the counter table where view invalidations and redraws would sometimes be missing.
- Fixed a bug in the counter table that could result in constant redraw and flickering in the “Frame” column.
- Added Export Counters to CSV option (–export-csv-counters for command-line)that writes extra rows to the end of the CSV file output that gives the mean, variance, and standard deviation for each counter.
- Added WASD controls.
- Increased scroll bar “single step” size from 1 pixel to 5% of the view (minimum value 1).
- Fixed a bug when using the “View/Split Window Layout” option in graph views where cursor keys did nothing when a task is selected; now changes which task is selected.
- Added a “Configure” button to graph panes next to the close button.
- Added an option for the time ruler to be drawn in a “chart”-like style for graph panes.
- The “Zoom” value is now “Zoom exponent”, allowing for zooming in and out further.
- Preferences window now has a vertical scroll bar, allowing for smaller sizes.
- “Hide disabled” in Counter Tables is now set to off by default.
- No longer stores counter settings in plist if they’re on by default.
- Fixed excessive storage of yaxis/colour information in plist. Now only saves values that are non-default.
- Custom counter colours are no longer restored to “Previously used” after use.
- When the Properties is showing a counter, it now polls on the counter state revision and updates itself any time something else changes a counter (such as the y-axis value, the colour, or edits to the counter or groups).
- View column can now be hidden from the Counter Table.
- New command-line option: –default-clockspeed-hz={100000000}. Sets clock speed used to display data if the clock speed is unknown.
- Fixed an issue where the ‘initial directory’ for future file dialogs was set to the previous sessions/use rather than the directory for an opened .pvrtune file.
PVRTuneComplete :
- Added a workaround for being unable to use FW Custom Counters on DDK 1.11 and older.
- Added more default counters for Volcanic.
- Fixed an issue where the per-PID “System memory load” counter was only enabled for a single HWConfig and group.
- Improvements to OpenGL ES multi-context tracking.
PVRTuneComplete GUI :
- Default built-in counters will now be loaded in automatically when there is no existing config file.
- Items in the Monitor docking window are now editable, along with counters and groups.
- Fixed a bug where some counters that were in the existing group would not be in the new group when cloning counter groups.
- CSV Timing Data export now puts each counter reading into a new column for whatever HW counter source it’s reading (rather than effectively left-justifying them). Adds a new row at the end naming each counter reading column.
- Support loading GLES & Vulkan driver-generated shader analysis XML files. The shader analysis data includes compiler statistics, recompile reasons, trigger/operation, dis-assembly, uniflex, register allocation data, etc.. This data will be presented in the properties window after selecting an event where shaders are used such as a HW task.
- Show SPIR-V disassembly for Vulkan shaders in addition to the existing (cross-compiled) GLSL.
- Remapped the task grouping keyboard shortcuts to the number keys 1-5.
- Added support for shader invocation count data. When enabled, the driver will track the number of invocations per shader, per HW kick. Visualisation of this data can be seen by clicking on ‘Shader Invocation Stats’ in the properties window after selecting the desired HW task.
- Updated backwards compatibility.
- Properties window now shows the task duration in clock cycles too.
- New command-line option –export-csv-tasktiming filename (*.csv), and matching GUI option “File\Export\Export task timing data to CSV…”. Generates a CSV file containing a row per task.
PVRPerfServer:
- New command-line option –ClientShaderInvocCount={0,1}. Allows users to enable the shader invocation count feature from the CLI.
PVRShaderEditor
- Changed MacOS Profiling Compilers to 64-bit.
- Updated glslangValidator to revision a36d91e5.
- Updated Rogue GLSL ES Compiler version.
- Removed Series5 and Series5XT compilers for MacOS.
Other
- New collection of Vulkan layers: PVRRayTracingSimulation. Simulates ray tracing PowerVR hardware.
SDK v5.6
- Implemented a Vulkan Matrix Multiplication Example. This is a headless command line tool implementing multiple methods for matrix multiplication using Vulkan compute.
- Added support for Beta Vulkan Extensions. The framework will now support the Vulkan Beta Extensions by default. To disable support the VK_BETA_ENABLED cmake option can be set to OFF in PVRVK/CMakeLists.txt.
- Updated Gradle to Version 6.5.
- Updated Vulkan headers to 1.2.141.
PVRCarbon v0.6
- Added an OpenGL SC 2.0 recording library. Recordings can be played back on both OpenGL ES 3.1+ and OpenGL SC 2.0 drivers.
- Added an Android OpenGL ES recording layer. This can be used on Android 10 onwards instead of the driver replacement libraries that are installed by the PVRCarbonInstaller.sh script. This is the recommended and safest way to perform standalone/system recordings on Android 10+ and relegates PVRCarbonInstaller.sh to use on legacy Android versions only.
- Fixed an INVALID_ENUM error that could occur during recording if the platform doesn’t support GL_VERTEX_ATTRIB_ARRAY_DIVISOR.
GUI:
- Updated the Android Payload icons to the new design.
- Fixed the ‘Add Server’ option in the renderer select drop down.
- PVRCarbon sits using 15-20% CPU when idle.
- Added Vulkan and OpenGL ES frame analysis of carbon files.
- Remotely recording Android applications no longer requires them to have internet permissions.
- Added the ability to trim off the start of a PVRCarbon recording from the GUI.
- Added the ability to export C++ code from part-way through a recording to the GUI.
- The remote recorder now allows the user to select which activity is launched on Android for recording.
- Improved the way we handle failure to open files during remote recording.
- The remote recorder utilises Android 10+ functionality to set up PVRCarbon for recording, if available. It now deploys an Android OpenGL ES layer to go with the Vulkan layer, and sets them up using Android settings instead of the Java debugger and library hooks for more robustness.
- A warning will now be output during file loading if the file is from a newer version of PVRCarbon.
C++ Exporter:
- Updated the exported Android icons to the new design.
- Updated the exported Android Makefiles to use cmake 3.10.2, version 4.0.1 of the gradle plug-in and the gradle wrapper now uses gradle 6.5.
- Added a banner image to the exported Android makefiles.
Player:
- Attempting to playback the setting of the surface attribute EGL_TIMESTAMPS_ANDROID when EGL_ANDROID_get_frame_timestamps is not supported is no longer a critical error.
- Attempting to playback VK_GOOGLE_display_timing calls when the extension is unsupported is no longer a critical error.
- Updated the Android icons to the new design.
- Fixed a crash on exit that could occur if file loading was unsuccessful.
- Fixed an issue on Windows where you couldn’t pipe the console output to a file.
- Added RISC-V builds (RV32GC and RV64GC) for PVRCarbon player.
Recorder:
- Fixed an issue that would break tracking of eglMakeCurrent if surfaceless contexts were used.
- Fixed an issue where the pNext chain of the InstanceCreateInfo could become corrupt when recorded api validation is enabled. This fixes recording debug builds of the Vulkan-Samples.
- Re-designed and implemented the way we handle non-frame 0 recording for Vulkan.
- Fixed an issue parsing a list of single frames.
- Added RISC-V builds (RV32GC and RV64GC) for PVRCarbon recorder.
- Fixed a crash that could occur for some applications when determining the best default output directory for carbon files on Android.
CLI:
- Added the ability to export C++ code from part-way through a recording in the PVRCarbonToCpp CLI tool.
- Improved the chances of finding a matching config with support for creating PBuffer surfaces.
- Added the ability to trim off the start of a PVRCarbon recording from the PVRCarbonTrim CLI tool.
- The –capture-frames option was incorrectly documented to take in a range of frames to capture. The option has now been updated to match the documentation.
- Added new PVRCarbonFrameAnalysis cli for generating frame analysis data (.pvrcbna) files outside of the GUI.
PVRTune v14.150
- Added a new ‘SSH Log’ widget. This widget will be populated with the command line output from PVRPerfServer and the user launched application for SSH based connections.
- Added Android GLES profiling layer event grouping support. Attempts to group the appropriate glDraw* and glDispatch* and (various) GLES state calls, with the corrosponding Vulkan draw and dispatch commands and Vulkan state calls. Additionally groups eglSwapBuffers calls with the corrosponding vkQueueSubmit, vkQueuePresent and Submit * sub-command calls.
- PVRPerfServer bug fix: command-line option –disable-hwperf should not turn off non-driver data collected by PVRPerfServer (for example CPU and memory usage).
- Added a new Android GLES profiling layer. This layer intercepts EGL and GLES API calls made by an Android application and generates timing events for all intercepted calls. The events will appear in a new timeline in PVRTune. PVRTune will automatically detect (when using auto-deploy) when an application is using ANGLE and deploy the profiling layer via adb. This feature is designed to aid correlation between the GLES calls made by the app to ANGLE and the subsequent translated API calls made from the ANGLE backend to the Vulkan driver (assuming the Vulkan client stream is enabled).
- Fixed an issue where the AboutBoxDialog links used font colour which was difficult to read against the black background.
Complete:
- Added support for programmable CPU HW counters for Linux based platforms. Built-in CPU counters include: CPU Cycles, CPU Instructions, Instructions per Clock, Cache Miss, Branch Instructions, Branch Misprediction, Pipeline Frontend Stalled, Pipeline Backend Stalled. Users may select a sampling frequency (default 1000hz) via the PVRPerfServer settings window.
- Users may program CPU counters via the Edit Counter Group dialog.
- When graphing the GPU clock speed PVRTune now produces a perfectly straight line. Previously, there were wobbles around task edges.
- “File/Export/Export counters to CSV…” will now contain full counter path + name.
- The per-PID FPS can now also be a per-PID per-group-of-contexts FPS. Counter Instantiation is now also per-PIDDriverContext. Frames are now built (and rebuilt) asynchronously, based on which data has been dirtied, rather than as the data is received. Activities will no longer be merged into a Frame if their ExtJobRef uses different DMContext values. Note: pre-1.7 DDKs don’t have ExtJobRef data.
- Counter instantiation is now per-CID, as well as per-PID and per-UserCounter. This fixes a modified PVRScopeRemote that creates and manages two identical PVRScope connections.
- Allowed counter group editing even when no file/data is loaded.
- PVRTuneCG file format has been updated to maintain the users chosen counter order. Previously, it re-ordered all counters in group 0, followed by any counters added by group 1, and so on. Counter/counter group state is now saved between runs to “PVRTuneComplete20.2.PVRTuneCG” (was “PVRTuneComplete19.2.PVRTuneCG”).
- Added support for a “CSV Import…” option in the Counter Group Manager GUI. This means counter groups can be imported and exported from the GUI.
- Updated the Counter Group GUI:
- Added an input validator to ban the “directory” slash: ‘/’.
- Tweaked GUI title to switch “Edit” with “Custom”.
- Added a splitter allowing the “Group Contents”/”HW Block Capacity” ratio to be moved.
- Updated the “Create New Counter”/”Edit Counter” GUI:
- Remodelled the GUI. The available counters are now shown in a tree view, with a “folder” per group, rather than a tabbed view with a tab per group. In some cases this makes it much quicker and easier to find what you’re looking for, especially if you just want to use the filter box and see what comes up.
- Disabled the Modify for Volcanic blocks.
- There are now 3 tree views, held in a tab widget: inputs, caps and shortlist.
- Added the current HWConfig in the dialog box title.
- Counter sources: clarify that system kernel/user times are in MS.
- Updated the HW Counter Source editor GUI to add the current HWConfig in the dialog box title.
- Added new PVRTuneComplete command-line options:
- –import-csv-counterdefinitions.
- –save-counterdefinitions.
- Changed the buttons in the Custom Counter Group editor from Accept/Close to Accept/Cancel.
- Moved from a Close button to Accept/Cancel buttons in the Custom Counter Groups GUI .
- Added a “CSV Export…” button to the Custom Counter Groups GUI.
- Allow removing counter sources from counter sources shortlist:
- Users can now select multiple items and delete them with either the delete key or the context menu.
- Bug fix: Clear the list of “all” sources before filling it. They were duplicating every time the fn executed.
- Counter Table entries are now created in the proper order as per the editor (rather than all “sources” followed by all counters, which moved the folders to the top).
- The “Source” section has been removed from the Counter Properties view. It now just show the full path for the counter name (word wrap now enabled).
- General improvements for custom counter and group editing:
- Default groups are no longer locked. Any group or counter can be edited. The Counter Group Manager has a new button “Load Defaults…” to return to the default groups and counters.
- The Counter Group GUI now has a “Delete” button to remove counters and groups of counters.
- Automated sorting is now disabled in the Counter Group GUI.
- Sorting is disabled in the Counter Table GUI. It now shows items in the same order as in the editor.
- Default counter colours now take the whole counter path+name into consideration (not just name).
- “custom” counters are not available on Volcanic. Counters using those sources are now disabled as appropriate in the group editing GUI.
- Updates to the Counter Table:
- Allow the View column to be hidden.
- “Hide disabled” now defaults to off:
- This avoids the confusion that is bound to occur when someone disables the View column and has not yet selected any time range; whereupon all counters would be hidden by default in the counter table.
- As counters are instantiated as necessary these days, there are fewer potentially inactive counters than there used to be, that is why the “Hide Disabled” option was added (and defaulted to on), and why the View column was forced to be always visible.
- These days, it’s better to grey counters than to hide them.
PVRShaman v2.9
- Fixed apply-shader menu button which was always disabled due to faulty logic.
PVRTexTool v5.0.0
- Added support for equirectangle to cubemap conversion.
- Added support for ASTC HDR compressed formats.
- Enabled BC1 (DXT1), BC2 (DXT3), BC3 (DXT5), DXT2 and DXT4 on Linux and OSX platforms.
- Added PVRTexTool plugins for 3ds Max 2019/20 and for Maya 2018.
- Added support for RGBM (shared multiplier) and RGBD (shared divisor) texture formats, both formats are 32bpp and are in the form RGBA8888, where the alpha channel stores the shared multiplier or divisor respectively. Add “MaxRange” meta data to the PVR file format, this floating point value is used to decode the RGB{M/D} data.
GUI:
- Added support for creating a cubemap texture from an equirectangle image.
- Added support visualisation of NaN and Inf pixel values for floating point formats. Users may change the highlight colour by going to “View” -> “Change Nan/Inf Colour”.
- User can now select nearest or bilinear texture filtering when in the cube view.
- Added a dark theme option (View->Theme->Dark Fusion). This is enabled by default.
- Added .astc files to supported extensions for file loading and saving dialogs. When loading a .astc file the user will be prompted to select the desired colour space as the .astc header does not include the colour space information.
- Exposed BC4 and BC4 in the encode window.
- The WrapRawData dialog no longer allows the user to input a channel bit width of 0 and also clarify the ‘No Channel’ option in the channel name combo boxes.
- Fixed a crash that would occur when the user pushes the “Reset Filters” button in the encode window when the recent format list is empty.
- Completely overhauled the PVRTexTool GUI layout.
- Improved the overall responsiveness of the user interface.
- Supported a proper undo/redo mechanism.
- ETC2_RGB_A1, EAC_R11, and EAC_RG11 formats now show the ETC compressor options in the encode window.
- Exposed UYVY and YUV2 texture formats in the encode window.
- Updated the encoding widget to allow users to select BASISU ETC1S and UASTC as the target format.
CLI:
- Added a new ‘-noout’ command line option to allow a user to supress output of a .pvr file, by default, a .pvr is always written out even when -o is not specified.
- Fixed the output file name for decompressed (-d) image files .bmp, .png, .jpeg and so on.
- ‘Tolerance’ is now accepted as a valid diff mode.
- Exposed BC4 and BC5 texture formats.
- Allowed input and output files with a .ktx2 extension.
- Added a new CLI option “equi2cube ” which allows creation of a cubemap texture from an equirectangle image.
- Eliminated unnecessary transcodes on input files. The CLI now trancodes only if the user explicity requests it via the -f option or if the user requests a texture transformation (resize, gen mipmaps etc.) and the input texture is compressed e.g. PVRTC or packed e.g. 565. If the CLI has to transcode to an intermediate format it now tries to select the best format based on the input format instead of just transcoding everything to RGBA8888. The -f option is no longer a required option, this means simply saving the texture to another container type e.g. .pvr ==> .ktx no longer triggers a transcode, which mitigates the extra compression artefacts in the resulting data. If the user omits the -f option and asks for a transform e.g. a resize, then the CLI will transcode the texture back to its original format (if necessary) before saving.
PVRTexLib:
- Added supported loading the following image files: PNG, JPEG, BMP, HDR, TGA, GIF, PSD, PIC, PPM, and PGM.
- Supported writing the following image files: PNG, JPEG, BMP, TGA, and HDR.
- Exposed more PVRTC quality modes. There are now 6 quality modes to choose from:
- Low (2 passes)
- Normal (4/5 passes)
- High (6 passes)
- Very High (8 passes)
- Thorough (16 passes)
- Best (32 passes).
- Updated the PVRTC library, improving compression performance.
- Added support for BC4 and BC5 compressed formats.
- Added a new Python binding library for PVRTexLib. This enable users to access all PVRTexLib functionality from within a Python script.
- Added missing GL_SRGB_ALPHA format to the getPowerVRFormatOGL helper function.
- Fixed the GL_SRGB8_ALPHA8 format in the getPowerVRFormatOGL helper function.
- Exposed a new pure C interface for PVRTexLib library functions. Expose a new C++ convenience wrapper which wraps the new C interface. The PVRTexLib interface is now comprised of the C interface – PVRTexLib.h, the C++ wrapper around C interface – PVRTexLib.hpp, and PVRTTexture.h which holds the common defines, structures and enums shared between the C and C++ interfaces. Note the old C++ interface is no longer available.
- Enabled BC1 (DXT1), BC2 (DXT3), BC3 (DXT5), DXT2 and DXT4 compression on Linux and OSX platforms.
- Reduced the amount of data type conversion where possible.
- Transcoder now processes pixels in parallel, improving performance for large textures and textures with many surfaces.
- Flip and Rotate now work for all uncompressed texture formats and channel type.
- Added support for KTX2 file format. Support loading and saving to a KTX2 file. If the the texture format is BASISU_ETC1S then the file will be saved in the ‘supercompressed’ format.
- Added new compressed texture formats: BASISU_ETC1S and BASISU_UASTC. Both formats may be saved to a .pvr file.
- Added support fpr transcoding to Binomial ETC1S and UASTC ‘supercompressed’ formats.
- Added a new meta data type: ‘ePVRTMetaDataSupercompressionGlobalData’, used for decoding certain formats such as ETC1S.
PVRFrame v10.13
- Reduced unintended allocations in FramebufferDownsample.
- glDebugMessageControlKHR no longer returns invalid enum if the type is DEBUG_TYPE_PUSH_GROUP or DEBUG_TYPE_POP_GROUP.
- Fixed a validation error in glReadPixels where it would incorrectly return invalid operation if a pixel unpack buffer was bound and mapped.
- Fixed a bug on Windows where a config would claim to have stencil support but the underlying config wouldn’t.
- Fixed a bug where framebuffer functions would return GL_INVALID_OPERATION if the read framebuffer was being modified and pixel local storage was enabled.
PVRGeoPOD v2.28
- Blender 2.8x: Fixed vertex colours.
SDK v5.5
- Slightly changed the logic when requesting multiple queues. It is now possible to be able to return the same queue twice instead of breaking.
- Removed OpenGL ES deprecation warnings for the iOS examples. These warnings are due to the entirety of OpenGL ES being deprecated by Apple.
- Added PVRVk helper files to the PVRVk project.
- Improved the EGL Context API. Shared contexts are no longer separately wrapped objects (SharedEGLContext), but simply EGLContexts. The API has been similarly streamlined.
- Ported the basic rendering (BumpMapping) example for OpenGL ES.
- Added the Multithreading example for OpenGL ES. This example shows how a shared context bound to a worker thread can be used to load assets asynchronously while something else is rendered on the main thread.
- Updated the Vulkan headers and PVRVk to version 1.2.
- Removed the non-functional Java onCreate functions from all examples except IntroducingPVRCamera. The rest of the examples were only calling super.onCreate.
- Updated and upgraded the PVRCamera framework module. The Android runtime permission system is now implemented, and the asynchronous permissions functionality now works properly.
- Enhanced the IntroducingPVRCamera example to correctly handle different aspect ratios between the framebuffer and the camera output.
- Slightly updated the Gradle commentary.
- Updated Gradle wrappers to version 6.
- Changed the Gradle wrappers to use full src+bin Gradle distributions so that Android Studio now displays Gradle autocomplete.
- Updated the Android plugin to 3.5.3.
- Updated the included glslang version to 8.13.3559.
- Added code to ensure examples exiting due to an error will have the error code correctly propagated to the command line.
- Fixed the implementation of multisampling on-screen framebuffers for Vulkan. Now, if the number of samples is greater than 1 in DisplayAttributes, multisampling will be correctly enabled. For example, if -aasamples=4 is passed through the command-line or the number of samples is changed programmatically.
- Updated the pvr::utils::createOnScreenXXX interfaces. Previously these would not work correctly with Multisampling and other more complicated interfaces. The current interface (createOnScreenFboAndRenderpass, createSwapChainAndDepthStencilImageAndViews) is now deprecated and will be removed in a future version. The new interface (createOnScreenSwapchainRenderpassFramebuffers) is replacing these two calls.
- Updated the interfaces involving the SDK taking pointers to VMA Allocators, which were smart pointers already, to taking just the smart pointers. The original intent of denoting them as optional can still be fullfilled by passing null (or nothing, where they are optional), but now vmaAllocator should be passed instead of &vmaAllocator.
- Fixed the implementation of appendPNext so that the new pNext structure is actually appended to the current base structure. Fixing this issue also enables a number of other features including the VK_VALIDATION_FEATURE_ENABLE_GPU_VALIDATION_EXT and VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT extensions, as well as enabling a debug callback. which will be used during instance creation to report validation issues.
- Enabled the use of VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT.
- Changed a flag in OpenGL ES 3 that could make the SwiftShader implementation act as if some textures were mipmap-incomplete.
PVRCarbon v0.5
We are aware of an issue on some devices where the PVRCarbon remote recorder will not capture some of the SDK examples when running on Android 10. We are working to fix this as soon as possible.
- sh now disables recording when installing the libraries. This stops applications from accidentally recording straight after install.
- sh comments out the ro.hardware.egl property inside /vendor/build.prop when installing the libraries. This property is restored when uninstalling.
- sh now detects the EGL version supported by the driver and attempts to mirror this version in the installed libraries. This fixes a crash on Android 10 caused by the EGL 1.5 symbols available inside PVRCarbon tricking Android into making EGL 1.5 calls even on an EGL 1.4 driver.
GUI:
- Added a new Dark Fusion theme.
- Added a new static analysis widget for EGL, OpenGL ES, and Vulkan calls.
- Added a new Visible Calls List widget which allows calls in the Call List to be filtered and hidden based on API, call type, and frame.
- Added the ability to highlight calls using a Call List context menu.
- Fixed highlighting of errors and warnings in the log that get reported by the Player.
- Fixed a bug that would break remote recording on Android if debug.vulkan.layers was already set on device.
- Fixed a bug where floating dock widgets would not be reset when resetting the layout.
- Fixed an issue where the remote recorder failed to locate the Vulkan library search path on Android 10.
- The splash screen has been improved to include quick links to recent files, open file, and the remote recorder.
- Added a button to Preferences to reset the colours to defaults.
- Correctly limited the Save As dialog to always start from frame 0. No other frame is currently supported.
- The Save As dialog will no longer say a file has been successfully saved if an error occurs.
- The GUI now highlights more clearly calls which are partially recorded in the call list.
- Added a static analysis result entry for indicating when there are partially recorded calls in the recording.
- Added support for recording callbacks triggered by the use of debug callback extensions KHR_Debug, VK_EXT_debug_utils and VK_EXT_debug_report. These recorded callbacks are then displayed as part of the static analysis output.
C++ Exporter:
- Fixed exporting of OpenGL ES code that doesn’t use glGen* calls to generate object handles.
glWaitSync now exports with its timeout set to GL_TIMEOUT_IGNORED instead of a big uint value. - Fixed an issue where exporting vkUpdateDescriptorSetWithTemplate* function calls would occasionally produce uncompilable code.
- Fixed an issue where exporting VkWriteDescriptorSet structures would occasionally produce uncompilable code.
- Fixed an issue where exporting vkCmdSetBlendConstants would produce uncompilable code.
- Fixed an issue where nans weren’t being properly handled when exported on Linux.
- Fixed an issue where create_surface.cpp/.h would be added to the exported Cmake but not export the files.
- Fixed an issue where the platform manager wouldn’t be defined if only vk::surface::initialise was exported.
- Updated the Android makefiles to use com.android.tools.build:gradle:3.5.3.
- GLint64 and GLuint64 now correctly export with LL and ULL if the values are big enough.
Player:
- Added support for GL_IMG_framebuffer_downsample.
- Fixed playback of glEGLImageTargetRenderbufferStorageOES and glEGLImageTargetTexture2DOES.
- The API libraries that the Player dynamically loads can now be overridden by setting the environment variables PVRCARBON_PLAYER_LIB_EGL, PVRCARBON_PLAYER_LIB_GLESV2, and PVRCARBON_PLAYER_LIB_VULKAN.
- Replaced the –verbose option with –log-level. This new option offers more control over the output.
- Improved the cross-platform support for setting compositeAlpha.
- Fixed an issue where the Player would refuse to play vkDestroy* calls if the recorded handle was VK_NULL_HANDLE.
- Fixed a possible crash that could occur when buffers or images require more device memory than at record time.
Recorder:
- Capturing framebuffers on OpenGL ES 2 contexts that are actually OpenGL ES 3+ underneath now uses OpenGL ES 3 functionality for better performance.
- Added the ability to record from non-frame zero for OpenGL ES applications.
PVRTexTool v4.24.0
Added a Depth option in Wrap Raw Data dialog.
PVRVFrame v10.12.0
- Fixed some crashes that could occur if PVRVFrame fails to retrieve all the wgl functions it requires. For example, if used over remote desktop.
- Added support for EGL_KHR_gl_colorspace.
PVRGeoPOD v2.28
- Blender: Fixed vertex colours export.
- Blender: Removed a check for active channels. This allows all available UV sets to be exported regardless of whether they are active or not.
- Blender: Fixed exporting selected objects.
- Blender: Fixed duplicated materials which were left empty.
PVRTune Developer v14.149
- libPVRScope*.so for Linux is now linked to librt. This means that the final application is not required to do so, however the application will still need to link to librt if libPVRScope*.a is used.
- When an Activity is clicked on, the Properties window now also shows an Index on timeline row value.
- Fixed the display of a mouse-hover summary for Marks in PVRScope timelines.
- PVRPerfServer device details are now selectable by mouse and keyboard, enabling the user to copy the text.
- Added a new Logcat widget (only applicable when connected to an Android device). This allows a user to view adb logcat output in the PVRTune client. The output stream can be filtered by a filterspec (for example “APP:D *:S)” and by a process ID.
- Added a new option (Edit -> Preferences -> Timeline spacing) to allow users to configure the amount of spacing between timelines.
- Added a new Dark Fusion application theme (Edit → Preferences → Theme).
- The Linux variant of PVRPerfServer now statically links to libstdc++. This should help ease ABI compatibility issues.
PVRTune Complete v14.149
- Fixed the display of a mouse-hover summary for Marks in Host (KM) timelines:
- Device status
- Driver memory usage
- Host Resource Type
- Fixed the display of a mouse-hover summary for Active counter group marks in HW timelines.
- Fixed the display of a mouse-hover summary for Marks in HW timelines: Clock Transform.
- Fixed the display of a mouse-hover summary for Marks in HW timelines: Counter Reset, Counter Config, Power Event.
- Added support for framebuffer compression algorithm type emitted in the Vulkan client data. This new attribute will appear under Image View -> Image -> Compression Type in the Properties window. This new information requires at least DDK MAIN@5551192.
- Improved the presentation of Counter Reset, Counter Config, and Active Config marks in the Properties window.
- Added a new optional Power Event mark. The visibility of these new marks on the timeline can be toggled by the user with the default state being hidden. This mark will display the power event type and the domain strings if applicable.
- Improved the handling of device power events to take into account that some power events are device domain power up/down while others are device power on/off. This prevents occurrences of incorrect HWR regions being shown on the timing graph.
- Added support for capturing ‘Tile Lifetime Tracking’ (TLT) data, available for IMG A-Series devices only. PVRTune will automatically generate a tile heatmap from the captured TLT data, which can be viewed via the Resource Viewer widget.
- Added a new Schedule Resource Capture widget to the connection page which allows users to queue up resource captures before establishing a connection with a device. Note that the user must use remote deployment and select an app for PVRTune to start. This enables PVRTune to automatically select the appropriate PID and GLES context ID. Furthermore, this option will enable Client API EGL and Client API GLES PVRPerfServer timing options. Due to the latency between PVRTune and the driver, requests are not guaranteed to match frame numbers exactly.
- Added RTDataSet support (Requires at least DDK MAIN@5629242), the RT Data Set is passed via the Services Client API data stream in kick events. It allows users to visualise the RT Data Set in use for TA and 3D kicks (disabled by default). To enable this, right click on graph → Render Timing Data Sections → Render Target Data Set. The raw RT Data Set value will also be displayed in the Properties window. RTData and RTDataSet colours are only shown when there is a valid value. For example, 2D, Transfer and Compute tasks do not have a valid RT Data so a coloured bar is not shown.
- Fixed SPIRV-Cross compilation failures in cases where separate image samplers are used.
- Updated the Resource Viewer UI. Improved texture format support, SRGB handling, and performance when thumbnails of captured resources are being generated.
SDK v5.4
- Added MoltenVK implementation. The Vulkan part of the PowerVR SDK can now work on macOS.
- Updated the Android build tools to 29, Gradle wrapper to 5.1 and the Android Gradle plugin to 3.5.
- Updated the CMake version used in Android builds to 3.10.2 so that newer toolchains are supported. The Android SDK ships with 3.6 and 3.10.2 so no additional steps are required.
- Simplified dependencies of Android Gradle projects, optimising parallelism.
- Increased the Java virtual machine’s memory usage for Gradle.
- Greatly improved the use of CMake. The modularisation of the SDK should now be enhanced and writing examples using the SDK should be even easier and cleaner now, as should be adding and removing examples. This is done by using a target-centric CMake approach to the assets and resources management, resulting in a ~30-50% reduction in the size of the CMakeLists.txt of each example.
- Upgraded the command line options of CMake to use the naming convention PVR_XXXXXX. The old variables are still working.
- Updated external project MoodyCamel::Concurrent Queue to latest version. The updated version provides a timeout API, allowing us to remove some modifications we had performed. This allows blocking calls to return on a queue marked for deletion.
- Small overhaul of PVRShell/StateMachine and the application lifecycle. This will affect Android most of all. The state machine can now handle the back-and-forth of the various Android state changes (such as screen on/off, destroy events, and so on) more gracefully.
- Allowed PVRCore to build without GLM and/or pugixml: If SDK/external/glm and/or /SDK/external/pugixml are not present, the relevant files (geometry/math utilities for GLM, xml parsing for pugixml) will not be compiled in and relevant typedefs will be defined.
- Fixed a bug in OpenGL ES UIRenderer that could set the wrong value on winding order and depth mask, and a corresponding bug on OpenGLESDeferredShading that was not setting the depth mask when it should.
- Updated the ImageBasedLighting examples to be in line with each other. The OpenGL ES version now uses a VBO for the sphere instance parameters, and the shader code bindings and UBO structures were brought inline to each other.
- The constructor for AxisAlignedBoxMinMax now initialises max to the minimum floating point value and min to maximum floating point value, This means that the user can immediately start adding points to it.
- Added conversions between AxisAlignedBox and AxisAlignedBoxMinMax.
- Added an overload to ModelGLES which allows the user to pass a smart pointer to a Model instead of a raw object. This means ModelGLES can now manage the lifetime of the Model. Also, added flags to allow the user to specify which of VBOs/Textures should be loaded.
- Fixed a bug in StructuredBufferView, where the copy constructor would end up with an incorrectly copied object.
- Fixed the name of the OpenCL Utils function for loading a kernel file from disk from clutils::loadKernel to clutils::loadKernelProgram.
- Added a pure (non-graphic) OpenCL example, OpenCLMatrixMultiplication.
- The existing PVRVk structures pvrvk::ImageCreateInfo and pvrvk::BufferCreateInfo for creating images and buffers are now used with pvr::utils::createImage and pvr::utils::createBuffer respectively.
- Reordered pvrvk::ImageCreateInfo parameters so that the default arguments align with more common usecases.
- Fixed a bug in the assertion function where it would not output the custom assert message.
- Fixed a bug in StructuredBufferView where the copy constructor would end up with an incorrectly copied object.
- Changed the usage of log.txt as originally the file was continuously opened and closed, causing performance losses.
- Retired the AssetReader and AssetWriter interfaces and replaced them with functions. Most usages of stream function pointers have now been replaced with simple references. Reading and writing files should now be considerably more concise.
- Greatly simplified the interface of the Stream class, ensuring opening on construction and closing on destruction.
- MinGW support : A number of changes have been made that should now account for MinGW being used as a generator for Windows.
- Added a readme file to IBL map generator.
- Completed a revamp of the synchronisation used in VulkanParticleSystem based on latest synchronisation findings. This has resulted in both correct and optimal usage of a GPU accelerated particle system integrated in a traditional graphics application.
- Added overloads for fractional times in the pvr::Time class.
- Made all Time::getTimeXXX functions constant.
- Made a number of changes to the .clang-format file.
- Removed unused uniforms for metallic/roughness when textures are used for them in the OpenGL ES version of the ImageBasedLighting example.
- Removed wrong dependency from PVRVk to PVRCore.
- Added touch screen support for non-window system (NullWS) Linux platforms.
PVRShaderEditor v2.13.0
- Fixed a bug where “Worst” performance estimates were not being calculated correctly.
PVRTexTool v4.23.0
- Fixed a bug where functions were not being exported in Windows DLL.
- Fixed a bug where KTX files would be generated with incorrect capitalisation of “KTXorientation” key.
- Enabled DXT support on Linux and OSX.
PVRVFrame v10.11.0
- Added support for EGL_KHR_wait_sync.
- Fixed a bug in eglTerminate() where contexts and surfaces were being incorrectly destroyed while they were still bound to a thread.
PVRTune Developer v14.148
- Added a command-line option to override the default Comms Buffer Size, for example, –CommsBufSize=3145728.
- If there an unexpected disconnect, such as the packet buffer becoming full, PVRTune now pops up a dialog box offering automatic reconnection after 10 seconds or a cancel button.
- When clicking on a point on the timeline where there are multiple marks together, PVRTune will now show them all rather than just the ‘first’ one.
Counters:
- A GPU string is now placed into the GPU folder name.
- The CPU per-core counters have been moved into a subfolder. The CPU core name now shows in the Counter Table, and in the Monitor tooltips.
- Fixed formatting on CPU description strings.
- Moved the per-PID counters into a GPU specific subfolder.
PVRTune Complete v14.148
- Added support for detailed Vulkan client stream information:
- Vulkan tasks that are part of a frame are now grouped correctly with the corresponding HW tasks.
- TA, 3D, Compute & TQ HW tasks will now display the appropriate Vulkan client stream information, this includes renderpass, compute pipeline and the source / destination buffer/image details respectively.
- Capture SPIR-V shaders and cross-compile into human-readable GLSL to allow for inspection.
- Vulkan object creation information for the following is displayed on the timeline:
- VkPipeline (Graphics & Compute)
- VkRenderPass
- VkPipelineLayout
- VkFramebuffer
- VkImageView
- VkImage
- VkSampler
- VkDescriptorSetLayout
- VkDescriptorSet
- VkShaderModule
- VkCommandBuffer
- VkBuffer
- The following Vulkan commands now contain detailed information regarding the current pipeline state:
- vkBeginCommandBuffer
- vkEndCommandBuffer
- vkCmdBeginRenderPass
- vkCmdEndRenderPass
- vkCmdBindPipeline (Graphics & Compute)
- vkCmdBindDescriptorSets
- vkCmdDraw
- vkCmdDrawIndexed
- vkCmdDrawIndirect
- vkCmdDrawIndexedIndirect
- vkCmdDrawIndirectCountKHR
- vkCmdDispatch
- vkCmdExecuteCommands
- vkCmdCopyBuffer
- vkCmdCopyImage
- vkCmdBlitImage
- vkCmdCopyBufferToImage
- vkCmdCopyImageToBuffer
- vkQueueSubmit
- Added support for capturing default framebuffer and off-screen intermediate buffers from a GLES3 application. If PVRTune is connected to a compatible device then a framebuffer capture can be requested from a running GLES3 application via the new “Resource Viewer” widget. The desired application can be selected using PID and context ID. Additionally, the type of capture can be selected from this widget, the options are “default framebuffer” or “offscreen buffers”.
- Added the latest options to the example command line in PVRPerfServer.
Counter Group Editor:
- The editor now shows/edits the available definitions rather than the instantiated counters.
- Merged the two tree views into one.
- Counters and folders can now be renamed directly.
- When a new counter is created, it is automatically added to the group.
- Dragging and dropping into the root item is now allowed, otherwise reorganising folders in the GUI is impossible.
Counters:
- Appended “@INSTANCESTR@” to the “Host (KM)” folder name.
- A GPU string, BVNC, and codename are now placed into the GPU folder name.
- The New Counter GUI now also shows tabs for System, PID and Abstract counters.
- Counters and groups are now fully defined in the GUI.
PVRGeoPOD v2.27
- Blender v2.27 plugin: Removed scene.update() which is not supported in Blender 2.80.
PVRTrace v3.13
- Fixed a crash that could occur if the recording contained glSamplerParameter*v.
PVRCarbon v0.4
- Updated Vulkan to version 1.1.116.
- Moved the Vulkan PVRTC/ETC decompression out of the player and into a layer (VK_LAYER_POWERVR_format_emulation) that can be used with any application.
GUI:
- Fixed a bug where the current frame would not be updated correctly in the export dialogs.
- Added support to the remote recorder for Android 10.
- Fixed an issue where the remote recorder was not able to remotely kill an application on non-rooted devices.
- eglGetCurrentSurface will now correctly show EGL_READ/EGL_DRAW instead of their enum values.
- The package list of remote recorder now supports filtering the list and launching the packages with command-line options.
- Extended the remote recorder options to include the majority of the recorder options.
- Fixed highlighting of EGL and GL in the current call widget.
- The properties dialog now mentions the ‘frames’ config option.
- Export to code dialog now allows the user to define the name and package name of the output.
- Added support for Android makefiles to the c++ exporter.
Command-Line Interface:
- Added support for Android makefiles to the c++ exporter.
Player:
- Implemented VK_KHR_descriptor_update_template support.
- If eglCreateContext fails with bad config because EGL_KHR_no_config_context is not supported, it will now tell the user.
- Added EGL support for Wayland.
- Fixed playback of eglSwapInterval.
- Updated the Android version to use adaptive icons.
- Added the command-line option: –large-data-memory-hint. This provides a hint to the Player on how much ‘large’ data (for example buffers and textures) should be resident in memory.
- Fixed an issue where some calls would not be loaded if a multi-threaded application died part way through writing to file.
- Added experimental support for multiple windows, meaning the option -w does not need to be specified when playing back.
- Note: Though all windows can now be rendered they may not be rendered in their original layout/position/format.
- Added the –preload command-line option that preloads the Carbon file fully into memory before playing back.
- Offscreen rendering for OpenGL ES now uses framebuffer objects.
- Saved TGAs are no longer flipped for OpenGL ES 2.x contexts.
- RGB and RGBA formats are converted to BGR and BGRA.
- Added playback support for GL_EXT_separate_shader_objects.
- Fixed the usage description on Android so it shows the correct am start command for execution.
- On Android if the Player now fails to create an instance with VK_ERROR_LAYER_NOT_PRESENT, it will inform the user to correct their debug.vulkan.layers property.
- The -w option now works for Vulkan.
- Implemented EGL_ANDROID_presentation_time playback.
- eglSwapBuffersWithDamage falls back to eglSwapBuffers if the extension is not available during playback.
- Draws using client vertex buffers and non-client index buffers now record and play back correctly.
- eglSwapBuffersWithDamage calls will play back as eglSwapBuffers calls on non-window surfaces to prevent crashing on Android.
Recorder:
- Implemented VK_KHR_descriptor_update_template support.
- When disabling ASTC, BC, and ETC2 texture support for Vulkan, vkGetPhysicalDeviceFormatProperties is now overridden to return 0 for any affected formats.
- Added the ability to flush at the end of frames.
- OpenGL ES framebuffer capturing now handles sRGB framebuffers correctly.
- Coherent buffer changes are now flushed on post-OpenGL ES 2.0 draw calls and compute dispatches.
- Fixed bug with glGetBufferPointerv where incorrect pointer was returned for coherently mapped buffers.
- OpenGL ES draw calls using client vertex arrays together with non-client index buffers now record correctly.
- Fixed crashing during SIGTERM handling on Android.
- OpenGL ES uniform locations for uniform array indices greater than 0 are now recorded at program link time. This allows the Player to load uniform arrays starting from an index greater than 0.
- Fixed incorrect data being recorded for coherent buffer updates.
- Recorder: Fixed the recording of multiple frame ranges.
C++ Exporter:
- eglInitialize/eglTerminate are now reference counted by default to emulate the behaviour of Android.
- Fixed an issue in the Windows platform implementation where the native display type was not consistent.
- Fixed an issue where the name of the first exEGL_ANDROID_presentation_timeported variable would conflict with Vulkan namespace create_surface.
- The exported code now supports Wayland.
- Some filtering will now be performed on the EGL_RENDERABLE_TYPE and EGL_SURFACE_TYPE config attributes to increase portability of exported code.
- Fixed exporting glProgramUniform* calls when location is 0.
- Exported files now all end in a new line.
- Fixed a crash that could occur when processing vkAllocateDescriptorSets calls.
- Added support for Android makefiles.
SDK v5.3
- Removed the host compilation of glslangValidator when cross compiling as this had the potential to fail quite easily. This also required a dependency of host toolsets for cross compiled builds which wasn’t desirable. For cross-compiled builds we now download the matching glslang binary release package (https://github.com/KhronosGroup/glslang/releases/) for the host platform and extract it into the correct place (SDK/bin). Only do this if a glslangValidator binary isn’t already in the host bin directory meaning the step will only happen if a cross compiled build is the first build of the SDK on a particular host platform.
- Removed duplicated code for downloading external projects using a common function defined in cmake/Functions.cmake.
- Removed disabling of ENABLE_HLSL, ENABLE_OPT, ENABLE_AMD_EXTENSIONS and ENABLE_NV_EXTENSIONS.
- Fixed an issue in equi_to_cube.py where the displayed width and height of the generated map were half of their real dimensions.
- Tweaked CMake options to better facilitate MinGW Win32 builds.
- Building for iOS now support code signing through build command line.
PVRVFrame v10.10
- Added support for EGL_EXT_swap_buffers_with_damage/EGL_KHR_swap_buffers_with_damage.
- Added support for EGL_KHR_partial_update.
- Fixed a possible crash on OSX in eglQuerySurface.
PVRTune v14.147
- Improved the compatibility of PVRPerfServer with Android Q.
PVRGeoPOD v2.25
- Stand-alone: Fixed exporting more than one set of UVs from FBX.
- Stand-alone: Fixed missing VS2017 run-time dependencies.
- Added missing plug-in for 3DSMax 2020.
SDK v5.3
- cmake build system rewritten to use a target-centric system and embrace various cmake best practices (credit to @RCDaily for the input).
- Now uses transitive dependencies for the various framework modules and external modules. Added various interface libraries to allow more encapsulation. For example, including PVRUtils will now correctly pull PVRCore as a dependency.
- Removed usage of global commands, and replaced their usage with target-specific alternatives such as include_directories -> target_include_directories, link_libraries -> target_link_libraries and so on.
- Now makes use of cmake’s ExternalProjects module. Uses custom targets to download, configure, build, and install for working with third party dependencies: pugixml, VulkanMemoryAllocator, and glslang.
- Removed the external/SPIR-V folder which includes a pre-built glslangValidator binary, and replaced it with an external dependency which is built from source at runtime.
- Integrated glslanginto our SDK as a cmake external project, to allow using run-time generation of SPIR-V modules. Our Vulkan PostProcessing example now takes advantage of this.
- glslangValidator will now be built and installed to SDK/bin//Release where matches the platform for which the binary will be executed on. When cross-compiling, glslangValidator will be built using the host configuration.
- Added an Orbit camera class to our math utilities (sitting alongside the existing FPS and TPS cameras). This camera is now used in ImageBasedLighting.
- Added predefined formats to pvr::PixelFormat for RGB11F11F10F and RGB16F formats.
- Made the AssetWriter interface classes automatically close the corresponding stream on destruction (avoid leaks/partial data on streams via RAII).
- Added a function in the Texture class to retrieve a pixel from a cube texture by direction.
- pvr::utils::createShaderProgram has been moved from HelperGles.h to ShaderUtilsGles.h.
- Updated the PowerVR logo used by UIRenderer to match the PowerVR rebrand.
- Integrated pull request from github: https://github.com/powervr-graphics/Native_SDK/pull/32– fix _WIN32 console builds: Use logLevel parameter rather than undefined ‘error’ variable.
- External libraries are now present or built in SDK/lib/platform_name/. matches the platform for which the library was built for. matches the ${CMAKE_BUILD_TYPE} provided, or the debug or release configuration provided.
- Now auto-generates Windows platform-specific resource file “Resources.rc” during configuration time using the appropriate set of resources (shaders, assets etc.).
- Added support for runtime conversion of GLSL to SPIR-V using glslang to PVRUtilsVk.
- Android: Updated gradle support for Android Studio 3.3.
- Android: Updated compileSDKVersion to 28.
- Android: Updated Android plugin for Gradle from version 3.1 to 3.3.
- Android: Updated Gradle wrapper version 4.4 to 4.10.1.
SDK – examples
- Added Vulkan ImageBasedLightingMapsGenerator, a command-line example and tool for generating Irradiance and Prefiltered maps for Image Based Lighting. It is using Vulkan without a surface (headless). As it is intended to run on the host, the example/tool is currently supported for Windows and Linux.
- Various fixes for both Vulkan and OpenGL ES ImageBasedLighting demos, resulting in greatly improved visuals.
- ImageBasedLighting and PostProcessing demos now use unclipped (full-brightness) environment maps captured from real scenes.
- Replaced use of RefCounted.hwith the use of std smart pointers primarily via the use of std::shared_ptr and std::weak_ptr.
- PostProcessingnow uses runtime-generated templated shaders for Gaussian Blurs to avoid the overhead of dynamic sampling from buffers within shaders. Instead, the Gaussian Blur shaders are provided with Gaussian offsets and weights as constant arrays baked into the shader. This means the compiler is able to provide significantly more optimal shaders than when previously dynamically sourcing offsets and weights from buffers filled with the same weights and offsets. The net effect of these changes is that the Gaussian Blur modes have been massively optimised.
- Adding the VulkanTextureFilterCubic example, showcasing the extension VK_IMG_filter_cubic.
SDK – framework
- Replaced use of RefCounted.h with the use of std smart pointers primarily via the use of std::shared_ptr and std::weak_ptr. RefCounted.h is now no longer being used by the PowerVR SDK and has been marked as deprecated.
- pvrvk::InstanceCreateInfo now takes a pvrvk::ApplicationInfo structure rather than taking a pointer to a pvrvk::ApplicationInfo. This avoids issues where the user would need to keep alive the pvrvk::ApplicationInfo structure. The instance application info can now be safely examined later in the application lifecyle.
- PVRUtilsVk/UIRenderer now takes into account the number of multi-sampled samples being used for the first attachment description for the renderpass being used by UIRenderer.
- Moved the following types into pvr::utils:: namespace – VertexAttributeInfo, VertexInputBindingInfo, VertexAttributeInfoWithBinding.
- Updated Vulkan headers and generated code to VK_HEADER_VERSION 97.
- Added support for the Vulkan extension VK_EXT_debug_utils.
- Added a set of utility functions to PVRUtilsVk for inserting generic debug labels. Also added functions for beginning and ending debug marker regions where the corresponding functions from VK_EXT_debug_utils or VK_EXT_debug_marker will be used, based on the supported debug extension.
- Added the ability to create DebugUtilsMessengers when the extension is supported. DebugUtilsMessengers can be used to provide custom logging when the callback is triggered via specific events.
- pvr::utils::createDebugReportCallback now takes a pvrvk::DebugReportCallbackCreateInfo structure rather than the arguments directly. This better mirrors what happens in the rest of the codebase.
- Added support for InstanceExtensionTable and DeviceExtensionTable provided in pvrvk_vulkan_wrapper.h which are autogenerated. Provided simpler mechanisms for determining whether particular extensions have been enabled for instances/devices.
- The functionality “if(instance->isExtensionSupported(extension))” has now been replaced with “if(instance->getExtensionTable().extensionEnabled)”. The use of multiple string comparisons has been replaced with a single boolean flag making this approach far more efficient.
- Removed “if(isExtensionSupported)” from debug report/debug marker usage in PVRVk. These checks should be made external to PVRVk.
- Increased coverage of utility functions which make use of beginCommandBufferDebugLabel/endCommandBufferDebugLabel in PVRVkUtils.
- Added conversion functions from/to ObjectType/DebugReportObjectType in pvrvk_vulkan_wrapper.h.
PVRVFrame v10.10
- Fixed an issue where incorrect values may be returned when querying GL_VERTEX_ATTRIB_ARRAY_INTEGER and GL_VERTEX_ATTRIB_ARRAY_DIVISOR.
- Fixed a bug where glGetBufferParameteriv(GL_BUFFER_ACCESS_FLAGS) would return incorrect flags in some situations.
- Added experimental support for GL_EXT_shader_framebuffer_fetch.
- Fixed a possible hang in eglCreateWindowSurface.
- Fixed a bug which caused incorrect error values to be generated by glRenderbufferStorage, and possibly other functions.
- Added support for EGL_KHR_no_config_context.
PVRTune v14.147
Complete:
- “Verbose” marks are now categorised separately, for the purposes of filtering, and default to off.
- Enabled tracking of new OpenGL ES events “glDispatchCompute” and “glDispatchComputeIndirect”. These events require at least DDK MAIN@5322926. This also enables correlation of the currently bound OpenGL ES compute shaders with their corresponding compute HW tasks. Additionally, the compute workgroup dimensions are now also available. Selecting a glDispatchCompute or a CDM Kick event will reveal this information.
- Fixed the “–read” command-line option for the Android variants of PVRPerfServer. Note that support is limited to a single input, wildcards are not supported on this platform. Therefore multiple HWPerf .bin files cannot be merged into a single .pvrtune file on Android, if multiple inputs are required then the conversion must be done on Linux.
- Added support for full syntax highlighting of captured GLSL shader source code. The new “Source View” window can be accessed via the Properties tree.
- Added support for GLSL compiler performance statistics. The statistics will be displayed in the Properties view if Profiling Compilers are available. The location of the profiling compiler library can be set via “Preferences -> Select compiler directory”. Shader performance statistics include:
- Theoretical maximum parallel instances that are able to run (based on temporary register usage).
- USC utilisation (occupancy).
- Cycle count, and a break down of where those cycles are used i.e. ALU, iterator, and sampler.
- Instruction count, and break down of the number of: SOPs, complex ops, sampler ops, and iterator ops.
- Temporary register usage.
- Cache stats for Unified and Common stores – read/writes & conflicts per bank.
- Per line cycle counts which are displayed in the left margin of “Source View”.
Developer:
- Overall improvements to search functionality including:
- Vastly improved GUI responsiveness and search performance.
- Now correctly obeys quotes to search for terms containing spaces.
- Fixed some Activity strings, visible in the GUI, that were not searchable.
PVRGeoPOD v2.25
- Added support for Blender 2.80.
- Added support for 3ds Max 2020.
PVRCarbon v0.3
- Updated the Vulkan API to 1.1.107.
- sh now checks to see if there is enough free space available on /vendor before attempting to install the libraries there.
- sh now places libPVRCarbon.so in the right directory for all supported Android versions.
GUI:
- Added support for OpenGL ES to the CPP exporter.
- Added “Select” button to the remote recorder’s Android package selection widget.
- OpenGL ES recordings now have correctly orientated frame buffers throughout the GUI.
- Remote recorder will now record Android applications with no ABI, such as pure Java applications.
- Fixed a bug where the option “Always show the capture prologue dialog” state wouldn’t save correctly.
- Made the naming of the Remote Recorder consistent.
- The current call widget will now be raised when a call is displayed.
- Fixed a bug where search results wouldn’t get flagged as completed/cancelled.
- Fixed a bug where the find button wouldn’t get enabled when loading a previous search value into the search text field.
- EGL/GL enum/bitmasks are now stringified when displaying their values.
- Fixed the saving out of files containing eglSwapBuffers calls from the GUI.
- The final frame’s rendering is now shown for OpenGL ES recordings.
Recorder:
- Fixed missing device functions from vkGetInstanceProcAddr.
- Fixed potential lock up that could occur when recording Vulkan from non-frame 0.
- On Android, we now use JNI to query the application’s file dir when setting the default filename instead of guessing.
- Our exception handler is now installed on the first API call instead of when PVRCarbon is loaded.
- Saving out recordings with recorded frame buffers in will now produce valid files.
- Fixed output path for remote recordings.
- Saving out a carbon file from a network recording now actually generates a file.
- Fixed searching for host libraries on Linux.
- nonCoherentAtomSize can now be overridden in the alignment options.
- Fixed a bug where mapped data was not being captured that had been mapped as flush explicit.
- Fixed the GL_OES_draw_elements_base_vertex functions.
Player:
- Added support for OpenGL ES to the CPP exporter.
- Added –ignore-errors command-line option to stop the player stopping on certain errors. This will make the Player more unstable.
- –export-code now outputs to the .pvrcbn directory if no path is defined.
- On Android, required permissions are now requested on launch.
- Screenshots output from the player are now correctly flipped.
- Implemented the GL_OES_draw_elements_base_vertex functions.
- Player now throws a warning when creating an OpenGL ES 1 context.
SDK v5.2
sRGB Correctness:
- In OpenGL ES, where appropriate and supported, EGL_KHR_gl_colorspaceis 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 -hor –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::assetsnamespace (which is now reserved for Model related information) and up into the pvr::
- 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::vectorswere 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-castwhenever suitable, instead of reinterpret_cast.
- All setters use memcpyinstead of type-punning.
- All primitive types returned by value.
- Added getDeviceMemoryfunction for images.
- Improved surface creation logic for handling DisplayMode
- Removed the unnecessary use of RobustBufferAccessin debug builds.
- Improved the logic of creating/updating descriptor sets that could occasionally cause bugs.
- Added support for configurable queue priorities.
- Fixed some strict aliasing undefined behaviour issues that could potentially surface in -O3 builds:
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. highpis now used only in places where using mediump would result in a loss of precision.
- Cleaned up the CMake build system for more intuitive txtfiles. Common.cmake is now broken down into:
- cmake
- cmake
- cmake
- 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 glGetProgramResourceIndexso it returns the correct index value.
- Bug fix: Fixed glSampleCoveragexwhich 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.
- sofix 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: NoHWdrivers.
- 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-callscommand-line option that will print out a timestamp before the defined calls are played.
- Player: Bug fix: Fixed an issue where playback of glReadPixelswould 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 “” instead of “pvrcarbon.“.
- Player: New: –timestamp-callscommand-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 display modes and their displays.
- Player: Added fallbacks for VK_FORMAT_S8_UINTand VK_FORMAT_D16_UNORM_S8_UINT if they are not supported.
- Player: Added NvOptimusEnablementand 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.
Framework v5.1
Features:
- 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.
Documentation
New documents:
- Migrating from OpenGL ES to Vulkan document.
PVRHub v3.5
- 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.
PVRTrace v3.11
Recorder:
- Fixed a potential crash on Windows if PVRTrace is loaded after rendering threads are created.
- Now works with Android P.
Player:
- 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.
GUI:
- Fixed a bug in the export to txt feature where threadIds would be written incorrectly.
PVRVFrame v10.8
- Fixed an issue in the emulation of glFramebufferTexture2DMultisampleEXT where the attached texture would not be drawn to.
PVRGeoPOD v2.24
- 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.
PVRTune v14.145
- 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.
- Graphs:
- 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.
PVRTexTool v4.20.0
- The imageSize values saved in the mip levels of KTX files now take into account any padding to the data.
Removed support for 32-bit versions of the GUIs and command-line tools.
Framework v5.0
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.
Examples:
- 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.
PVRHub
- Added support for 3ds Max 2018.
- Updated manual to HTML format.
PVRShaderEditor v2.11
- 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.
PVRVFrame v10.7
- 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.
PVRTrace v3.10
- 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.
PVRShaman v2.6
- Updated manual to HTML format.
PVRScope v14.144
- PVRScope User Manual: PVRScopeComms functions take a pointer, not a reference: corrected the code examples.
- Updated manual to HTML format.
PVRGeoPOD v2.23
- 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.
PVRTune v14.144
- PowerVR Series8XT support.
- CPU:
- 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.
- Counters:
- 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.
- Preferences:
- 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.
Snippets:
- New framebuffer downsample snippet.
- New cubic filtering snippet.
Documentation
- 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.
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.
PVRTrace v3.9
- 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.
PVRTune v14.143
- 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.
PVRVFrame v10.6
- 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.
PVRHub v3.3
- 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).
PVRGeoPOD v2.22
- 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).
PVRTexTool v4.18
- 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.
PVRShaderEditor v2.10
- 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.
Installers
- 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 control 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).
PVRGeoPOD v2.20
- 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.
PVRHub v3.2
- Added better detection of rooted devices.
- Support for Android N.
PVRShaderEditor v2.9
- 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.
- 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.
PVRShaman v2.4
- Fixed crash when calculating the bounding-box and vertex data was not interleaved.
- Built-in shader editor and profiler now exclusively handles PFX files.
PVRTexTool v4.17
- Now supports PVRTC compression of textures with dimensions larger than 4096 pixels.
PVRTrace v3.8
- Recorder:
- 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.
- Playback:
- Fixed the –optimised-memory option.
- Fixed the –delay option on Linux.
- GUI:
- 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.
PVRTune v14.142
- 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.
PVRVFrame v10.5
- 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 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.
PVRTune v14.141.1
- 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.
PVRShaman v2.3.1
- Fixed failure to start on OS X due to missing QT library.
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.
PVRVFrame v10.3.1
- Fixed “strict” mode due to it being too strict, which caused issues on some AMD graphic cards.
Installer
- Updated Windows signature to SHA-2. This will stop the “The signature is corrupt or invalid” message.
Overview
In our first release of 2016, we have provided a host of new fixes and updates – including a fully functioning Vulkan backend for the PVR Framework. The Framework itself consists of a light-weight abstraction layer, as well as utility functions, that provide explicit control of Vulkan whilst reducing the amount of code required to render a scene. It features, among other things: utilities for common tasks, such as object creation and asset uploading (e.g. mesh loading & pipeline baking), simplified object lifetime management, and cross-platform setup. It also includes the GnomeHorde demo, specifically created to show multi-threaded command buffer management for Vulkan.
- Added support for the MIPS r6el toolchain.
PVRFramework v4.1
- Brand new fully functioning Vulkan Backend.
- PVRCore:
- New Embedded Refcounted Pointer allows better integration in several cases that need to have awareness of their refcounting and/or have to provide smart pointers to themselves.
- Frustum class with frustum querying/culling functions to facilitate visibility tests.
- PVRApi:
- PVRApi has been broken into PVRNativeApi (the OpenGLES/Vulkan bindings) and the rest PVRApi (the API abstraction).
- Several API objects had their implementations updated to correctly work with Vulkan.
- Functions that create objects that are allocated from Pools have been moved from the Context to the actual Pool objects.
- Numerous CPU-side performance/memory optimisations.
- Textures and TextureViews had their interface changed slightly (Swizzling is now part of the view, Allocation is part of the texture).
- Pipeline Creation had its interface tweaked to work with Vulkan (RenderPass/SubPass is now passed to the Pipeline as a parameter).
- Some objects (Context, Pool) updated with the new embedded refcounting strategy.
- Utils: a new StructuredMemoryView class allows storing the layout of UBOs and similar objects whose structure needs to be known to be updated. Supports providing custom pointers or connecting with buffers for auto-mapping/unmapping.
- Texture upload util function also return de-compressed format and boolean indicating whether the texture has been de-compressed.
- Framebuffer ColorAttachmentView and DepthStencilAttachmentView are now being removed and instead the Fbo uses the TextureView as their attachment.
- PVRUIRenderer:
- PVRUIRenderer needs the render pass and the subpass at the initialization.
- PVRNativeApi:
- Texture upload util function return de-compressed format and boolean indicating if the texture has been de-compressed.
Examples
- Gnome Horde: A demo specifically created to show a strategy for multi-threaded command buffer creation for Vulkan.
- Ported to Vulkan: HelloApi, IntroducingPVRShell, IntroducingPVRAssets, IntroducingPVRApi, Bumpmap, Skinning, Deferred shading.
PVRTexTool v4.16
- Library: Fixed BRN58175. Declared and defined an empty default destructor for PVRTextureHeader to prevent the compilation of a default destructor in the linking binary.
PVRShaderEditor v2.7
- ShaderEditComponent: Fixed an issue where the compiler process was timing out early, and no output would be retrieved.
- The compiler executable is now selectable per tab.
PVRVFrame v10.3
- Added support for EGL_KHR_create_context_no_error.
- Added support for GL_KHR_no_error.
- Fixed eglMakeCurrent returning EGL_BAD_ALLOC when requesting an ES 3.2 context.
- Fixed EGL_BAD_MATCH being reported when explicitly requesting an ES 3.2 context.
- Fixed a case where shaders may fail to translate when the host GLSL version is less than 330.
- Fixed possible shader translation failures when using instancing or uniform blocks.
- Fixed a bug where shaders might fail to translate when the host GLSL version is less than 150.
- Fixed a possible crash on Linux during context creation when GLX_ARB_create_context is not available.
- Fixed EGL_BUFFER_SIZE sometimes being initialized incorrectly on Windows (BRN57130).
- Fixed error checking in glInvalidateFramebuffer and glInvalidateSubFramebuffer (BRN58009).
- Stopped erroneously reporting support for GL_IMG_shader_binary and GL_IMG_program_binary.
- Fixed a bug in OES_required_internalformat support where some internal formats weren’t being accepted.
PVRGeoPOD v2.17
- 3DSMax: Added support for 3DSMax 2016 SP2 (igame version 18.6.667.0).
PVRTune v14.141
- Added counter: “ISP pixel load”.
- Added “Overdraw” counter.
- Hide counters for cores that the HW does not have.
PVRTrace v3.7
PVRTraceGUI
- Added string representations of enums defined by EGL_EXT_image_dma_buf_import and EGL_IMG_image_plane_attribs .
- Added a progress bar to show the progress of image analysis. This implements BRN49610 and BRN58206.
- Added enums from GL_KHR_no_error and EGL_KHR_create_context_no_error. This fixes BRN56048.
- Fixed a bug that caused image analysis to fail when interrupting the analysis.
- Pixel analysis by default now works on the whole frame and not just up to the scrubber. An option is available in the preferences to make the pixel analysis work along with the scrubber.
- The find results widget now becomes visible when a search is started. This fixes BRN58413.
- Added support for viewing buffer object data in hex format.
- Image analysis renders are now cached for all renders that don’t require pixel analysis. The caching can be enabled/disabled in the preferences.
- We no longer do highlighting in single primitive mode if it isn’t the single primitive we’re showing.
- Added support for EGL Displays and GLES Samplers to the object data viewer.
- When viewing a program object you can now see the values of uniforms (only if the trace file was recorded with 4.0 or later).
- Added a Call Hierarchy widget which will show you all the calls the current call/object depends on at that point in time.
- Added options to save out the pixel analysis table data.
- Memory barriers will now display GL_ALL_BARRIER_BITS if that is what it is set to.
- Program stages will now display GL_ALL_SHADER_BITS if that is what it is set to.
- Fixed playback of separate shader objects.
- Tweaked the Draw Call List widget design to better accommodate separate shader objects.
- Under the EGL Objects tabs EglImages are now split by target.
- We now recognise extension GL_EXT_texture_sRGB_decode.
- Fixed the function quick help for glUnmapBuffer.
- Fixed the loading of ES1.1 trace files that do matrix operations using the default matrix mode.
- Fixed a bug where it was possible to have an empty EGLSurfaces header in the EGL Objects list.
- You can now copy search results to the clipboard by right-clicking on the Search’s heading and choosing copy.
PVRTracePlayback
- Added command-line option “–render-offscreen” that will render to an offscreen framebuffer object instead of the draw surface.
- Saving screenshots now adequately takes into account the packing alignment and pixel pack buffers.
- Added command-line option “–print-object-mapping” which will print the mapping between recorded object names and playback object names.
- Added .pvrtrace to the recognised file types for the OSX playback.
- Modified the usage of the command-line option “–save-frame-buffer” so it takes an optional range of frames to output instead of the output location. If you wish to define an output location for the framebuffers you can define it with “–output=”.
- Fixed the displaying of the filesize for files above 2147483647 bytes. This fixes BRN58259.
- Added –override-shaders command-line option that will allow you to modify shaders. On first run this command-line will dump out the shader to the location of the trace file. On subsequent runs the shaders will be loaded and used during playback. This implements BRN58130.
- Added command-line option –export-saved-frame-buffers that exports the framebuffers saved in the trace file. This implements BRN58141.
- Added command-line option –disable-no-error which disables the use of EGL_KHR_create_context_no_error and GL_KHR_no_error during playback. This implements BRN56049.
PVRTrace Recorder
- The message “Recording… Current frame” is now correctly output for frame 0.
- Fixed a bug in the config attribute querying code that could have made the following call return an error of EGL_BAD_ATTRBUTE.
- Optimised recording of glUnmapBuffer. Buffers mapped with GL_MAP_FLUSH_EXPLICIT_BIT or without GL_MAP_WRITE_BIT are not saved out during this call.
Overview
In this release, we aim to ease developers into the new generation of graphics APIs with our new Framework. It is a completely re-written cross-platform and cross-API framework which functions as scaffolding around which to build your own rendering or game engine. In addition to this, we have improved all of our utilities, though PVRTrace is the utility which has had the most changes – not only does it feature a large number of bug-fixes and back-end enhancements, but also a redesigned Scrubber for much improved Image Analysis. PVRTrace now also supports the Android Extension Pack. It also bears mentioning that PVRHub now is compatible with Android 6.0 Marshmallow, and it has been redesigned to support Android TV.
General
- Updated EULA to separate PowerVR SDK (now under MIT licence) and PowerVR Tools (with a revised free license).
Examples
- Ported a core of relevant SDK examples to be targeting the new PowerVR Framework.
- Examples are still classified by beginner, intermediate and advanced levels.
- Examples are now built per API family instead of per API version. At the moment, OpenGL ES Programmable pipeline (2.0+) is provided.
- Platform max supported API version is now checked at runtime, usually creating the latest possible OpenGL context version unless otherwise instructed.
- Revamped the look and feel of the SDK examples by using new themes and assets.
Framework
- Brand new PowerVR Framework, replacing the PVRShell and PVRTools. The new framework consists of separate libraries providing groups of functionality as modules. These modules are PVRCore, PVRAssets, PVRShell, PVRPlatformGlue, PVRApi, PVRUIRenderer and PVRCamera.
- PVRCore provides support for the other modules.
- PVRShell provides platform abstraction/entry point (replaces the old PVRShell).
- PVRPlatformGlue provides platform/API joining functionality to PVRShell.
- PVRApi provides an API abstraction on top of which to build the example (replacing PVRTools).
- PVRUIRenderer provides 2D element drawing/layout functions (replaces the old tools Print3D).
- PVRCamera provides HW Camera abstractions (replaces the CameraModule).
- Uses C++ (namespacing, smart pointers, OOP), the C++ standard library, GLM for maths.
PVRShaman v2.3.1
- Updated to use Qt5.
PVRTexTool v4.2.0
- Updated the PVRTC compressor, improving the quality and memory consumption of compression.
- BRN51737: Fixed thread count calculation which caused an arithmetic exception on Linux and OSX.
- BRN55500: Fixed bug where flipped TGA files (starting top-left instead of bottom-left) were not being interpreted as such.
- Removed the PVRTexLib static libraries. Only the shared/dynamic libraries are available.
PVRTexToolGUI
- The astcenc process is now spawned correctly in PVRTexToolGUI for OSX.
PVRVFrame v10.2
- Fixed a bug in ES 1.1 where the format of internal vertex arrays could be overridden in certain situations.
- Fixed glGetTexParameter only accepting GL_TEXTURE_2D as a target.
- Fixed EGL_TEXTURE_FORMAT not being accepted by eglCreatePbufferSurface.
- Fixed a bug where cube map textures with GL_LUMINANCE format couldn’t be sampled correctly.
- Fixed GL_PATCHES draw mode not being accepted by draw commands.
- Fixed a spelling error causing ‘EXT_tessellation_shader’ to be reported as ‘EXT_tesselation shader’.
- Fixed a crash in eglMakeCurrent(ctx) when ctx is already current on the current thread and has been marked for deletion.
- Fixed glRenderubfferStorage(GL_DEPTH_COMPONENT32F) reporting GL_INVALID_ENUM (BRN56437).
- Fixed glGet(GL_MINOR_VERSION/GL_MAJOR_VERSION) returning the host version (BRN56454).
- Fixed GL_VERSION string not being spec conformant (BRN55737).
- Fixed 2d texture arrays not working correctly with compressed texture formats.
- Fixed a crash when using program interface queries.
- Fixed a potential crash in glCompressedTexImage3D.
- Fixed a case where unsupported GL features might be internally reported as supported, leading to segfaults.
- Fixed glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT) reporting GL_INVALID_ENUM.
- Fixed a bug where glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) would always return GL_TEXTURE when using MSRTT.
- Fixed a bug where glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT) would report GL_INVALID_ENUM when using MSRTT.
- Fixed a bug where glGetRenderbufferParameteriv(GL_RENDERBUFFER_SAMPLES_EXT) would report GL_INVALID_ENUM even when EXT_multisampled_render_to_texture is supported by the context.
- Fixed a bug where extension strings returned by glGetStringi would be missing the “GL_” prefix.
- Fixed a bug where clients could delete vertex attribute zero.
- Fixed glBindFramebufferOES returning GL_INVALID_OPERATION when the given FBO name is not explicitly generated.
- Fixed eglGetCurrentSurface returning a hidden pbuffer surface when using surfaceless contexts.
- Fixed undefined reference in 32-bit Linux libraries.
- Added support for EXT_buffer_storage.
- Added support for ASTC compressed textures.
- GUI: Added hardware profile management tools.
PVRTune v14.137
- Fixed 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.
- Counters:
- Added counter: “ISP pixel load”.
- Added “Overdraw” counter.
- Hide counters for cores that the HW does not have.
- “SPM active”: counter restored to Developer build.
- Counters: “ISP overload” removed.
PVRTuneGUI
- Connection window: Removed the “adb forward” tip, since we have the button now.
- Fixed a bug where whatever was selected into the Counter Properties widget would have its y-axis value minimised when returning to the connect screen.
- Fixed BRN57650: Re-enable ‘Specify Clock Speed’ in PVRTuneDeveloper.
PVRPerfServer
- Fixed BRN57649: PVRPerfServer CPU sample rate now defaults to 1ms, which basically translates to “every wake-up” (and the current default wake-up is every 5ms). Bug fix: minimum CPU load time is 1ms, not 0ms.
- Allow a minimum wake-up time of 0ms, i.e. give up time slice but run again ASAP. PVRTune’s remote control updated in kind.
PVRShaderEditor v2.7.1
- New dialog allows pre-processor macros to be modified and injected into the profiler output as you type.
- Added compiler support for tessellation and geometry shaders.
- New interface to select compiler flags on the fly, per tab.
PVRGeoPOD v2.16.7
- If a material contains an opacity map we now flag the material as requiring blending. This fixes BRN45171.
- Standalone: Updated the parser used internally.
- 3DSMax: Added support for 3DSMax 2016 (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.
PVRTrace v3.6.1
PVRTraceGUI
- 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.
- You can now copy search results to the clipboard by right-clicking on the Search’s heading and choosing copy.
- Search results now appear as they’re found.
- The GUI now correctly shows the shader source for trace files that were recorded without data.
- The Zoom level drop-downs in the GUI no longer permanently set the level when just highlighting, only on selection. This fixes BRN51520.
- Image analysis should now work on frames that rely on the contents of previous frames to be preserved.
- glDraw*Indirect calls now show up in the draw call list with their vertex counts.
- The Fragment Analysis table now shows if a shader uses discard.
- You can now export the state information of a call to .csv.
- Depth complexity now normalises the data so it better uses the available data range.
- PowerVR depth complexity view is now built from pixel analysis data.
- Hovering over the image analysis will now show the pixel value under the mouse pointer.
- Pixel Analysis now includes total vertex and fragment costs under the frame summary.
- Pixel Analysis now works for OpenGL ES 1.
- Pixel Analysis now contains Total cost and Total texture read columns.
- Saving images from the image analysis now displays a message on failure.
- Moved the statistics graph button to the top of the call view.
- Primitive highlighting now applies a colour overlay along with the wireframe. The wireframe and overlay have separate colours which can be defined in the preferences.
- Modified the way the GoTo dialog validates entry.
- The GoTo dialog now displays the current frame/call when there is no text.
- Fragment analysis now takes into account color mask, render target changes and opaque pixel writes that sandwich translucent writes when calculating.
- Output of GLeglImageOES values in the GUI now use the same format as EGLImages.
- Overhauled the save trace file dialog.
- Redesigned the image analysis widget.
- Fragment analysis now correctly works in situations where a program doesn’t have an attached vertex shader or the shader has been modified after link.
- The normal analysis mode has been replaced with colour, depth and stencil options for viewing those respective buffers.
- For single primitive mode we now clear the image analysis to a user defined colour to make it easier to see your primitive.
- The draw call list now includes clears and updates based on the scrubber. It also shows the draw UIDs instead of a number.
- The current call now tracks with the scrubber. This feature is disabled by default and can be enabled in the preferences.
- Made improvements to the frame scrubber. The numbered boxes are replaced with a slider that updates in “real-time” but will drop “frames” if things are taking too long.
- When saving out a trace file from the GUI the saved framebuffer will now also be saved.
- The texture data viewer now recognises GL_DEPTH_STENCIL_TEXTURE_MODE.
- Modified the disable call feature so it is more restrictive in what you can disable.
- The state widget and object viewers now take into account disabled calls.
- A 100% shader analysis pie chart will no longer have a line segment in it.
- You can now view the attributes/uniforms/ uniform blocks of a program (only for recordings from 4.0 and later).
PVRTracePlayback
- Fixed a bug that meant a certain combination of program setup calls would result in glUseProgram failing due to an unlinked program when jumping frames.
- Fixed playback of ID_ES3_glFlushMappedBufferRange for situations where the whole buffer wasn’t getting flushed.
- Fixed deletion of surfaces and contexts which are current at the time their destroy functions are called.
- Fixed GL_PROGRAM_BINARY_LENGTH returning anything but 0 when program binaries are disabled.
- Added –skip-calls command-line option which allows you to skip calls by their UID.
- Added command-line option –raise-context-versions which will raise context client versions that it believes are incorrectly defined. E.g. situations where the app defines a version of 3.0 but uses 3.1 features.
- Added command-line option –config-info which will print out information on the configs used during playback. This fixes BRN56575.
- Rewrote the way we playback multi-threaded trace files.
- We now output a message after loading to say which frames contain renderstate information.
- When using the range option in the playback it will now only load up to the frames it needs to.
- Playback can now save the framebuffer as PNG files.
PVRTrace Recorder
- 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.
PVRHub v3.0
- Added support for Android Marshmallow.
- Added a warning when installing the PVRTrace recording libraries on untested Android versions. The PVRTraceInstaller now needs a -f argument to force an install.
- The interface can now be fully navigated using directional input such as a remote control.
- Fixed crash when launching Android TV apps that only have the LEANBACK_LAUNCHER category declared for their activities.
PVRMonitor v1.03
- PVRMonitor now builds to a minimum API Level of 18 (was 14), which is Android 4.3 from July 2013.
Documentation
- New utility features have been documented in their respective user manuals.
- Updated the PowerVR SDK Browser in line with the changes brought about to the PowerVR SDK.
- Source code documentation for the PowerVR Framework is packaged in their respective modules, as well as being accessible through the PowerVR SDK Browse.
Overview
In this release, support has been added to PVRVFrame for Android Extension Pack (AEP) as well as new hardware profiles for Dell Venue 8 3840, Lenovo K900, Google Nexus Player, Onda V972, etc. In PVRTune, a new set of counters has been defined for Series6 family to make both high-level and low-level analysis easier, for example, the counters are now categorized under Overview, GPU Advanced, Renderer, Shader, etc. PVRTrace features optimized memory usage as well as an enhanced user interface with a new draw call inspector and better render state machine analysis and browsing. In PVRTexTool, we have added support for ASTC. PVRShaderEditor now supports OpenCL profiling and disassembly. PVRHub supports 64bit platforms and also has an updated configuration file format and relaxed requirements for superuser. The SDK now provides out of the box support for Google’s Android Studio IDE.
Examples
- Android: Examples are ported to Android Development Studio and Gradle instead of Eclipse and Ant.
- Android: TextureStreaming – added detection of relevant extensions to allow OpenGL ES 3.0 support and fallback to using OpenGL ES 2.0 shaders if the extensions are not present.
- FilmTV: Added support for GL_EXT_multisampled_render_to_texture and GL_IMG_multisampled_render_to_texture.
- PVRScopeExample: updated to also show the PVRScope ‘standard’ counters.
- OGLES 1 ShadowTechniques: Fixed crash on minimise/restore from android (BRN53618).
- Glass demo: Used different textures for the two balloons to make it easier to discern between reflection/refraction.
PVRTools
- Fixed wrong OpenGL ES token use (GL_BGRA was defined and used instead of GL_BGRA_EXT).
PVRShaman v2.3
- Fixed a textual error in the PFX Semantics window.
- Fixed a bug where a malformed POD file could be generated by adding an empty material.
- Fixed a bug where the ‘Cancel’ button wouldn’t work when attempting to close a scene with unsaved changes to a shader.
- Fixed a bug where the user manual wouldn’t be located if the working directory changed.
- Updated Scene Explorer and POD Explorer to better reflect the underlying POD structure.
- Added blender-style camera controls:
- Rotate: Middle-click + drag.
- Zoom: Mouse-wheel.
- Pan: Shift + middle-click + drag.
PVRTexTool v4.1.5
- Added support for ASTC textures.
- BRN53734, BRN52880, BRN53241: Fixed loading of KTX textures with mipmaps.
PVRTexToolGUI
- Encoded textures now correctly report that they are modified (unsaved) upon creation with an asterisk, and ask if you want to close them without saving.
- Freshly generated textures (e.g. Composed Cubemaps, New Texture Arrays, etc.) now correctly prompt the user to save.
PVRVFrame v10.1
- Fixed a bug in glGetVertexAttribPointerv where INVALID_OPERATION would be reported when there is no bound VAO.
- Fixed a bug in glGetVertexAttribPointerv where null may be returned even when the pointer is set.
- Fixed depth texture values in ES 3.0 being stored only in the red channel when passed to the fragment shader.
- Fixed a bug where some texture formats specified using glTexStorage2D would be erroneously translated.
- Fixed generic VA zero defaulting to 0,0,0,0 instead of 0,0,0,1.
- Fixed glGetVertexAttrib(GL_CURRENT_VERTEX_ATTRIB) not returning the correct value when index == 0 and VAA 0 is disabled.
- Fixed a bug in eglChooseConfig where passing nullptr as the configs parameter would return the total configs instead of the number of matching configs.
- Fixed a bug in glGetActiveUniform where GL_INVALID_VALUE would be reported in cases where it shouldn’t be.
- Fixed uniforms named ‘texture’ not being correctly queryable when using GLSL ES 1.0 shaders.
- Fixed an issue with glDraw* calls where the glVertexAttribPointers use client side buffers and the first parameter is not 0.
- Fixed EGL_BAD_ATTRIBUTE being reported by eglSurfaceAttrib(EGL_SWAP_BEHAVIOR).
- Fixed GL_INVALID_VALUE being reported by glTexStorage2D(GL_ETC1_RGB8_OES) on AMD systems.
- Fixed a texture swizzling bug where using GL_ONE would have the effect of GL_ZERO.
- Fixed a case where SRGB gamma correction might not be disabled for the main framebuffer.
- Fixed EXT_pvrtc_sRGB compressed textures not being decompressed correctly.
- Fixed packHalf2x16 not compiling with 3.0 contexts.
- Added support for EXT_draw_buffers_indexed.
- Added support for EXT_geometry_shader.
- Added support for EXT_primitive_bounding_box.
- Added support for EXT_read_format_bgra.
- Added support for EXT_separate_shader_objects.
- Added support for EXT_shadow_samplers.
- Added support for EXT_texture_border_clamp.
- Added support for EXT_texture_buffer.
- Added support for EXT_tesselation_shader.
- Added support for GL_EXT_gpu_shader5.
- Added support for GL_EXT_shader_io_blocks.
- Added support for GL_EXT_texture_cube_map_array.
- Added a workaround for an obscure Windows/NVIDIA driver bug where in some situations the bound array buffer would get messed up after binding a VAO.
- Added ‘Context Info’ tab in PVRVFrame GUI which shows basic information about the emulated and underlying OpenGL ES and OpenGL contexts.
- Added hardware profiles for:
- Dell Venue 8 3840
- Lenovo K900
- Google Nexus Player
- Onda V972
- redhookbay
- Samsung Galaxy Note 3 SM-N9005.
PVRTune v14.111.1
PVRTuneGUI
- Fixed BRN51238. PVRTuneGUI: Connection timeout advise – “Have you remembered to use ‘adb forward tcp:6520 tcp:6520’ to connect to an Android device over USB?” Text is permanently visible and goes bold if the connection does not succeed in 250ms.
- Preferences dialog box:
- Added option ‘Draw Marks across all timelines’: fixes BRN48806.
- Added option ‘Hide empty timelines’: fixes BRN48807.
- PVRTune window now defaults to mostly-full-screen.
- Graph view: choose a better default splitter position, so that the table is not larger than the graphs.
- Changed default docking window layout.
- Renamed docking window ‘Renderstate Override’ to ‘Render State Override’.
- Render State Override: Moved tick boxes to the left.
- Rogue now has two counter groups: Graphics and Compute.
- PVRTune search: counters now show up in search results as appropriate based on executable (PID name) or PVRScope connection name.
- PVRTune warnings now immediately pop up in a dialog box, as well as presenting the exclamation mark button in the status bar.
- PVRTune monitor:
- Moved CPU and Memory stats to the bottom. This prevents the per-core CPU stats from taking so much space on low resolutions.
- Now allows the user to specify the time range via a context menu, or the combo box. The combo box has been moved to the bottom, and inside the scroll area; this means it does not forcibly use screen space at low resolutions and can be scrolled away.
- Counter Table:
- Counter table now grouped as a tree view with filter options removed.
- Fixed a rare crash when adding/removing columns.
- Groups and counter tool tips now have more info about any PID/CIDs mentioned.
- Enabled dynamic sorting. This keeps the default groups in a sensible order at startup, as apps start & quit.
- Context menu now says ‘Counter Properties’ rather than just ‘Properties’. Also updated keyboard shortcuts via &’s.
- The Master table can no longer have the ‘view’ column disabled, this reduces counter pop.
- Replaced ‘filtering’ with a tree view:
- Removed counter table ‘filter’ button.
- Default tree view grouping is by ‘source’.
- Right-click context menu allows the grouping to be changed to ‘filter’, equivalent to the old filtering option.
- Removed ‘number’ column.
PVRPerfServer
- PVRPerfServer for Linux/Android: now outputs a warning if ‘/sys/kernel/debugs/pvr/gpu_tracing_on’ is enabled.
- Linux: fixed the case where PVRPerfServer is ran as ‘root’ but then apps are run as a user but they can’t connect via PVRScope.
- Command-line option ‘–pid’ is now enabled by default. Added ‘–nopid’ to allow it to be disabled.
- Now sends info about all known PIDs when PVRTune connects; fixes missing data about already-running PIDs.
PVRTune Complete only
- Added HW counter support for PowerVR Series7.
- Added support for selecting ‘custom counters’ (including e.g. SLC) on Rogue DDK branches that support it.
- Added (non selectable) data and counters for SLC read/write counters for SGX branches 1.7 and newer.
- Added all Standard Outputs for any abstract counters that are supported. Just in case they weren’t explicitly created.
- Renamed ‘Anti-aliasing: samples per pixel’ to ‘TSP samples per pixel’.
- Counter Table: Debug counters are now hidden by default. They can be enabled via Edit\Preferences. This setting is not registry saved.
- Added counters:
- Anti-aliasing: samples per pixel
- Pixel quad efficiency
- Shader clock cycles (pixel) per sample
- Iterators per sample.
- Bug fixes in PVRTune’s Custom counter group GUI.
PVRShaderEditor v2.6
- Added support for OpenCL compilers for PowerVR Series6 family.
- Ability to view disassembly information for OpenCL PowerVR Series6 family.
- Added section in the manual about GLSL Compiler tool.
PVRGeoPOD v2.16.4
- Standalone: Fixed BRN53593. Texture names should now be converted to POD for Collada files exported from Maya’s FBX Exporter. Between SDK 3.3 and 3.4 a fix for an unrelated issue broke a workaround for their off-specification texture exporting.
- 3ds Max: Added support for igame version 17.3.374.0.
- GUI: Fixed the output of logging information.
- GUI: Fixed a crash that could occur when doing multiple exports.
PVRTrace v3.5
- Changed the default file extension to .pvrtrace.
- Changed the default filename for the exported calls to mention the trace filename as well as the current frame or if it contains all the frames.
- Fixed the sharing of object names when multiple shared contexts are used.
- Fixed loading of GLsync variables from trace files recorded with version 3.3 and earlier.
- Added support for missing functions from extension GL_EXT_separate_shader_objects.
- New configuration file structure, supporting multiple configurations with wildcard process name matching.
PVRTraceGUI
- Added GL_TEXTURE_CROP_RECT_OES as a recognised enum.
- Added EXT_Separate_Shader_Object functions to the GUI.
- Added option to copy a call to the clipboard.
- Added option to copy the image analysis/texture/fbo attachment contents to the clipboard.
- Added static analysis entry for EGL sync use.
- Added a static analysis report for redundant eglMakeCurrent calls.
- Fixed the ‘clear disabled calls’ right-click option.
- Fixed reporting of redundant glViewport and glScissor calls.
- Fixed tab ordering on Preferences dialog. This fixes BRN51760.
- Overhauled the state, modifications and draw call widgets and removed the texture and shader tabs by merging their functions into a generic object data viewer.
- You can now view the attachments of framebuffer objects.
- Rewrote the code that handles jumping back and forth between frames. A result of this change is that frame buffer objects should now display correctly when jumping.
- Right-click no longer selects a call.
- Re-arranged the GUI so more things are in dockable widgets.
- Thread colours are now shown in the find results.
- Find results will now mention if the search was ‘Incomplete’ due to it hitting the search result maximum limit. This fixes bug BRN52734.
- Alphatest/discard is no longer represented by red in the PowerVR Depth Complexity to avoid confusion.
- Static Analysis now correctly handles multi-threaded trace files.
- The Go To dialog now allows you to jump to a certain call as well as to a frame.
- The Static Analysis now mentions if it doesn’t find any warnings or errors.
- Statistics Graph:
- Added line column to show statistic values for the frame you’re hovering over.
- Moved the context menu options into file and view menus.
- Added export currently graphed data option.
- Added headings to the exported CSV data.
- Fixed a crash if you load a trace file while the dialog is open.
- Fixed an ever-growing dialog if you open multiple trace files in a single sitting.
- Exporting CSV data will now report success or error instead of being silent.
- The thread tab will now be enabled if you first open a single threaded trace followed by a multi-threaded trace.
- The statistics graph dialog can now be opened from the statistics dock widget.
- Ctrl + C will now copy the graph area to the clipboard.
- Fixed off by 1 frame error.
- Fixed zooming in and out shortcuts so Ctrl+ is in and Ctrl- is out.
PVRTracePlayback
- Scaling of the default framebuffer now takes into account scissors.
- Fixed X11 and Window scaling. In the case of the latter we also now take the window decoration into account when scaling.
- We now playback EGL_KHR_wait_sync and EGL_KHR_fence_sync instead of ignoring their calls.
- The window list now displays the width and height on start up.
- Added –config command-line option that allows you to override config attributes. It also supports –config= to override a specific config. However, the trace file will need to have been recorded with 3.5 or newer for this to work.
- Added command-line option ‘–fake-client-buffers’ which will use textures to fake clientbuffers if their formats match a GL version.
- We now output a message saying which window will be played if –window is used.
- If we now fail to find a recorded value and playback value mapping for attribute/uniform/uniform block locations then we attempt to use the recorded value.
PVRTrace Recorder
- Added a message to tell the user that we’re disabling shader/program binaries.
- Fixed recording of EXT_separate_shader_objects functions.
- Tweaked the way we determine the width and height of the window surface. This works around an issue on Android where in rare situations incorrect values would be recorded.
- Fixed recording of the texture parameter GL_TEXTURE_CROP_RECT_OES.
- Fixed renderstate override and the frame number in the API timeline on Android KitKat when in profile mode.
PVRHub v2.2
- A superuser APK is no longer needed to start and stop tracing.
- Advanced and process-specific PVRTrace settings that are not configurable through PVRHub itself are now retained instead of overwritten in the pvrtraceconfig.json file.
- Now installs both the 32-bit and 64-bit PVRTrace recording libraries on 64-bit platforms.
Documentation
- PVRTrace user manual: Included sections for draw call inspection and current call inspection as a result of GUI changes.
- PVRShaman user manual: Fixed a problem where some keywords in the PFX semantics table had an incorrect description.
- PVRTexTool user manual: Added a section for explaining the different encoding modes for PVRTC and ETC.
- PVRShaderEditor: Added section in the manual about GLSL Compiler tool.
- BRN51829: Fixed typos in Series6 Compiler ISR.
- SDK Browser: Added new instructions for building SDK examples on Android using Gradle and Android Development Studio.
- Added a new separate document for capturing default PVRTune counter list and description.
Overview
In this release PVRShaderEditor adds the latest compilers for Series6, Series6 FP16, and Series6XT to provide more up-to-date profiling. PVRShaderEditor also adds new functionality to access the GLSL disassembly for these compilers, as well as full instruction set documentation. In addition, several performance optimizations have been made for the different utilities in the PowerVR Tools suite. New SDKs have been added including WebGL, Android 64bit and Linux MIPS. Furthermore, a fully redesigned PowerVR SDK Browser is now supplied with the distribution for improving accessibility of the SDK contents.
Builds
- Added support for Android arm64-v8a, x86_64 and mips64.
Examples
- PVRScopeExample and PVRScopeRemote: updated for PVRScope changes.
- PVRScopeExample: CPVRScopeGraph::SetActiveGroup() now accepts a group number even if there are no counters in that group, if there are higher groups. This allows PVRScopeExample to pass an empty group, to reach a higher, populated group number. Allows for ‘invalid’ group numbers – i.e. SW counters.
- PVRScopeRemote:
- Make use of PVRScopeComms new support for nested begin/ends.
- Utilise the CPPLProcessingScoped helper class where appropriate.
- Use the optional pplWaitForConnection() function.
- Instrumented all remaining functions in the app (LoadTextures, LoadShaders, LoadVbos), using CPPLProcessingScoped. Also made use of the __FUNCTION__ define.
- OGLES3ProceduralTextures: corrected input flags for glMemoryBarrier.
PVRShell
- CPVRTPrint3D: Fixed out-of-bounds access.
PVRTools
- CPVRTPFXEffect: Fixed the Destroy() function to destroy the texture data.
- Fixed a bug in the implementation of PVRTMap where calling ‘Remove’ might have incorrect behaviour.
PVRShaman v2.2.2
- Incorporated new icons in the GUI.
PVRTexTool v4.1.4
- Increased performance of ETC decompression. It’s now up to about 20% faster per surface, depending on the compression scheme.
- Fixed scaling issue. All test cases now work 100% correctly when downscaling.
- Fixed crash when saving a texture with MIP Maps to a KTX file.
PVRTexToolGUI
- Updated icons to new consistent style.
PVRTexToolCLI
- Fixed padding argument so that they actually pad the metadata.
- Fixed bug with ‘-squarecanvas +’ where size was being set to the largest of width and depth instead of width and height.
PVRTexLib
- Updated PVRTC Compressor to version 1.190, which fixes the single region crash, which caused small PVRTC2 textures (or MIP Maps) to crash the tool.
- Fixed bug in PVRTC2 compressor where it won’t properly compress textures that generate a single PVRTC region in the Y dimension (i.e. any texture, or MIP Map level in a texture, with a height of 4 or lower).
PVRTexTool Plugins
- Added 2015 versions of Autodesk 3DSMax and Maya.
- Fixed channel order when loading PVR files in Maya.
PVRVFrame v10.0
- Performance improvements.
- Added support for OpenGL ES 3.0 on OSX.
- Added Windows XP support.
- Added support for KHR_blend_equation_advanced and KHR_blend_equation_advanced_coherent.
- Added support for EXT_texture_sRGB_decode.
- Added support for GL_EXT_robustness.
- Added seamless cube map support for OpenGL ES 3.0+ contexts.
- Fixed glTexStorage2D when format GL_DEPTH24_STENCIL8 is used.
- Fixed shaders of different versions being linkable.
- Fixed GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH always returning 0.
- Fixed a possible data race situation when using textures in multiple threads.
- Fixed a bug in glTranslatex where values were not being converted correctly.
- Fixed a possible crash on OSX when sharing contexts.
- Fixed STENCIL_INDEX8 format textures not being allowed with an ES 3.1 context.
- Fixed a bug in eglCreateWindowSurface where allowed attributes weren’t being checked correctly.
- Fixed error checking of requested major/minor version in eglCreateContext.
- Fixed an issue on Linux where contexts would be initialized incorrectly when using mesa OpenGL drivers.
- Fixed gl_FragData in shaders not being translated correctly.
- Fixed a bug in GLSL translator where textureCubeLODEXT was not being translated.
PVRTune v14.88
- Renamed TA to Tiler, and 3D to Renderer.
- Added counters:
- Shader proportion: pixel.
- Shader proportion: vertex.
- Shader proportion: compute.
- Vertices per batch.
- Shader slot scheduled count: compute.
- Shader slot scheduled count: pixel.
- Shader slot scheduled count: vertex.
- Shader slot size: pixel.
- Shader slot size: vertex.
- GPU task time per frame: Tiler core.
- GPU task time per frame: Renderer core.
- GPU task time per frame: 2D core.
- GPU task time per frame: Compute core.
- Complete build and custom counter groups:
- Custom counters: editable fourth column.
- Rename the count modes “unary” and “binary”.
- Added a filter input box for the first three columns.
- Set the stretch factors to give the rightmost two columns more space.
- Removed uniformItemSizes for the first list. That also affects width, which means the horizontal scroll bar wasn’t appearing soon enough.
- Fixed tab order, and put the focus in the filter box by default.
- Now saves and restores the dialog’s geometry each time.
- Now create counters for custom HW sources.
- BVNC string parsing. Should now handle V=’cb’ or V=’3p’ style BVNCs. When automatically creating per frame and per second counters for HW sources, now also creates a per clock counter.
- When automatically creating per frame and per second counters for HW sources, now also creates a raw counter. This lets you see the actual count in the time period. Perhaps useful in the counter table, but not in the graph.
- SGX XT counter: “Shader load: Compute”.
- New counter: Batches per frame.
- New counter: Shader proportion: event.
- PVRTune regression fix: Counter Table group combo box now correctly displays the chosen group.
- Fixed some counter sources not being visible after choosing them in a custom group.
PVRTuneGUI
- PID docking-window: fixed occasional disappearance of known application names (they are only received if PVRPerfServer is run with the -pid option).
- Monitor docking-window:
- Data no longer “pauses” during periods of no GPU activity.
- Added the missing shader core load, for Rogue.
- Counter properties docking-window:
- No longer lets the window size grow due to a long counter Name or Source string.
- Also sets the Name and Source strings as StatusTips (ToolTips are too distracting) – allows larger strings be read.
- Added support for nested user timelines. PVRTune renders these as a “flame graph”.
- Connection screen:
- URL buttons now automatically shrink their text to fit (lost during port to Qt).
- “Connect To:” box now gets the focus by default, as it should, and as it used to. Can once again simply run and press Enter to go straight to the last connection.
- Now convert all file path slashes to ‘/’. This fixes/removes the possibility of two ‘matching’ paths in the file history but with different slashes on Windows.
- Status bar: now has a visual semaphore indicating connection warnings; click to show the PVRPerfServer Details dialog box.
- Added more feedback to PVRPerfServer details: now shows warnings at the bottom.
- Complete build: additional info.
- Fixed some rare crashes.
- Main window: fixed the ’empty window’ behind the splash screen during first (no preferences file) start up.
- Changed the default docking-window layout:
- Top Dock left to right: counter table (default top-most), search, remote editor.
- Bottom: Monitor (default top-most), Props, RS override, PID.
- Mouse hover over the Monitor now causes counters to highlight. Also, in the bar chart style, empty components will now have a hit-test result.
- The Counter Table context menu now has a new option “Properties”, which enables and brings the Counter Properties docking window foremost, and sets the focus to the Y-Axis input box.
- Graphs:
- Graphs now scroll more smoothly even when received data is intermittent.
- Fixed an issue where start-up with a zoom value of one (1) would mean that the mouse-wheel could not be used to zoom out, but other methods could.
- Fixed vertical centering of timeline labels on Windows and Linux.
- Renderstate Override: sets vertical policy to preferred, rather than fixed. Makes it a much more polite docking window.
- Fixed a case where scrolled graph rendering could show pixel corruption (refresh would fix).
- PVRTune performance optimisations.
- Bug-fix: restore proper counter tool-tips.
- No longer remember zoom or position between sessions. When loading from a file, automatically “view all” when complete.
- New icons.
PVRPerfServer
- PVRPerfServer command-line:
- All non-single-character commands must now be prefixed with two dashes, e.g. –pid rather than -pid.
- Added new command line option quit after time (qat) e.g. “–qat=4.2” which commands PVRPerfServer to auto-quit after a time of 4.2 seconds.
- PVRPerfServer for Linux, BB10 and Android: made unnecessary and removed command line option “–disable-user-input”.
PVRScope Library
- PVRScopeComms.h:
- Don’t prefix strings with psz (thereby specifying NULL-terminated), when in fact there is a string-length parameter. pplSendMark() comment improved: the input string is not time-stamped, it’s done internally.
- New class: CPPLProcessingScoped. Helper class which will send a processing begin/end pair around its scope. You would typically instantiate these at the top of a function or after the opening curly-brace of a new scope within a function.
- PVRScopeComms.h: updated comments; pplSendProcessingBegin() / pplSendProcessingEnd() pairs can now be nested.
- PVRScope: Headers should work with C code.
- PVRScopeReadCountersThenSetGroup(): removed nTimeUS parameter as it is now queried internally.
- Split PVRScopeReadCountersThenSetGroup() into two new functions: PVRScopeReadCounters() and PVRScopeSetGroup().
- PVRScopeStats: new function PVRScopeFindStandardCounter().
- Fix for per-render counters (per-frame were ok).
- Fixed a regression in the first SDK 3.3 release that could cause noisy data.
PVRShaderEditor v2.5
- Increased stability for heavy use.
- Fixed keyboard shortcuts for consistency across Linux, Windows, and OSX.
- Added support for new OGLCompiler Performance Simulation flag.
- Added support for OCLCompiler flags.
- Compiler options layout redesign, adding support to do per-file configuration.
PVRGeoPOD v2.16.3
- CLI: Updated the command-line. Old commands will still work for release but are now undocumented.
- Blender: Fixed the exporting of cameras that are the children of other objects.
- Fixed a bug where meshes were split even if we weren’t exporting materials.
- Added support for 3ds max 2015 SP 2 (igame version 17.2.259.0).
PVRTrace v3.4
- Added data compression for trace files to reduce their size.
- PVRTrace will now output an error message if you attempt to load a trace file with a file format newer than the latest format recognised.
- PVRTrace files are no longer allowed to have ‘:’ in their name. This caused issues when recording on Android where it is allowed and trying to pull the file on to Windows where it isn’t.
- glTexEnv and glGetTexEnv now show the enum values as strings where appropriate.
- Frame count now begins at 0 to match the recorder.
- Export frame stats now exports information from the first frame.
- Significantly reduced memory usage.
- glStencilMask now shows its mask as a hex value instead of an unsigned int.
- Fixed a bug in the renderstate tracking of glCopyBufferSubData.
PVRTraceGUI
- Fixed an issue with the generation of the PowerVR depth complexity for some trace files.
- You can now view the attributes of a config used for context and window creation by hovering over the config parameter of their respective eglCreate* functions.
- We now display an error message if the profiling compiler fails to compile a shader.
- Added the GL_EXT_debug_marker functions.
- The image analysis spinning loading symbol now scales with the window.
- glIsQueryEXT now loads the return value.
- The static analysis now shows errors for shaders that failed to compile and programs that failed to link if and only if the trace was recorded with the latest version. Also, if you hover over the call in the static analysis window it’ll mention the compilation/linking information log.
- The call summary export now includes lists all API calls instead of just the ones used. This should make is easier to diff application runs.
- Fixed call highlighting on Linux.
- The “cancel” button has been removed from the search dialog. Now, if a search is running the “find” button becomes the “cancel” button.
- Softened the static analysis warning about using scissor rectangles as this only applies to SGX.
- If the trace file was recorded with the save framebuffers option you can now export the framebuffers to a folder as separate images.
- Fixed a crash that occurred if the statistics dialog was open when exiting.
- The call view can now be navigated with the page up and down keys.
- Fixed the function quick help which was broken for some functions.
- Added the function quick help to extension functions where possible.
- Fixed a bug where the thread list would not get cleared when loading multiple trace files.
- Play failed calls is now disabled by default.
PVRTracePlayback
- By default we now playback calls that caused errors during recording. This can be disabled within the GUI or in playback via the command-line.
- Fixed an issue with playing back uniform blocks.
- Added support for the query EXT functions.
- Added –robust that will force the use of EGL_EXT_create_context_robustness and GL_EXT_robustness and will check the reset status of the GL context after each call. If you do –robust=0 it will disable the use of those extensions.
- Added support for playing back eglCreateImageKHR with targets:
- EGL_GL_TEXTURE_2D_KHR.
- EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR.
- EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR.
- EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR.
- EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR.
- EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR.
- EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR.
- EGL_GL_TEXTURE_3D_KHR.
- EGL_GL_RENDERBUFFER_KHR.
PVRTrace Recorder
- Fixed 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.
PVRHub v2.1
Android
- Added an option to compress data in trace files.
- Added an option to enable/disable the gathering of CPU usage data when profiling is enabled.
- The recording output level is now configurable.
- You can now set the initial state of the renderstate overrides.
- Added option to disable the appending of the PVRTrace version to the GL_RENDERER and EGL_VERSION strings.
- Added the option to send markers to PVRTune when profiling.
- The “Application list” gets cached at PVRHub launch time (there is an option to refresh it) decreasing substantially the load time.
- User Interface
- Added new icons.
- Other minor UI changes such as simplification.
- Added option to share trace files.
- Added a “File Manager” option to help developer manage the recordings captured.
Documentation
- New SDK Browser to make easier to find the material contained in the PowerVR SDK with full explanations, hyperlinks and enhanced installation instructions.
- Major styling improvements brought about to the Shell, Tools, PVRTexLib and PVRScope documentation.
- Major overhaul of various user manuals in order to better address the needs for the intended audience of developers.
- PowerVR Supported Extensions documentation:
- Added GL_OES_texture_stencil8.
- Updated extensions listing to match current driver support.
Installer
- Added Android OpenGL ES 3.0 SDK.
- Fixed all Utilities shortcuts on Windows and Linux.
- Fixed file association on Linux.
- Added TextureStreaming demo missing from the installer.
- Added missing OpenGL ES 3 iOS deliverable.
- Fixed VS2010 redistributable install logic and fixed behaviour when Microsoft installation is cancelled.
Overview
- New: OpenGL ES 3.0 SDKs for iOS and Android.
- New: OpenGL ES 3.1 SDK for Windows and Linux emulation.
- New: TextureStreaming demo for iOS and Android. Demonstrates how live camera data can be efficiently uploaded to OpenGL ES.
- New: PVRShaderEditor now supports syntax highlighting for GLSL ES 3.10 shaders.
Builds
- Added OpenGL ES 3.1 PC Emulation SDK for Windows and Linux.
- Added OpenGL ES 3.0 SDK for iOS and Android.
Examples
- IntroducingPOD: Always write an alpha value of 1.0 in the fragment shader to avoid potential OS compositor artefacts.
- Skybox2: Tweaked the precision modifiers.
- Android, OGLES2TextureStreaming: Added Android demo which makes use of the Camera Interface.
- iOS, OGLES2TextureStreaming: Added missing CameraInterface dependencies.
- iOS, OGLES2TextureStreaming: Changed mapping iOS camera texture to the recommended GL_LUMINANCE and GL_LUMINANCE_ALPHA (which works in OGLES2/3).
- iOS, OGLES2MultiThreading: Changed main application file from .cpp to .mm to enable correctly including relevant objective-c style header files.
- iOS, OGLES2Glass: Fixed run time error on iOS when binding the default FBO object.
PVRShell
- Context creation failures updated to contain requested API version.
PVRTools
- Added Android Camera Interface.
PVRShaman v2.2.1
- Added missing types, qualifiers & built-ins for GLSL ES 3.00 syntax highlighting.
- Added GLSL ES 3.10 syntax highlighting.
PVRTexTool v4.1.3
PVRTexToolGUI
- Fixed crash when trying to compare images of different sizes. Error message is now correctly displayed.
- Fixed floating point texture loads so that they don’t get converted to 8-bit unorm on load.
PVRTexTool Plugins
- Maya: Fixed channel order when loading PVR files in Maya.
PVRVFrame v9.9
- Fixed a bug where glGet(GL_NUM_EXTENSIONS) would return the wrong value.
- Fixed a bug in GLSL translation where #define may be stripped incorrectly.
- No longer erroneously exposes glShaderStorageBlockBinding.
- Added support for proper creation of ES 3.1 contexts.
- Fixed memory leaks.
- Fixed symbols not being exported correctly:
- glBindVertexBuffer.
- glVertexAttribBinding.
- glVertexAttribFormat.
- glVertexAttribIFormat.
- glVertexBindingDivisor.
- glCreateShaderProgramv.
- glGetBooleani_v.
- glGetTexLevelParameterfv.
- glGetTexLevelParameteriv.
- glMemoryBarrierByRegion.
- Fixed glPointSizePointerOES not being exported on Linux.
PVRTune v14.15.2
- Counter renaming: US, USC and USSE to Shader.
- Added Rogue counters: Shader load: Compute and Shader ALU efficiency.
- Restored some missing counters when running with Series6 HW.
PVRTuneGUI
- Fixed a crash at start-up when the “hide unnecessary tabs” option is disabled.
- Counter results in a Search window are now interactive. Hover to highlight; click to select; drag and drop onto graph views, underscore if highlighted elsewhere.
- Added counters per PID, per GPU core task time counters, alongside existing task load counters. (BRN47467).
- Search and Monitor no longer consume CPU time when their dock window is not topmost.
- Counter table: restore old behaviour: Inactive counters now fade before disappearing (if ‘hide inactive’ is enabled).
- “Search” widget dropdown box items should be listed chronologically (BRN45741).
- Counter Table and Search windows no longer force themselves to be top-most at app start-up.
- Fix for per-core CPU usage on Linux/Android when cores are being enabled/disabled on the fly (BRN47850).
PVRPerfServer
- When the ‘-pid’ option is used, now also send the executable name for all PIDs seen using the GPU.
- Fixed a crash when using the ‘sendto’ option along with applications that use PVRScope (BRN47848).
PVRScope Library
- Fix for per-render counters only (per-frame were ok) that caused the data to be out by a factor of two.
- Fix a regression in the first SDK 3.3 release that could cause noisy data.
PVRShaderEditor v2.4
- Added missing types, qualifiers & built-ins for GLSL ES 3.00 syntax highlighting.
- Shader type is detected by file extension first. If the extension is unknown, fuzzy logic is used to guess the shader type.
- Added GLSL ES syntax highlighting for the following extensions:
- EXT_shader_framebuffer_fetch.
- EXT_shader_pixel_local_storage.
- OES_shader_multisample_interpolation.
- GL_KHR_blend_equation_advanced.
- EXT_shader_pixel_local_storage.
- OES_sample_variables.
- OES_shader_image_atomic.
- OES_texture_storage_multisample_2d_array.
- Added GLSL ES 3.10 syntax highlighting.
- Updated the New File wizard to support GLSL ES 3.10 vertex, fragment and compute shaders.
- Added background compilation for GLSL ES 3.10 vertex, fragment and compute shaders when a GLSL ES 3.10 capable compiler is active (a pre-release version of our GLSL ES 3.10 compiler can be downloaded from our support portal: https://pvrsupport.imgtec.com/downloads).
PVRGeoPOD v2.16.2
- Added support for IGame version 16.5.277.0 and 17.1.149.0.
- Added support for 3DSMax 2015 (IGame 17.0.630.0) and Maya 2015.
- The exporter now exports mesh nodes as dummy nodes when the “export geometry” option is unticked. This fixes a crash that can occur if the mesh is the parent of another type of node, e.g., light.
PVRTrace v3.3.1
- The image analysis image now uses bilinear filtering when scaling the image below 100%.
- These enums are now represented by strings in the GUI:
- EGL_NATIVE_BUFFER_ANDROID.
- GL_CONSTANT_COLOR.
- GL_ONE_MINUS_CONSTANT_COLOR.
- GL_ONE_MINUS_CONSTANT_COLOR.
- GL_ONE_MINUS_CONSTANT_ALPHA.
- Added missing types, qualifiers & built-ins for GLSL ES 3.00 syntax highlighting.
- Added GLSL ES 3.10 syntax highlighting.
PVRTrace Recorder
- The recording of clientbuffers now supports sampling the data once at time of egl image creation using config value 3.
PVRTracePlayback
- Fixed playback of glVertexAttribDivisor.
- Fixed the playback for some traces which would fail to create a window surface if they weren’t the first trace file open.
PVRHub v2.0
Android
- Added a dialog to help the user kill an already running app.
- Changed the PVRHubDaemon backend implementation.
- Improved stability and speed.
- The backups are now made (and restored) every time the Android build ID changes (i.e. system upgrade).
Linux
- Scripts now generate a pvrtraceconfig.json file.
- Added OpenGL ES 3.0 support.
PVRMonitor v1.01
- Added a new CPU widget that displays multiple cores as vertical bars on the same lines as PVRTune.
- Now the GPU values can be smoothed over 0.5seconds, similar to the CPU values.
- Few minor UI tweaks.
Documentation
- Extensions: Updated GL_OES_EGL_image/GL_OES_EGL_image_external descriptions to match their actual behaviour.
- PVRTrace user manual: Updated the document with revised manual Android installation instructions (rooted).
- PVRGeoPOD user manual: Updated compatibility table to show support for new 3dsMax 2014/2015 and Maya 2015 versions.
Installer
- Updated InstallBuilder to v9 to solve the problem with cached files after an installation failure.
- Removed MSVC2010 redistributable installer as it was causing SDK installations to fail.
- Fixed missing PVRTune documentation shortcut.
Overview
- The PowerVR Graphics SDK v3.3 includes support for the recently ratified OpenGL ES 3.1 in PVRVFrame, our desktop emulation libraries.
- PVRTrace now includes full recording capabilities on Android 4.4 (KiKat) and the handling of Android Native Buffers has been improved. Developers also now benefit from enhanced search and remote recording capabilities and complete support for OpenGL ES 3.0 API.
- PVRTune implements a new ‘monitor’ window which provides a simplified and high-level overview of CPU, memory and graphics loading, allowing developers to quickly isolate application bottlenecks. It also has improved highlight and selection capabilities and implements new per-PID stats.
- In addition, the SDK’s documentation has been comprehensively reviewed and updated.
Note
Full support for the recently ratified OpenGL ES 3.1 API has been added to PVRVFrame. Please note that this support is only intended for early development, as an OpenGL ES 3.1 conformance test has not yet been released. To use it, please download the header files from the Khronos website. We will shortly release a full SDK highlighting the most important features of this new API.
Examples
- ToneMapping: Now it uses point sampling for its float texture.
- OcclusionQueries: Fixed the name of the texture variable in the effect.pfxs.
- ShadowMapping: Fixed a typo in the OGLES3 effect.pfx file which resulted in the texture coordinates being uninitialised.
- EdgeDetection: Moved initialisation of timer to InitView so the first value is valid. This fixes the problem using -fft command-line option.
- MagicLantern: Moved initialisation of timer to InitView so the first value is valid. This fixes the problem using -fft command-line option.
- Water: Updated with new assets including a new skybox, ship and terrain.
- Shaders: Improved command-line parsing so it doesn’t attempt to match any option that begins with -s or -m.
- DeferredShading: Stencil buffer was not requested in the EGLConfig for ES3, but was assumed and used. Now updated to always request a stencil buffer.
- TextureStreaming: New example for Android and iOS.
- Added OGLES3 iOS project files for all examples capable of running on iOS.
PVRTools
- PVRTString: Added positional variants of the format commands.
- PVRTTexture: Added PVRTC sRGB texture support.
- PVRTPFXParser: Fixed crash while processing texture wrap parameters.
- PVRTArray: Changed the Sort() method to use merge sort instead of bubble sort.
- PVRTError: Fixed warning in PVRTError.h as the format parameter to printf was not a string literal.
- PVRTResourceFile: Added a null pointer check in GetFile.
- Added a new CameraInterface library for Android and iOS which allows quick initialisation and usage of hardware cameras to stream textures to OpenGLES.
PVRShell
- Improved the Android OS lifecycle.
- Modified PVRShellOutputDebug on Windows to dynamically allocate its buffer instead of using a fixed size of 1024.
PVRShaman v2.2.0
- Fixed bug in which the Save POD icon would be greyed out.
- Added the displaying of POD textures such as bump and specular level to the Material Properties dialog.
- Fixed bug when using external shader files in a PFX material. The material would fail to pass validation.
PVRTexTool v4.1.2
PVRTexLib
- Fixed issue with BC1 Compression producing holes in fully opaque textures when an entire block was the same colour.
- Fixed memory leak in ETC2 Codec.
- Integrated latest version of PVRTC codec, which should produce generally better quality images, and manages threads a bit more smartly.
- Fixed issue with certain ETC textures not compressing correctly under Windows.
PVRTexToolGUI
- Font texture generation now outputs white textures rather than black.
- Fixed channel swapping so that when multiple file sources are selected, it correctly copies the channels.
- Fixed memory leak when zooming in/out of Diff window.
- Added RGBA/RGB distinction for PVRTCv1.
- Added PVRTC sRGB support.
- “Single” display mode now zooms to/from the mouse position, rather than the corner of the screen.
PVRVFrame v9.8
- Added OpenGL ES 3.1 support.
- Fixed vertex_array_object extension not being emulated on OSX.
- Fixed GLSL translator where reserved identifiers were erroneously added to the GLSL source.
- Fixed EGL_SUCCESS not being reported by some EGL functions in cases where it should.
- EGL_BAD_ALLOC now reported by eglCreateWindowSurface on Windows platforms if the application attempts to re-use an HWND for which the pixel format has already been set.
- Fixed EGL context ids where it would not always be unique.
- Fixed GL_LUMINANCE texture data clamping to [0,1].
- Fixed glBindRenderbuffer where it would not work with names not generated by glGenRenderbuffer.
- Fixed a crash in glDeleteSamplers.
PVRTune v14.73
- PVRScope library only: Reduced noise in per-core activity counters.
- h, PVRScopeReadCountersThenSetGroup(): Updated comment to consider standalone performance-tracking applications such as PVRMonitor or a logging app.
- PVRPerfServer can now send CPU usage info for ‘interesting’ PIDs that it sees: apps that connect via PVRScope, PIDs shown in HWPerf timing data, and PIDs specified on the command line. To enable it, specify “-pid” on the command line. To additionally watch specific PIDs, specify “-pid=A,B” etc.
- Added per-core task time counters.
- Added per-PID stats: TA Busy %, 3D Busy %, 2D Busy %, Compute Busy %, 3D SPM %.
- Dynamic counters created per PID or CID now place the PID/CID number first; gives easier sorting.
- CPU usage can now be sent per core and per PID.
- Memory usage can now be sent for the system and per PID. Added counters: Memory use, Memory total, Memory load, PID %u: Memory use.
- Added new docking window: Monitor. This gives a simplified ‘at a glance’ view of the CPU, memory and graphics loading.
- Fixed: When connecting, disconnecting and reconnecting, pause was enabled by default.
- Search window:
- The “select” tick box has been removed.
- Mouse-over search results now highlights the relevant time range (if any) in the graph views.
- Single-click on a result now pans the view, rather than panning + zooming.
- Double-click on a result now pans and zooms the view.
- Holding the Ctrl key while doing either of the above also selects the time range. (Similar to how Ctrl+click in a graph view is used to alter the selected time range).
- Hold Ctrl+Shift to extend the existing selection.
- Added View\Find – Ctrl+F now works to bring up Search (shows, raises and sets focus to the input box).
- Graph Views:
- Now display the highlighted time range.
- Ensure selection/highlight range draws are always at least 1 pixel wide.
- If there is a task under the mouse, highlight the entire time range.
- Ctrl must be held to modify the selection – don’t suddenly allow Shift by itself to extend the selection.
- Ctrl+clicking on a task now sets the selection to be the entire task time-range – giving ‘snap’ behaviour. Additionally, hold Shift to instead extend the existing selection.
- Counter Table;
- Added a new counter table column: Highlight.
- Counter Table default columns are now: 1s, Selected, View.
- Counters:
- Enable SPM counter in Developer build.
- Renamed some US counters to USC.
- Increase the maximum graph y-axis value that may be entered.
PVRShaderEditor v2.3
- Performing a search when the ASM Output widget has focus now searches the ASM widget instead of the main editor.
- Deleting or moving a file which is currently open in PVRShaderEditor will now correctly prompt whether to discard the file or keep the file in the editor.
- Fixed bug in which re-opening the editor when closed with a blank file and the option ‘Save Session’ selected would display an IOError.
- Fixed bug which meant that PFX line cycle counts and errors were only being displayed for the entire GLSL block, rather than per-line, if the GLSL code is embedded.
PVRGeoPOD v2.16
- Fixed the exporting of .h/.cpp files from Maya and Max.
PVRTrace v3.3
PVRTraceGUI
- Fixed the saving of the wireframe colour to the preferences.
- The call summary now allows the addition of highlights to the calls in the call viewer, as well as to find all occurrences of that call using the search feature.
- The call summary now supports multiple selection of calls using Ctrl+left mouse click and Shift+left mouse click.
- It is now possible to search calls within a specific frame range and by thread.
- Status bar messages no longer timeout.
- The minimum number of characters that can now be searched for is 1.
- Search results can now be selected with Enter when navigating with arrow keys.
- Tidied up/simplified the Remote Controller interface.
- The default for the number of search results has been raised from 100 to 500
- Added the EGL_CONTEXT_PRIORITY enums as recognised values.
- Tweaked the Find functionality.
- Render targets are now listed in chronological order.
- The Android version of the PVRTrace libraries now export a subset of the extensions that the NDK’s version of libGLESv1_CM and libGLESv2 export.
- Added an extra counter to the profiling that shows the total number of API calls in a frame.
- Modified the call summary export so the rows and columns are switched.
PVRTrace Recorder
- Added support for recording on Android 4.4, KitKat.
- Added support for recording eglImages created from EGL_NATIVE_BUFFER_ANDROID client buffers.
- Supports JSON-formatted configuration files.
- It is no longer needed to specify the Android drivers to use when recording in the config file as the recording libraries will locate them as long as they are located in /system/lib/egl or /vendior/lib/egl.
- Fixed a failure to open the recording file on Android if %pname is used and the process name has slashes in.
- Renamed some command-line options: –windowsToUse becomes –window, –delayRenderFrame becomes –delay and –iterations becomes –repeat.
- Fixed multidraw support.
- Added missing ES3.0 functionality.
Documentation
- Extensions: Added GL_EXT_shader_framebuffer_fetch and added EXT_separate_shader_objects.
- Fixed an error in the User Guide where it incorrectly stated the FSAA command for the PVRShell as “-FSAAMode=N” instead of the new “-aasamples=N”.
- Fixed an error in the network recording instructions that specified to use ‘Network Panel’ to now correctly reference the ‘Remote Controller’.
- Fixed an error in the instructions for Installation on Linux where the Scripts folder was not correctly capitalised.
- Fixed an error in the instructions for Installation on Linux where a space was missing before a closing square bracket in the .bashrc entry.
- Updated PVRTexTool User Manual.
- Enhanced PVRScope User Manual.
- Enhanced PVRTrace User Manual and Quick Start Guide.
- Enhanced PVRTune User Manual and Quick Start Guide.
- Enhanced PVRHub User Manual.