3.8.1. Introduction¶
TI SOCs like AM335x, AM437x, AM57xx and AM65xx are enabled with 3D cores, capable of accelerating 3D operations with dedicated hardware. The dedicated hardware is based on SGX series of devices from Imagination Technologies. The graphics cores only accelerate graphics operations, and do not perform video decode operations. For video acceleration, refer to respective Technical Reference Manuals for the SOCs.
Below table lists the various TI families supported by this SDK, and the SGX core information
TI SOC Name |
SGX Core |
SGX Core Revision |
Max SGX Core Frequency (MHz) |
---|---|---|---|
AM335x |
SGX530 |
1.2.5 |
200 |
AM437x |
SGX530 |
1.2.5 |
200 |
AM57xx |
SGX544 |
1.1.6 |
532 |
AM65xx |
SGX544 |
1.1.7 |
450 |
The SGX cores in AM family support OpenGL® ES 1.1 and OpenGL® ES 2.0 APIs.
For more information about the supported OpenGL® ES and EGL® extensions see:
The OpenGL® ES and EGL® libraries are packaged with the Processor SDK Linux AM65xx and are used by graphics stacks such as Wayland/Weston. The drivers run on an ARM core and programs the firmware running inside a GPU core with rendering commands submitted by the user applications.
The rest of this page will cover the following topics:
Software architecture of Graphics
Instructions on how to run graphics demos
Instructions on how to run DSS application
Instructions on how launch Weston
Instructions on how to run PVR tools
SoC Performance Monitoring Tools
QT and GTK+ graphics frameworks
Migration Guide
AM3 Beagle Bone Black Board Configuration
SGX Debugging Tips
3.8.2. Software Architecture¶
The picture below shows the software architecture of Graphics in Processor SDK Linux AM65xx.
3.8.3. Graphics Demos¶
Along with the graphics driver and userspace libraries, the SDK also includes example applications. Some of the demos are based on the IMG Native_SDK examples.
The following 3D Graphics demos are available via Matrix. The table below provides a list of these demos, with a brief description.
Demo Name |
Details |
---|---|
ChameleonMan |
This demo shows a matrix skinned character in combination with bump mapping. |
CoverFlow |
This is a demonstration of a coverflow style effect |
ExampleUI |
This demo shows how to efficiently render sprites and interface elements. |
Navigation |
This is a demonstration of how to implement rendering algorithms for Navigation software. |
Kmscube |
This demo shows how to render and display multi-colored spinning cube |
Running demos in Null Window system mode
The graphics demos can also be run in null-window system mode outside of Wayland windowing system as full screen applications. In order to do so, exit Weston by pressing Ctrl-Alt-Backspace from the keyboard which connects to the EVM. Then, if the LCD screen stays in “Please wait…”, press Ctrl-Alt-F1 to go to the command line on LCD console. After that, the command line can be used from serial console, SSH console, or LCD console.
Please make sure the board is connected to at least one display before running these demos.
# /usr/bin/SGX/demos/DRM/OGLES2Coverflow
# /usr/bin/SGX/demos/DRM/OGLES2ChameleonMan
# /usr/bin/SGX/demos/DRM/OGLES2ExampleUI
# /usr/bin/SGX/demos/DRM/OGLES2Navigation
After you see the output on the display interface, hit q to terminate the application.
Some of the demos under null windowing system require the user to pass in the drm connector id. For information on how to get connector id please refer to the Display section.
3.8.4. Display¶
TI SoC’s are equipped with Display SubSystem (DSS) hardware to provide hardware
acceleration for alpha blending of overlays and color conversion. The DSS
hardware is exposed to the software drm API available through libdrm
module.
Through this drm interface, a user space program can perform mode setting of
the display.
The drm module models the display hardware as a series of abstract hardware blocks and manages them through the API. The blocks are:
CRTC1: represents a scanout engine that generates video timing signal from the data pointed to by the scanout buffer
Connector: represents where the video timing signal is sent across to the display
Encoder: transforms the video timing signal from CRTC to a format that is suitable for sending across the connector
Plane: represents the overlay buffer that a CRTC can be fed with
A utility application modetest
can be used to get the list of available drm
blocks. All the information available for the device can be displayed by using
it.
3.8.4.1. Finding Connector ID¶
Run the below modetest
command:
Look for the display device for which the connector ID is required - such as HDMI, LCD etc.
Connectors:
id encoder status type size (mm) modes encoders
4 3 connected HDMI-A 480x270 20 3
modes:
name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
1920x1080 60 1920 2008 2052 2200 1080 1084 1089 1125 flags: phsync, pvsync; type: preferred, driver
...
16 15 connected unknown 0x0 1 15
modes:
name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
800x480 60 800 1010 1040 1056 480 502 515 525 flags: nhsync, nvsync; type: preferred, driver
The modes displayed are the various resolutions supported by the connected display.
3.8.4.2. Finding Plane ID¶
To find the Plane ID, run the modetest
command:
which should show something like below:
Planes:
id crtc fb CRTC x,y x,y gamma size
19 0 0 0,0 0,0 0
formats: RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 XR24 RA24 AR24 NV12 YUYV UYVY
props:
...
20 0 0 0,0 0,0 0
formats: RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 XR24 RA24 AR24 NV12 YUYV UYVY
props:
...
3.8.5. Wayland/Weston¶
The supported Wayland/Weston version brings in the multiple display support in extended desktop mode and the ability to drag-and-drop windows from one display to the other.
3.8.5.1. Starting Weston with Systemd¶
Starting with Weston 10, the preferred way to start Weston is with the
weston
user using the systemd service. If you need to interact with this
instance using any other user then make sure that user is in the wayland
or
root
group and direct them to interact with that instance using the global
socket at /run/wayland-0
.
This global socket is special in that it will automatically launch Weston when
a GUI application attempts to connect to it. A profile script in
/etc/profile.d
will automatically set the WAYLAND_DISPLAY
environment
variable if the user has sufficient permission to interact with the socket.
To start the systemd service manually, do the following:
# systemctl start weston
To inspect the systemd service and socket status, do the following:
# systemctl status weston.service weston.socket
3.8.5.2. Starting Weston Manually¶
To launch Weston manually, do the following:
On the target console:
# unset WAYLAND_DISPLAY
On the default display:
# weston --tty=1 --display=<default connector-id>
On the secondary display:
# weston --tty=1 --display=<secondary connector-id>
On all connected displays (LCD and HDMI):
# weston --tty=1
By default, the screensaver timeout is configured to 300 seconds. The user can change the screensaver timeout using a command line option:
--idle-time=<number of seconds>
For example, to set timeout of 10 minutes and Weston configured to display on all connectors, use the below command:
weston --tty=1 --idle-time=600
To disable the screen timeout and to configure Weston to display on all connectors, use the below command:
weston --tty=1 --idle-time=0
If you face any issues with the above procedure, please refer to the upstream weston documentation for troubleshooting tips.
The filesystem comes with a preconfigured weston.ini file which will be located in
/etc/xdg/weston/weston.ini
3.8.5.3. Running Weston clients¶
# /usr/bin/weston-flower
# /usr/bin/weston-clickdot
# /usr/bin/weston-cliptest
# /usr/bin/weston-dnd
# /usr/bin/weston-editor
# /usr/bin/weston-eventdemo
# /usr/bin/weston-image /usr/share/weston/terminal.png
# /usr/bin/weston-resizor
# /usr/bin/weston-simple-egl
# /usr/bin/weston-simple-shm
# /usr/bin/weston-simple-touch
# /usr/bin/weston-smoke
# /usr/bin/weston-info
# /usr/bin/weston-terminal
3.8.5.4. Running multimedia with Wayland sink¶
The GStreamer video sink for Wayland is the waylandsink. To use this video-sink for video playback:
# gst-launch-1.0 playbin uri=file://<path-to-file-name> video-sink=waylandsink
3.8.5.5. Exiting Weston¶
Terminate all Weston clients before exiting Weston. If you have invoked Weston from the serial console, exit Weston by pressing Ctrl-C.
If Weston was started automatically by the init system then it can be stopped with:
# systemctl stop weston
It is also possible to invoke Weston from the native console, exit Weston by pressing Ctrl-Alt-Backspace.
3.8.5.6. Using IVI shell feature¶
The SDK also has support for configuring Weston ivi-shell. The default shell that is configured in the SDK is the desktop-shell.
To change the shell to ivi-shell, the user will have to add the following lines into the /etc/xdg/weston/weston.ini.
To switch back to the desktop-shell can be done by commenting these lines in the /etc/xdg/weston/weston.ini (comments begin with a ‘#’ at the start of line).
[core]
shell=ivi-shell.so
After the above configuration is completed, we can restart Weston by running the following command
# systemctl restart weston
Note
When Weston starts with ivi-shell, the default background is black, this is different from the desktop-shell that brings up a window with background.
With ivi-shell configured for Weston, Wayland client applications use ivi-application protocol to be managed by a central HMI window management.
Applications must support the ivi_application Wayland protocol to be managed by the HMI central controller with an unique numeric ID.
Some important references to Weston IVI-shell can be found at the following link:
3.8.5.6.1. Running QT applications with IVI shell¶
To run the QT application with ivi-shell, set the
QT_WAYLAND_SHELL_INTEGRATION
environment variable to ivi-shell.
# export QT_WAYLAND_SHELL_INTEGRATION=ivi-shell
3.8.6. Using the PowerVR Tools¶
The suite of PowerVR Tools is designed to enable rapid graphics application development. It targets a range of areas including asset exporting and optimization, PC emulation, prototyping environments, on-line and off-line performance analysis tools and many more. Please refer to PowerVR-SDK for additional details on the tools and detailed documentation.
There are a number of useful tools available in the Imagination PowerVR SDK that are compatible with our devices. Two of the most useful tools available are PVRTune and PVRCarbon, which can be used for to profiling and tracing GFX activities.
Previously these were included in the target’s rootfs, but these were removed due to tight version dependencies between the target and host tools. Imagination has moved to packaging the target binaries with their host installer, so we recommend using those binaries directly for guaranteed compatibility.
3.8.6.1. PVRTune¶
The PVRTune utility is a real-time GPU performance analysis tool. It captures hardware timing data and counters which facilitate the identification of performance bottlenecks. PVRPerfServer should be used along with the PVRTune running on the PC to gather data on the SGX loading and activity threads. The target binaries can be found in the host’s PVRTune installation directory under PVRPerfServer.
For more information please refer to Imagination’s upstream documentation on PVRTune and PVRPerfServer.
https://docs.imgtec.com/tools-manuals/pvrtune-manual/topics/introduction.html
3.8.6.2. PVRCarbon¶
The PVRCarbon is an OpenGL® ES and Vulkan ® API recording and analysis utility. PVRCarbon GUI provides off-line tools to inspect captured data, identify redundant calls, highlight costly shaders and many more. This tool can capture traces on target and then play them back on multiple different devices by introducing shim libraries in place of the standard offering for that API.
This requires a little bit of setup on the target though. Please refer to Imagination’s upstream target setup guide for the most recent instructions.
- 1
CRTC stands for cathode-ray tube controller, a throw back to the old cathode-ray tubes TV’s which had a controller that generated video timings based on the data it is being fed by a buffer.