UM2547

User manual

STM32MP157 GPU tool kit

Introduction The STMicroelectronics STM32MP157 line microprocessors embed a Vivante GPU (graphics processor unit) that uses the Khronos® Group OpenGL® ES () and OpenVG™ standards. This document describes the STM32MP157 GPU tool kit (STM32MP157GPUTK), a set of applications allowing developers to rapidly develop and port graphic applications. Thanks to STM32MP157GPUTK, any graphics-based application can be accelerated, improving the eye-catching visuals and minimizing the system resources loading (CPU, memory, bandwidth, power). Good understanding of OpenGL®/OpenGL® ES programming fundamentals, is recommended before reading this user manual. See the related STM32MP157 documentation [1], [2] for more technical details. This document contains proprietary copyright material disclosed with permission of Vivante Corporation. Reference documents

[1] STM32MP157 advanced Arm®-based 32-bit MPUs reference manual (RM0436) [2] STM32MP157 GPU application programming manual (PM0263)

UM2547 - Rev 1 - March 2019 www.st.com For further information contact your local STMicroelectronics sales office. UM2547 STM32MP157GPUTK overview

1 STM32MP157GPUTK overview

This tool kit applies to the STM32MP157 Arm®-based microprocessors (MPUs). Note: Arm is a registered trademark of Arm Limited (or its subsidiaries) in the US and/or elsewhere.

1.1 STM32MP157GPUTK components overview STM32MP157GPUTK includes the following components (also named vTools): • vProfiler: driver and hardware performance profiling utility • vAnalyzer: visual analyzer for graphing the performance metrics The following pre-processing utilities are also provided: • vShader for standalone development of optimized programs • vCompiler for compiling shader code into binary executables • vTexture for image transfer providing compression and decompression options

Figure 1. STM32MP157GPUTK vTools components

STM32MP157 MPU

STM32MP157GPUTK STM32MP157GPUTK Graphics on-target utility Windows or Linux on-host utilities applications vShader vTexture Prototype and Compress and Application optimize shader decompress images framework programs

OpenGL ES vProfiler vAnalyzer vCompiler Collect real-time Visual analysis of Shader programs OpenVG performance metrics performance metrics compile and link

1.2 STM32MP157GPUTK operating system requirements Most vTools applications are designed to run on Windows® 32- and 64-bit operating systems (OS). Some components, such as vProfiler and vCompiler, are run on other platforms. Refer to the individual vTools detailed description in the next sections.

UM2547 - Rev 1 page 2/39 UM2547 STM32MP157GPUTK installation

1.3 STM32MP157GPUTK installation STM32MP157GPUTK contains a vtools folder, including four .zip packages that can be individually extracted. As an example, if the system has 7-Zip installed, right click and select Extract Here. A folder is then created with the same name as the .zip file, as listed below: • vAnalyzer.zip • vCompiler.zip • vShader.zip • vTexture.zip Note: vProfiler is not included in the .zip package because it is integrated in the GPU graphics drivers build process and runs on the hardware target. Each vTools extracted folder contains a setup.exe and a vToolName.msi files. The tool can be installed independently by running the setup.exe located in that folder. Typical licensing and folder placement options may appear as part of the installation prompts. vAnalyzer and vShader have a Windows GUI (graphical user interface). vCompiler and vTexture are utilities run from the command line. The STM32MP157GPUTK default installation location is usually a folder named for example C:\Program Files\Vivante\vToolName, where vToolName is the name of the tool being installed. Some systems may install to a Program Files (x86) folder. Note: Windows navigation instructions such as Control Panel navigation vary with the different Windows OS. Administrator rights may be required to install the tool. To install an updated version, use Windows Add/Remove programs to remove the installed version of the tool before installing the new one.

UM2547 - Rev 1 page 3/39 UM2547 vShader

2 vShader

vShader is a complete off‐line environment for editing, previewing, analyzing, and optimizing shader programs. Thanks to vShader, users can perform all the following tasks: • Map any texture onto • Import user‐defined meshes • Bind mesh attributes to shaders • Set uniforms in shaders • View shader compiler output for optimization hints • Predict hardware performance

2.1 vShader components By default, the vShader executable installs in the following location within STM32MP157GPUTK directories: C:\Program Files\Vivante\vShader vShader includes samples of shader programs, a number of standard meshes (such as sphere, cube, tea pot and pyramid) and a text editor. By combining vertex shaders and fragment shaders into a single shader program, an application can produce a shader effect. A project can use many shader effects, that can share vertex and fragment shaders, mixing and matching to achieve the desired results. Next sections cover the vShader user interface. Tutorials provided with the vShader package are there to help the reader learn about shaders. 2.2 Getting started with vShader Once vShader is launched (clicking on a shortcut or directly on the vShader.exe executable), projects can be created, developed and saved. Project files have a .vsp extension.

2.2.1 Creating a new project To create a new project, locate the main menu bar Select File then New Project… Depending on the current project status, one of three things happens: • If vShader is launched for the first time, there is no project already open and selecting File > New Project… has no effect. • If there have been no changes to the current project since the last save, the current project closes and a new empty project is opened. • If the current project has been modified, a dialog box pops up to ask if changes must be saved. Choosing Yes commits the changes to the current project and close it. A new empty project is opened. 2.2.2 Opening an existing project The following steps are needed to open an existing project: 1. Locate the main menu bar. 2. Select File then Open Project… 3. Double-click on the desired project from the list that pops up or single-click on the project name and click OK. The project is loaded into vShader and appears in the last saved state.

UM2547 - Rev 1 page 4/39 UM2547 vShader navigation

2.2.3 Saving a project The following steps are needed to save a project: 1. Locate the main menu bar. 2. Select File then Save Project… 3. Indicate where to save the project in the resulting dialog box, then click OK. 2.3 vShader navigation vShader runs on Windows platforms and is driven from a GUI shown in the figure below.

Figure 2. vShader GUI main window

The main GUI components are listed below: • menu bar and icons (on the upper part of the window) • Preview and Project Explorer panes (on the left) • Shader Editor pane (on the right) • InfoLog pane (on the lower part)

UM2547 - Rev 1 page 5/39 UM2547 vShader navigation

2.3.1 vShader menu bar The main window opens when a user launches vShader. The main menu bar contains drop‐down menus for File, Edit, View, Mesh, Build, and Help, detailed in the table below.

Table 1. vShader menu commands

Menu Command Description

