PowerVR Tools and SDK 2022 Release 1
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 instrument
support 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 ofam 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
glDrawElementsBaseVertexOES
support 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
debug.print_frames
option 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
errors.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
whenpInitialData
is not null.
Player:
- Improve XCB and X11 window system support.
- On Windows, we now ignore dpi scaling.
- Remove command-line option
--skip-failed-calls
and make the skipping of failed api calls during playback the default behaviour. - Add command-line option
--do-failed-calls
for 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
andvkDebugMarkerSetObjectTagEXT
. This should fix any incorrectly reported playback warnings about failing to find the object. - Added checks to
vkCreateComputePipelines
andvkCreateGraphicsPipelines
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-frames
png 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-calls
option 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-format
command-line option to specify the format used for captured frames. Current supported formats are png (default) or tga. - The command-line option
--log-level
now 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_structure
andVK_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
-diff
option 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,
andPVRTexLib_PeakSignalToNoiseRatio
.- These APIs are also available via the Python wrapper (PVRTexLibPy) as
MaxDifference, MeanError, MeanSquaredError, RootMeanSquaredError, StandardDeviation,
andPeakSignalToNoiseRatio.
- These APIs are also available via the Python wrapper (PVRTexLibPy) as
- Added a overloaded constructor to the PVRTexLib API C++ wrapper that accepts a file path as a
const char*
. PVRTexLib_GetTextureDataSize
now 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 (andPVRTexture::SaveTextureToMemory
to 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 (fromeRGX_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 (fromePVRSSTiming4PowerPHRPartial
) to match DDK.
PVRTuneComplete 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.
- Add Time/Cycles/Ordinal abscissa modes. Abscissa choice is a per-graph setting.
- 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.
- The properties widget now shows the shared EGL graphics context ID (if applicable) and context type (OpenGL, OpenGLES 1, or OpenGLES 3) when a
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
API. - PVRScope now sends CPU time stamps with nanosecond precision (was microseconds).