Creates a new project file. If a project is currently open, the user is New Project… prompted to choose whether to save it first. Open Project… Browses for and loads a .vsp vShader project. Saves the current project. If this is the first time saving this project, the Save Project… user is prompted to choose where to save it. File Load Vertex… Browses for and loads a vertex shader fromanexisting text file. Load Fragment… Browse for and load a fragment shader fromanexisting text file. Save VertexShader As… Prompts for filename and location to save the active vertex shader Save FragmentShader As… Prompts for filename and location to save the active fragment shader Exit Closes all open files and exit vShader. Undo [Ctrl-z] Reverts to a previous edit state (only 1-level deep). Redo [Ctrl-z] Re-applies the last “undone” edit command (only 1-level deep). Cut [Ctrl-x] Deletes the selected items and saves a copy in the paste buffer. Edit Copy [Ctrl-c] Saves a copy of the selected items in the paste buffer. Paste [Ctrl-v] Inserts the contents of the paste buffer. Delete [Del or Bkspc] Removes the selected items. Select All [Ctrl-a] Highlights all items in the current view. Reset Preview Resets Preview window. Saves current preview image to a bitmap bmp file. A dialog is displayed Snapshot to let the user choose where to save the bmp. Perspective Uses perspective projection in the Shader Preview pane. Ortho Uses orthographic projection in the Shader Preview pane. View Tool Bar Shows or hides toolbar icons. Preview Window Shows or hides Preview window. Project Explorer Shows or hides Project Explorer window. Shader Editor Shows or hides Shader Editor window. InfoLog Shows or hides InfoLog window.

UM2547 - Rev 1 page 6/39 UM2547 vShader navigation

Menu Command Description

Conic Spiral horn

Cube 3D cube

Klein Klein bottle

Plane 2D square

Mesh

Sphere Ball

Teapot Utah teapot

Torus Donut

Trefoil Trefoil knot

Custom Mesh… Browses for and opens a 3DS mesh file. Compiles the active shader. This command is also available via the Compile Compile button in the Shader Editor window pane. Build Links the vertex and fragment shaders into a shader program and Link applies it to the mesh showed in the Shader Preview window pane. Clear InfoLog Removes all text currently showed in the InfoLog window pane. Help About Information about the used vShader version

UM2547 - Rev 1 page 7/39 UM2547 vShader navigation

2.3.2 vShader window panes There are four window panes in the vShader GUI: Preview, Project Explorer, Shader Editor and InfoLog. Each pane can be resized by left‐mouse‐dragging the pane edge. A pane can be hidden by clicking the X in the upper‐right corner of the pane, or by un‐checking the box next to its name in the View pull‐down of the main menu. Restoring a hidden window pane is done by checking the appropriate box in the View pull‐down menu. Individual vShader panes can be resized, relocated or converted to detached windows, as in the figure below.

Figure 3. vShader moveable panes example

Note: Changes made to pane arrangement are not restored on application or project relaunch.

2.3.2.1 Preview pane The vShader Preview pane shows the current effect of the shaders on the chosen mesh geometry. A different mesh may be chosen either via the Mesh pull-down menu in the menu bar near the top of the vShader main window, or by right-mouse clicking in the Preview pane. When using the right-click method, the user can also choose between perspective and orthographic views of the mesh, can reset the view orientation to the default, or can save the current view in the Preview window as a bitmap file by selecting Snapshot. The object in the Preview window can be rotated, translated and scaled. Rotation is controlled by left-mouse-drag. The translation is done by holding the Ctrl key plus left-mouse-drag. The image scaling is seen by holding the Alt key while applying left-mouse-drag. When shader variables are changed, the Preview pane is automatically updated . When shader programs are changed, they must be recompiled and relinked by the user through the Build menu. The Preview pane is automatically updated to reflect the new Build.

2.3.2.2 Project Explorer pane The vShader Project Explorer pane displays all the project resources in a familiar tree structure. The root of the tree is the project name and the branches and leaves classify the resources. Folders can be expanded by clicking on the plus sign next to them. They can be collapsed by choosing the minus sign. By right-mouse clicking on any resource name, the user can view and usually edit that resource.

2.3.2.3 Shader Editor pane The Shader Editor pane is a work area for entering and modifying shader programs, including two tabs: one for vertex shader and one for fragment shader. Changes made to a shader must be compiled and linked in order for their effect to appear in the Shader Preview pane. Compiling can be done by selecting Build then Compile from the main menu bar. Likewise, linking and applying the shaders is performed by choosing Build then Link.

2.3.2.4 InfoLog pane The vShader InfoLog pane receives diagnostic messages from the compiler and linker, so that the user can see if the current shaders have built without errors. This pane can be cleared by selecting the Build then Clear InfoLog entry in the main menu.

UM2547 - Rev 1 page 8/39 UM2547 vShader project resources

2.4 vShader project resources The following project resources are accessible from the Project Explorer pane: header, fixed states, mesh, shaders, attributes, uniforms, and textures Click on the item and an Editor pop‐up dialog appears where the user can enter alternate values.

2.4.1 Header Editor pane The Header Editor pane groups project version, author and company. Expand the folder to see the settings, or right‐click (or double‐click) the folder to edit them.

Figure 4. Header Editor pane

2.4.2 Fixed State Editor pane The Fixed State Editor pane is a list of OpenGL ES 2.0 fixed states settings (such as depth test enable/disable). It allows the user to set all fixed states manually. Right‐click or double click to display an edit dialog.

Figure 5. Fixed State Editor pane

UM2547 - Rev 1 page 9/39 UM2547 vShader project resources

2.4.3 Mesh This resource shows the name of the mesh that is currently being displayed in the Preview pane. It does not have a pop‐up window. Right‐click on the mesh name to select it. A different mesh can be selected from the resulting pull‐down menu. 2.4.4 Shaders Left‐click on the plus sign next to the shaders folder to reveal the two sub nodes in this section, vertex and fragment. Double‐click (or right‐click and then choose Active) on either shader to bring it forward in the Shader Editor for editing. 2.4.5 Attribute Editor dialog The Attribute Editor dialog displays all attributes bound to the current project. It allows the user to add new attributes, and to edit or remove existing attributes. Right click on Attributes to add a new one. Click on the plus sign to expand the attributes list, and then double‐click to edit a particular attribute. An attribute can also be edited or removed by right‐clicking on it. A new one can be added. Up to 12 attributes are allowed.

Figure 6. Attributes Editor dialog

2.4.6 Uniform Editor dialog Uniform Editor displays all uniforms bound to the current project. Right click on Uniforms to add a new one or to expand the list and double‐click on a given uniform to bring up the Uniform Editor dialog. When a uniform is right‐ clicked, the user can add new uniforms or edit/remove existing uniforms. Up to 160 uniforms are allowed.

Figure 7. Uniform Editor dialog

UM2547 - Rev 1 page 10/39 UM2547 vShader project resources

2.4.7 Texture Editor dialog Texture Editor allows the user to select a texture for each of up to 8 texture units. The effect of applying each texture is seen immediately in the vShader Preview pane.

Figure 8. Texture Editor dialog

The texture selection option list is created from the texture files located in the textures sub-folder of the project. The list can be expanded by adding textures to the textures folder, formatted as bitmap files.

UM2547 - Rev 1 page 11/39 UM2547 vCompiler

3 vCompiler

vCompiler is an off‐line compiler and linker for translating vertex and fragment shaders written in OpenGL ESSL (ES language) into binary executables. vCompiler is driven by a simple command‐line interface.

3.1 vCompiler command line syntax

Windows® and Linux® command line syntax are the same.

3.1.1 Syntax Optional inputs are indicated by brackets. A fixed order for options in the command is not required.

vCompiler [–f ] [shaderInputFileName_2] [ –c ] [–h] [ –l ] [–o ] [–On ] [ –v ] [–x ]

3.1.2 Required input parameter The table below details the required input parameter.

Table 2. vCompiler required input parameter

Parameter Description

Shader input file name that must contain one of the following file extensions: • vert: vertex shader source file shaderInputFileName • frag: fragment shader source file • vgcSL: previously compiled vertex shader input/output file • pgcSL: previously compiled shader input/output file

UM2547 - Rev 1 page 12/39 UM2547 vCompiler command line syntax

3.1.3 Optional input parameters The table below details the optional input parameters.

Table 3. vCompiler optional input parameters

Parameter Description

Up to two shader files can be specified. The second shader file is optional but must have one of the file extensions listed in Table 2. If the first shader is a vertex shader, this second shader must be a fragment shader. shaderInputFileName_2 If the first shader is a fragment shader, the second must be a pixel shader. Note: Pre-compiled and compiled shaders may be mixed, as long as one is a vertex shader and the other a fragment shader. Compile each vertex .vert file into a vgcSL file, and/or each fragment shader .frag file into a pgcSL only (no merged result .gcPGM file) . If this option is not specified, the following occurs: -c • When only one shader is specified, it is compiled into a .[v/p]gcSL file. • When two shaders are specified, one is assumed to be a vertex shader and the other a fragment shader. Each shader can be either a previously compiled .vgcSL or .pgcSL file, or a .vert or .frag file still to be compiled. The two are merged into a .gcPGM file after successful compilation. Specifies a configuration file. If this option is not specified, the viv_gpu.config file in the vCompiler working directory is used as default configuration file. -f Syntax example: vCompiler –f viv_gpu_880.config foo.vert bar.frag Note: vCompiler does not work correctly if the GPU configuration file cannot be found or contains incorrect content (see Section 3.2 ). -h Shows a help message on all the command options. Creates a log file. The log file name is created by taking the first input file name, then replacing its file extension -l with .log. If the input file name does not have a file extension, .log is appended. Examples: myvert.vert becomes myvert.log or inputfrag becomes inputfrag.log. Specifies the output file name. If the path is other than the current directory, it must also be specified. Any extension can be specified. If the extension is not specified, the following default types are supported : -o • vgcSL: compiled vertex shader output file, usually compiled from a .vert input source file (default result for a single-file compile) • pgcSL: compiled pixel shader output file, usually compiled from a .frag source input file • gcPGM: compiled file merging vertex shader and fragment/pixel shader into a single output file Optimization level -On • O0: all optimizations disabled • O1: all optimization levels enabled (default) Verbose -v Prints compiler version and diagnostic messages to stdout. Explicitly specifies the type of shader instead of relying on the file extension. This option applies to all the following shaderType input files until the next -x option: • vert: vertex shader source file -x • frag: fragment shader source file • vgcSL: compiled vertex shader input/output file • pgcSL: compiled pixel shader input/output file -x none Reverts back to recognizing shader type according to the file name extension.

UM2547 - Rev 1 page 13/39 UM2547 Core-specific configuration

3.1.4 vCompiler output files Output files are placed in the current directory unless another directory is specified with the –o option. 3.1.5 vCompiler syntax examples Some vCompiler commands examples are listed below: • vCompiler foo.vert produces foo.gcSH. • vCompiler bar.frag produces bar.gcSH. • vCompiler foo.vertbar.frag produces foo.gcPGM. • vCompiler -v -l -O1 foo.vertbar.frag produces foo.gcPGM and foo.log. • vCompiler -v -l -O1 -o foo_barfoo.vertbar.frag produces foo_bar.gcPGM and foo_bar.log. 3.2 Core-specific configuration To ensure the shader binaries generated by vCompiler work correctly and optimally, the GPU must be specified before starting to run vCompiler. There are two or more configuration files in the installation directory. For example: • viv_gpu.config configuration file for GC7000XS-6008 (default) • viv_gpu_400t.config configuration file for GC400 To change the GPU configuration, rename the GPU file to viv_gpu.config. For example, on a Linux platform, the following commands can be used:

mv viv_gpu.config viv_gpu_7000xs.config mv viv_gpu_400t.config viv_gpu.config

The content of these files must not be modified, and the viv_gpu.config file must be in the vCompiler work directory. If customization is required, the format for the file contents is fixed and only the value for each parameter may be changed. The gpu config file needs five IDs to identify the target GPU for the offline compiler since the driver has a complete feature table to set up GPU configurations correctly based on these IDs. Here is the default viv_gpu.config file :

chipModel = 0x7000; chipRevision = 0x6008; productID = 0x70004; ecoID = 0x0; customerID = 0x0

UM2547 - Rev 1 page 14/39 UM2547 vTexture

4 vTexture

vTexture is a command line tool that provides compression and decompression functions to transfer image formats.

4.1 Formats

4.1.1 Supported file formats vTexture supports the following: • compression of uncompressed tga, bmp and png files to any of the following formats: – dxt1 – dxt3 – dxt5 – etc1 – etc2 • decompression to uncompressed tga files of the following compressed format file types: – dxt1 – dxt3 – dxt5 – etc1 – etc2 The compressed dxtn format image file is stored as a dds file, and the etcn format image is stored as a pkm or ktx file. The tga format follows the RGBA or RGB color model and etcn format provides an image following the RGB888 color model. Note: Compressing a tga image of RGBA format to an etcn format results in a loss of alpha values. 4.1.2 Supported formats for tile and de-tile conversions vTexture supports conversions between linear textures and the following tile configurations: • Linear: no tiling • Tile: 4x4 tile • Supertile: 64x64 tile Formats supported for tile format conversions are the following: • source data – bmp – png – tga • output data – bmp – raw data of a specified type (such as RGBA8888, BGRA8888, RGB888, BGR888, RGB565, BGR565 or ARGB1555)

UM2547 - Rev 1 page 15/39 UM2547 Formats

4.1.3 Output formats Output from the compress option: • dxtn format image file, stored as a dds file • etc1 and etc2 format images, stored as a pkm or ktm file Output from the decompress option: all supported formats are decompressed to an uncompressed tga file. Output from tile and de-tile options: • bmp if –r not specified • raw if –r specified 4.1.4 vTexture raw output file format definition The vTexture raw file is a Vivante-defined file, with .raw extension (see details in the table below).

Table 4. vTexture raw file details

Size Characteristic Data type Description (bytes)

Width in 4 INT Number of width pixels Height in pixels 4 INT Number of height pixels Integer value of numeric for a supported format, as defined in Pixel format 4 INT gceSURF_FORMAT enumeration (see Table 5).These value can also be found in samples (named TiledTexture). bit 0: tile bit 1 supertile Tile format 1 BOOL bit 5: flag for multi-tile other bits reserved Integer value: • 0: supertile layout mode 0 Supertile format 1 INT • 1: supertile layout mode 1 • 2: supertile layout mode 2 Reserved 2 - Not used

Table 5. gceSURF_FORMAT enumeration

Supported format Numeric

ARGB_1555 208 RGB_565 209 BGR_888 210 BGRX_8888 211 BGRA_8888 212 BGR_565 302 RGB_888 303 RGBX_8888 305 RGBA_8888 306

UM2547 - Rev 1 page 16/39 UM2547 Environment variable

4.2 Environment variable The only environment variable that vTexture currently expects is PATH to be set as follows:

PATH=%PATH%;"C:\Program Files\Vivante\vTexture\”

4.3 Command line syntax Open a Command prompt. Navigate to the folder that contains the vTexture files (for example, C:/Program Files (x86)/Vivante/vTexture). Launch the vTexture or vTextureTools application using the command line syntax described in the next sections.

4.3.1 Syntax The usage of the command line tool is as follows: • For compression/decompression:

vTextureTools –c TYPE [–s SPEED] –src FILE [–dest FILE]

or

vTextureTools –d TYPE –src FILE [–dest FILE]

• For tiling and de-tiling:

vTextureTools –t|–st [–2 [–r|––raw=FORMAT] –m LAYOUT] –src FILE [–dest FILE]

or

vTextureTools –t|–st [–2 [–r|––raw=FORMAT] –m LAYOUT] –src FILE [–dest FILE]

4.3.2 General parameters vTexture general parameters are detailed in the table below.

Table 6. vTexture general parameters

Parameter Description

-h Shows help. Source file - input image path and filename vTexture uses the file extension type as image type. -src [FILE] • For –c compress, the application expects an input filename with a tga extension. • For –d decompression, the application expects a dds, ktx or pkm extension. • For –t tile and –dt de-tile, the application expects a bmp or tga extension. Destination file - image path and filename The application expects a filename with a tga, dds, ktx or pkm extension for compress/uncompress or -dest [FILE] bmp or raw for tile/de-tile. If the -dest parameter is not set, vTexture automatically generates a name for the newly generated file, using the source file name as the prefix appending critical parameters and file type information.

UM2547 - Rev 1 page 17/39 UM2547 Command line syntax

4.3.3 Compression/decompression parameters Parameters listed in the table below are used for compression and decompression.

Table 7. vTexture compression/decompression parameters

Parameter Description

Compress a source image of uncompressed tga format. [TYPE] specifies the target output compress image format: • dxt1 (default) -c • dxt3 • dxt5 • etc1 • etc2 Decompress a source image of format specified by the value [TYPE]. -d The resulting file type is uncompressed tga. This option decompresses dxt1, dxt3, dxt5, etc1 or etc2 format image to tga format. Compression [SPEED] mode for etcn images: • fast (default) -s • slow • medium

4.3.4 Tile/de-tile parameters Parameters listed in the table below are used for tiling and de-tiling between linear and tiled formats.

Table 8. vTexture tile/de-tile parameters

Parameter Description

-t Converts linear data to tiled texture output. Enables supertile format -st This option is an alternate to –t. If –st and –t are used together, -st is set. -dt De-tile: converts tiled texture to linear texture output. -2 Tile/de-tile in multi- format. [LAYOUT] defines the layout mode for supertiled textures: • 0: Legacy supertile mode (default) -m • 1: Supertile mode when hardware has HZ • 2: Supertile mode when hardware has NEW_HZ or FAST_MSAA Specifies output data as raw pixel output instead of bmp. Use --raw=rgb565 to specify raw pixel [FORMAT]. -r Supported raw formats are RGBA8888, BGRA8888, RGB888, BGR888, RGB565, BGR565 and ARGB1555.

UM2547 - Rev 1 page 18/39 UM2547 Command line syntax

4.3.5 vTexture syntax examples Some examples for compress are listed below.

vTextureTools -c dxt1 -src d:\myfile.png -dest c:\compress.dds vTextureTools -c dxt1 -src d:\myfile.tga -dest c:\compress.dds vTextureTools -c etc1 -s slow –src d:\myfile.png –dest c:\compress.pkm vTextureTools -c etc1 -s slow src d:\myfile.tga -dest c:\compress.pkm vTextureTools -c etc2 -s slow –src d:\myfile.bmp -dest c:\compress.ktx vTextureTools -c etc2 -s slow –src d:\myfile.tga -dest c:\compress.ktx vTextureTools -c etc2 -src d:\myfile.bmp -dest c:\compress.ktx vTextureTools -c etc2 -src d:\myfile.tga -dest c:\compress.ktx vTextureTools -c etc2 -src d:\myfile.tga -dest c:\compress.pkm

Some examples for decompress are listed below:

vTextureTools –d etc1 –src c:/vtexin/myfile2.pkm –dest c:/vtextout/myfile2.tga vTextureTools -d -src c:/vtexin/myfile3.dds -dest c:/vtextout/myfile3.tga (assumes DXT1) vTextureTools -d tga -src d:\myfile.dds -dest c:\decompress.tga vTextureTools -d tga -src d:\myfile.ktx -dest c:\decompress.tga

Some examples for tile (linear to tiled) conversion are listed below: • Tile linear texture to standard tile texture

vTextureTools.exe –t –src 123.bmp • Tile linear texture to supertiled texture

vTextureTools.exe –st –src 123.bmp

Some examples for de-tile (tiled to linear) conversion are listed below: • De-tile tiled texture to linear texture

vTextureTools.exe –dt –t –src 123-tiled.bmp • De-tile supertiled texture to linear texture

vTextureTools.exe –dt –st –src 123-supertiled.bmp

UM2547 - Rev 1 page 19/39 UM2547 vProfiler and vAnalyzer

5 vProfiler and vAnalyzer

vProfiler is a run-time environment for collecting performance statistics of an application and the . vAnalyzer is an utility for graphically displaying the data gathered by vProfiler and aiding in visual analysis of graphics, compute and vision performance. Used together, these tools assist software developers in optimizing application performance. The GPU includes performance counters that track a variety of GPU functions. vProfiler gathers data from these counters during runtime and tracks data for a range of frames or a single frame from any application. Additional counters are present in the software drivers and hardware access layer.

5.1 Fundamentals of performance optimization Whenever an application runs on a computer, it uses one or more of the available resources. These compute resources include the CPU, the graphics processor, caches and memory, hard disks, and possibly even the network. Viewed simplistically, it is always the case that one of these resources is the limiting factor in how quickly the application can finish its tasks. This limiting resource is the performance bottleneck. Remove this bottleneck and application performance is improved. The goal of optimizing or tuning application performance is to balance the use of resources so that none of them holds back the application more than any of the others. In practice there is no single or simple way to tune an application. The whole system needs to be considered, including the size and speed of individual components as well as interactions and dependencies among components. vProfiler collects information on GPU usage and on calls to functions within the graphics pipeline. As such it provides an excellent view into what happens on the GCCORE graphics processor at any point in time, down to the individual frame. When the application performance is GPU-bound, vProfiler and vAnalyzer are the right tools to help determine why. Note: The initial determination of the component that is the performance bottleneck is the domain of system performance analyzers and is outside the scope of the GPU tools. 5.2 Setup for Linux The STM32MP157GPUTK Windows package includes vAnalyzer for the Windows environment. vProfiler can be compiled for Linux, as per the instructions below. vProfiler stores software and hardware counters captured per frame in the vprofiler.vpd file. vAnalyzer reads the .vpd file and allows the user to browse counters, to visualize application performance bottlenecks and to measure system utilization of that application run. Note: vProfiler does not store frame buffer images due to excessive overhead that changes the behavior of applications.

5.2.1 Enable vProfiler option in kernel The Vivante GPU driver is built with the vProfiler capability. Add gpuProfiler=1 in the insmod command line to activate the vProfiler functionality, as shown in the code below.

insmod /system/lib/modules/galcore.ko gpuProfiler=1 [OPTIONS]

UM2547 - Rev 1 page 20/39 UM2547 Setup for Linux

5.2.2 Set environment variables for Linux The following table summarizes the environment variables supported by vProfiler.

Table 9. vProfiler environment variables for Linux

Environment variable Description

• 0: vProfiler disabled(default) • 1: vProfiler enabled VIV_PROFILE • 2: control via application call • 3: control over which frames to profile with vProfiler VP_OUTPUT Specifies vProfiler output file name (default is vprofiler.vpd). VP_FRAME_NUM Specifies the number of frames dumped by vProfiler when VIV_PROFILE = 1 . VP_FRAME_START Specifies the frame to start profiling with vProfiler when VIV_PROFILE = 3. VP_FRAME_END Specifies the frame to end profiling with vProfiler when VIV_PROFILE = 3. Enables [1] or disables [0] (default) the use of glFinish()/glFlush() APIs as the frame VP_USE_GLFINISH delimiter in addition to eglSwapBuffers. This variable enables application thread that does not use eglSwapBuffers() to generate useful GPU profiling data for analysis. Enables [1] or disables [0] (default). When enabled, vProfiler collects a counter for each VP_PERDRAW_MODE draw call. VP_DISABLE_PROBE Disables PROBE mode and makes vProfiler to use AHB counters for profiling. VP_ENABLE_PRINT Enables vProfiler to print out the counter information to the console.

5.2.3 Environment variable detail

5.2.3.1 VIV_PROFILE The environment variable VIV_PROFILE can be used to control enable /disable and set profiling modes for vProfiler. • VIV_PROFILE = 0 By default, vProfiler is disabled in the driver. If vProfiler has been enabled, it can be disabled by setting VIV_PROFILE to 0 with the code below.

export VIV_PROFILE=0

• VIV_PROFILE = 1 To enable vProfiler, set VIV_PROFILE to 1 with the code below.

export VIV_PROFILE=1

To limit the number of frames to analyze, use the environment variable VP_FRAME_NUM (available only when VIV_PROFILE = 1). For example, the code below makes vProfiler dump performance data for the first 100 frames.

export VP_FRAME_NUM=100

• VIV_PROFILE = 2 Mode VIV_PROFILE = 2 provides support for glEnable(GL_PROFILE_VIV) and glDisable(GL_PROFILE_VIV), that are used to choose which frames must be profiled. In this mode, vProfiler is disabled by default. It begins to do profiling only after a glEnable(GL_PROFILE_VIV) call from the application. vProfiler stops profiling when glDisable(GL_PROFILE_VIV) is called. Note that the flag is only checked at every frame end, in eglSwapBuffers. To use this mode, set VIV_PROFILE to 2 with the code below.

export VIV_PROFILE=2

UM2547 - Rev 1 page 21/39 UM2547 vProfiler setup for Android™

• VIV_PROFILE = 3 Setting VIV_PROFILE to 3 provides support for two environment variables VP_FRAME_START and VP_FRAME_END, that are used to choose which frames must be profiled. In this mode, vProfiler is disabled by default. It begins to do profiling starting at the frame number specified by VP_FRAME_START and it ends the profiling after the frame number specified by VP_FRAME_END. To use this mode, set VIV_PROFILE to 3 with the code below.

export VIV_PROFILE=3 export VP_FRAME_START=10 export VP_FRAME_END=90

Note: The GPU profiling mode requires the GPU power management (PM) functions to be disabled to get the precise profiling data. When kernel module “galcore” is inserted with gpuProfiler=1, the PM functions in the driver are not disabled. The PM functions are disabled when VIV_PROFILE is set to 1, 2, or 3, and the application starts. The PM functions are enabled when VIV_PROFILE is set to 0 and the application starts again.

5.2.3.2 VP_OUTPUT The vProfiler output file is vprofiler.vpd by default. To specify an alternate filename, use the environment variable VP_OUTPUT (code example below).

Export VP_OUTPUT=sample.vpd

5.2.3.3 VP_USE_GLFINISH glFinish() and glFlush are treated as the frame delimiter as eglSwapBuffers(). By default, vProfiler only uses eglSwapBuffers() as delimiter to check hardware counters. The command below enables vProfiler to use glFinish/ glFlush as additional delimiter so application thread that does not use eglSwapBuffers(). It can generate useful GPU profiling data for analysis.

export VP_USE_GLFINISH=1

5.2.3.4 VP_DISABLE_PROBE This variable only applies to the GPU with the PROBE feature support. It disables PROBE mode and makes vProfiler use AHB counters for profiling. This variable does not affect the hardware only that supports the AHB counter. The default value is off.

5.2.3.5 VP_ENABLE_PRINT This variable provides a convenient way to check some critical profiling information without using the off-line vAnalyzer to open a VPD file. Once enabled, vProfiler prints out the counter information to the console. The default value is off. 5.3 vProfiler setup for Android™ Next sections describe how to setup vProfiler to use it with Android.

5.3.1 Enable vProfiler option in kernel The Vivante GPU driver is built with the vProfiler capability. Add gpuProfiler=1 in the insmod command line to activate the vProfiler functionality, as shown in the code below.

insmod /system/lib/modules/galcore.ko gpuProfiler=1 [OPTIONS]

UM2547 - Rev 1 page 22/39 UM2547 vProfiler setup for Android™

5.3.2 Set property options The following table summarizes the property options that vProfiler supports through running the command adb shell setprop [OPTIONS]. These options are similar to the environment variables available for Linux.

Table 10. vProfiler property options for Android

Option Description

setprop VIV_PROFILE 0 Disables vProfiler in the drivers. setprop VIV_PROFILE 1 Enables vProfiler in the drivers. vProfiler enable/disable controlled by glEnable(GL_PROFILE_VIV) and setprop VIV_PROFILE 2 glDisable(GL_PROFILE_VIV) calls setprop VIV_PROFILE 3 vProfiler start/stop at frames specified in VP_FRAME_START and setprop VP_FRAME_START VP_FRAME_END setprop VP_FRAME_END Specifies the application to profile. Change the app name as needed to profile another application. There may be different sub-case names used by an setprop VP_PROCESS_NAME application. Be sure to accurately specify a case name to match the name seen appname on the command line when using ps command. Note: This option is only available for Android, not available for Linux. Specifies a new location for vProfiler output. By default, the vpd file is created under /sdcard/. If an application has no access to the SD card, another path can be specified where the application does have write permission. setprop VP_OUTPUT newpath Note: For applications initializing during the Android system boot startup, such as launcher, the process must be killed after the change to a new path. When the application automatically restarts, the vpd file is accessible at the expected place. Limits the number of frames to analyze. For example, to make vProfiler dump performance data for the first 100 frames: setprop VP_FRAME_NUM 100. This option can only be used when VIV_PROFILER = 1. setprop VP_FRAME_NUM xxx Note: When this option is not used, the profile file generated when running an application for a long time can be very large. This takes a large amount of disk space and also makes it hard to view the data in vAnalyzer. Enables/disables the use of glFinish()/glFlush() as the frame delimiter in addition setprop VP_USE_GLFINISH 0 to eglSwapBuffers (default 0). By default eglSwapBuffers() is used as the frame setprop VP_USE_GLFINISH 1 delimiter. This command makes the application thread that does not use eglSwapBuffers() to generate useful GPU profiling data for analysis.

setprop VP_PERDRAW_MODE 0 Enables/disables the "per draw" mode. When enabled, vProfiler collects a counter setprop VP_PERDRAW_MODE 1 for each draw call. setprop VP_DISABLE_PROBE Disables Probe mode and make vProfiler use AHB counters for profiling. setprop VP_ENABLE_PRINT Enables vProfiler to print out the counter information to the console.

UM2547 - Rev 1 page 23/39 UM2547 vProfiler performance counters

5.4 vProfiler performance counters vProfiler is implemented by utilizing hardware counters and a group of instrumentations inserted into drivers that are controlled by compilation flags. These counters provide detailed per-frame runtime information about the application that can help the developer monitor and tune the application resource usage. The counters are divided into four sets detailed in the table below.

Table 11. Performance counters

Counter type Description

HALCounters Driver memory usage Program Statistics of the shaders loaded in the GPU (available only for OpenGL ES 2.0) OGLCounters Various OpenGL ES counters, such as API usage and primitives drawn OVGCounters Various OpenVG counters, such as API usage and primitives drawn

5.5 vAnalyzer - view and analyze a runtime profile vAnalyzer is a GUI-based tool to view and analyze GPU performance data collected using counters during an application run. The performance data from a binary file(*.vpd) written by vProfiler is displayed by vAnalyzer both in text lists and as line graphs. vAnalyzer features a multi-tab, multi-pane graphical user interface that gives the user several ways to inspect any frame in a captured animation sequence.

5.5.1 Load profile files vAnalyzer accepts a profile for input, that is a .vpd file of performance data created by vProfiler during a run. For example, the saved file may have a name such as sample.vpd. A .vpd file can be selected using the File/Load Profile Data menu option. When a performance profile is loaded, vAnalyzer populates the title bar with information about the GPU and the CPU.

UM2547 - Rev 1 page 24/39 UM2547 vAnalyzer - view and analyze a runtime profile

The vAnalyzer screen shot below shows the vAnalyzer GUI immediately after loading a .vpd performance file and moving the frame number slider to frame 700. By default, the vAnalyzer main pane displays the Charts tab that provides charts for frame time, driver time and GPU idle cycles. Additional charts, selected from the list of variables on the right, can be added in the graph window. Different combinations of counters can be displayed in graphical and list form to illustrate resource utilization for any portion of the profiled application. A second tab contains system information.

Figure 9. vAnalyzer GUI main window

5.5.2 vAnalyzer menu bar The vAnalyzer main menu bar contains the following drop-down menus: File • Load Profile Data: loads a .vpd profile file. • Export Current Frame Data: dumps all the counters for the frame being viewed to a .cvs file. • Exit: exits vAnalyzer. Chart • Create chart: creates a new chart. • Customize chart: adds or deletes counters in an existing chart. • Remove chart: deletes a chart. • Export data from chart: dumps the counters in a chart to a .csv file. • Save chart to png: dumps the chart to a .png file. • View: zooms in/out or fits the chart. Viewer • OpenGL function call viewer: displays the OpenGL function call statistics. • Program viewer: displays the shader program statistics. Help • About: gives version information for vAnalyzer.

UM2547 - Rev 1 page 25/39 UM2547 vAnalyzer charts

5.6 vAnalyzer charts

5.6.1 vAnalyzer Chart tab and menu options On the Chart tab in the vAnalyzer main window (upper-left pane), two default line graphs are displayed (see the figure below).

Figure 10. vAnalyzer performance counter charts

UM2547 - Rev 1 page 26/39 UM2547 vAnalyzer charts

5.6.2 Chart customization The Create New Chart dialog window shown in the figure below, can be invoked from the drop menu Chart/ Customize Chart, or by right-clicking in the Chart tab area.

Figure 11. vAnalyzer Create New Chart dialog

• Chart/Customize Chart: Additional performance counters can be added to an existing chart. • New Chart: A new chart can be added. A single chart can display up to four counters and the Chart pane can hold up to eight charts. Thus a maximum of 32 counters can be graphed at the same time. • Remove Chart: Any chart can be removed from the display using the drop menu Chart/Remove Chart.

5.6.2.1 Chart components and navigation On the plots displayed in Figure 10, there is a blue vertical frame marker, that marks the current frame position in the timeline. Zooming in on a set of frames can be achieved in one of the two following ways: • Hold down the left mouse button and then sweep a selection box across a range of frame numbers, either on a plot itself or in the common X-axis (frame numbers) in the Chart pane, before releasing the mouse button. All charts in the Chart pane zoom in to the same range of frames. • If the mouse has a scroll wheel, zoom can be reached by rolling the wheel forward--toward (zomm in) or backward (zoom out) the screen. To reset zoom to the default (show the entire timeline), press the escape key (ESC) on the keyboard. The chart view changes to include all frames, from start to end.

5.6.2.2 Data export The performance counters in a chart can be dumped to a .csv file by selecting from the dropdown menu Chart/ Export data from chart. The .csv file can be viewed using Excel or another text viewer. The chart can also be dumped to a .png file by selecting from the main menu Chart/Save chart to PNG.

UM2547 - Rev 1 page 27/39 UM2547 vAnalyzer charts

5.6.3 vAnalyzer Frame Number slider bar In the lower-left pane of the vAnalyzer window, there is a Frame Number gauge in the form of a slider bar. Numbers at each end of the bar indicate the initial frame (0) and the last frame available in the loaded sample. By left-clicking and holding the slider, the user can change the selected frame to analyze. When the frame number is changed, the blue vertical line that indicates the current frame moves and the reported Frame Number changes in the upper-right pane Frame Analysis Summary.

Figure 12. vAnalyzer Frame Number slider bar

5.6.4 vAnalyzer System Info tab When a .vpd profile is loaded, system information about the profiled machine populates the fields on the System Info tab (see the figure below). Some information is repeated in the title bar of the main GUI for quick reference.

Figure 13. vAnalyzer System Info tab

UM2547 - Rev 1 page 28/39 UM2547 vAnalyzer charts

5.6.5 vAnalyzer Frame Analysis A selection of performance counters for the frame being viewed are displayed on the right side of the vAnalyzer main GUI. The user can convert this pane to a pop-up window by dragging the pane outside the application window. Drag it back to the right pane area of the application window to reintegrate the pane.

Figure 14. vAnalyzer Frame Analysis Summary and Detail tabs

5.6.5.1 Summary tab The Summary tab displays summary information for the frame being viewed. The selected Frame Number can be changed by entering a new frame number in the text box at the top of the list. The user must press Enter after the input to activate the change. Then Summary values, sliders, and charts change to reflect the newly entered frame number. The Summary values below Frame Number are not directly changeable. They change only when the frame number is changed, either in the Summary tab, by moving the Frame Number slider, or by selecting a frame from the Frame Selection pane. Clicking the “…” button to the right of a Summary item brings up the corresponding counters in the Detail tab. For example: • Clicking the “…” button to the right of Primitive Rate switches the view to the Detail tab and expands the primitive processing category. • Clicking the “…” button for Driver Utilization brings up the pop-up window OpenGL function call viewer.

5.6.5.2 Detail tab The Detail tab reports values for overall performance evaluation, such as the , the driver utilization and the GPU cycles. Additionally counter detail is accessible on this tab. The categories of available counters in the Detail tab are the following: overall, OpenGL ES, vertex processing, primitive processing, pixel processing, shader processing and bandwidth. 5.6.6 vAnalyzer Frame Selection As with the Frame Analysis pane, the Frame Selection pane can be dragged to display as an independent pop-up window.

UM2547 - Rev 1 page 29/39 UM2547 vAnalyzer charts

5.6.6.1 Slow Frames tab The Slow Frames tab lists the 10 slowest frames in the animation sequence, by time in ascending order from slowest to tenth slowest (see the figure below).

Figure 15. vAnalyzer Frame Selection-Slow Frames tab

The user can left click on any entry or can use the arrow keys to move up and down the list, and the display in each of the other GUI panes changes to match that frame.

5.6.6.2 Critical Frames tab Select the Critical Frames tab to customize the criteria by which a frame is chosen for inspection. One or more of the performance counters can be specified in building the query, that also allows for AND and OR logic. Queries must follow a pattern such as: “counter name” condition(‘<’/’>’/’==’) values Users can identify counter names from those in the Frame Analysis Detail tab. An example is provided just below the Query input text box.

Figure 16. vAnalyzer Frame Selection-Critical Frames tab

UM2547 - Rev 1 page 30/39 UM2547 vAnalyzer Viewer

5.7 vAnalyzer Viewer The Viewer information pop-up windows can be launched by selecting Viewer/OpenGL function call viewer or Viewer/Program viewer from the main menu. The selected Viewer appears in a pop-up window.

Figure 17. Main menu Viewer selection

5.7.1 OpenGL Function Call Viewer The OpenGL Function Call Viewer includes the three following information areas: • The OGL Function Name area contains a table that lists the available OpenGL ES functions by function name and function type, the run time and the number of times each has been called for this frame. Functions can be sorted by clicking in the column heading area. For example, the functions can be sorted by call count or run time by clicking the title bar of “# of Call” or “Time (ms)”. • The Top 5 Functions area contains a histogram that shows the top five call count of the listed OpenGL functions. • The Property View area shows the summary when no function is selected. While it shows performance hints for the function when one is selected.

Figure 18. vAnalyzer OpenGL Function Call Viewer window

UM2547 - Rev 1 page 31/39 UM2547 vAnalyzer Viewer

5.7.2 Program Viewer For a given frame number, the Program Viewer gives the statistics for shader programs: uniforms, attributes and number of instructions in the shader (only for OpenGL ES 2 profile data). The item description is displayed in the lower text window when selecting the item. Expand by clicking on VS or PS sub-menu to expand the detail for that shader source code.

Figure 19. vAnalyzer Program Viewer

UM2547 - Rev 1 page 32/39 UM2547

Revision history

Table 12. Document revision history

Date Version Changes

26-Mar-2019 1 Initial release.

UM2547 - Rev 1 page 33/39 UM2547 Contents

Contents

1 STM32MP157GPUTK overview ...... 2 1.1 STM32MP157GPUTK components overview ...... 2 1.2 STM32MP157GPUTK operating system requirements ...... 2 1.3 STM32MP157GPUTK installation...... 3 2 vShader ...... 4 2.1 vShader components ...... 4 2.2 Getting started with vShader ...... 4

2.2.1 Creating a new project ...... 4

2.2.2 Opening an existing project...... 4

2.2.3 Saving a project ...... 5 2.3 vShader navigation ...... 5

2.3.1 vShader menu bar ...... 5

2.3.2 vShader window panes ...... 8 2.4 vShader project resources ...... 9

2.4.1 Header Editor pane...... 9

2.4.2 Fixed State Editor pane...... 9

2.4.3 Mesh...... 9

2.4.4 Shaders ...... 10

2.4.5 Attribute Editor dialog ...... 10

2.4.6 Uniform Editor dialog...... 10

2.4.7 Texture Editor dialog ...... 10 3 vCompiler ...... 12 3.1 vCompiler command line syntax ...... 12

3.1.1 Syntax...... 12

3.1.2 Required input parameter ...... 12

3.1.3 Optional input parameters...... 12

3.1.4 vCompiler output files ...... 14

3.1.5 vCompiler syntax examples ...... 14 3.2 Core-specific configuration...... 14 4 vTexture ...... 15

UM2547 - Rev 1 page 34/39 UM2547 Contents

4.1 Formats ...... 15

4.1.1 Supported file formats ...... 15

4.1.2 Supported formats for tile and de-tile conversions...... 15

4.1.3 Output formats ...... 16

4.1.4 vTexture raw output file format definition ...... 16 4.2 Environment variable ...... 17 4.3 Command line syntax ...... 17

4.3.1 Syntax...... 17

4.3.2 General parameters ...... 17

4.3.3 Compression/decompression parameters ...... 17

4.3.4 Tile/de-tile parameters...... 18

4.3.5 vTexture syntax examples...... 19 5 vProfiler and vAnalyzer ...... 20 5.1 Fundamentals of performance optimization...... 20 5.2 Setup for Linux ...... 20

5.2.1 Enable vProfiler option in kernel ...... 20

5.2.2 Set environment variables for Linux ...... 20

5.2.3 Environment variable detail...... 21

5.3 vProfiler setup for Android™...... 22

5.3.1 Enable vProfiler option in kernel ...... 22

5.3.2 Set property options ...... 22 5.4 vProfiler performance counters ...... 24 5.5 vAnalyzer - view and analyze a runtime profile ...... 24

5.5.1 Load profile files ...... 24

5.5.2 vAnalyzer menu bar ...... 25 5.6 vAnalyzer charts ...... 26

5.6.1 vAnalyzer Chart tab and menu options ...... 26

5.6.2 Chart customization ...... 26

5.6.3 vAnalyzer Frame Number slider bar ...... 27

5.6.4 vAnalyzer System Info tab...... 28

5.6.5 vAnalyzer Frame Analysis...... 28

5.6.6 vAnalyzer Frame Selection ...... 29

UM2547 - Rev 1 page 35/39 UM2547 Contents

5.7 vAnalyzer Viewer...... 30

5.7.1 OpenGL Function Call Viewer...... 31

5.7.2 Program Viewer ...... 31 Document revision history ...... 33

UM2547 - Rev 1 page 36/39 UM2547 List of tables

List of tables

Table 1. vShader menu commands ...... 6 Table 2. vCompiler required input parameter ...... 12 Table 3. vCompiler optional input parameters ...... 13 Table 4. vTexture raw file details...... 16 Table 5. gceSURF_FORMAT enumeration ...... 16 Table 6. vTexture general parameters ...... 17 Table 7. vTexture compression/decompression parameters ...... 18 Table 8. vTexture tile/de-tile parameters ...... 18 Table 9. vProfiler environment variables for Linux...... 21 Table 10. vProfiler property options for Android ...... 23 Table 11. Performance counters ...... 24 Table 12. Document revision history ...... 33

UM2547 - Rev 1 page 37/39 UM2547 List of figures

List of figures

Figure 1. STM32MP157GPUTK vTools components ...... 2 Figure 2. vShader GUI main window ...... 5 Figure 3. vShader moveable panes example ...... 8 Figure 4. Header Editor pane ...... 9 Figure 5. Fixed State Editor pane ...... 9 Figure 6. Attributes Editor dialog...... 10 Figure 7. Uniform Editor dialog...... 10 Figure 8. Texture Editor dialog ...... 11 Figure 9. vAnalyzer GUI main window...... 25 Figure 10. vAnalyzer performance counter charts...... 26 Figure 11. vAnalyzer Create New Chart dialog ...... 27 Figure 12. vAnalyzer Frame Number slider bar ...... 28 Figure 13. vAnalyzer System Info tab ...... 28 Figure 14. vAnalyzer Frame Analysis Summary and Detail tabs ...... 29 Figure 15. vAnalyzer Frame Selection-Slow Frames tab ...... 30 Figure 16. vAnalyzer Frame Selection-Critical Frames tab...... 30 Figure 17. Main menu Viewer selection...... 31 Figure 18. vAnalyzer OpenGL Function Call Viewer window ...... 31 Figure 19. vAnalyzer Program Viewer ...... 32

UM2547 - Rev 1 page 38/39 UM2547

IMPORTANT NOTICE – PLEASE READ CAREFULLY STMicroelectronics NV and its subsidiaries (“ST”) reserve the right to make changes, corrections, enhancements, modifications, and improvements to ST products and/or to this document at any time without notice. Purchasers should obtain the latest relevant information on ST products before placing orders. ST products are sold pursuant to ST’s terms and conditions of sale in place at the time of order acknowledgement. Purchasers are solely responsible for the choice, selection, and use of ST products and ST assumes no liability for application assistance or the design of Purchasers’ products. No license, express or implied, to any intellectual property right is granted by ST herein. Resale of ST products with provisions different from the information set forth herein shall void any warranty granted by ST for such product. ST and the ST logo are trademarks of ST. For additional information about ST trademarks, please refer to www.st.com/trademarks. All other product or service names are the property of their respective owners. Information in this document supersedes and replaces information previously supplied in any prior versions of this document. © 2019 STMicroelectronics – All rights reserved

UM2547 - Rev 1 page 39/39