Difference between revisions of "Graphics"
Line 1: | Line 1: | ||
− | + | = Graphics Introduce = | |
− | = Graphics | ||
This article will give an overview of how graphics are generated on a rockchip platform. | This article will give an overview of how graphics are generated on a rockchip platform. | ||
Line 19: | Line 18: | ||
X11 structure in Linux OS | X11 structure in Linux OS | ||
− | [[File:X11 structure.png]] | + | [[File:X11 structure.png|RTENOTITLE]] |
=== DDX(armsoc) === | === DDX(armsoc) === | ||
− | source code: git clone git@github.com:markyzq/xf86-video-armsoc.git<br/> maliline: git://anongit.freedesktop.org/xorg/driver/xf86-video-armsoc<br/> The DDX support: | + | source code: git clone git@github.com:markyzq/xf86-video-armsoc.git<br/> maliline: [git://anongit.freedesktop.org/xorg/driver/xf86-video-armsoc git://anongit.freedesktop.org/xorg/driver/xf86-video-armsoc]<br/> The DDX support: |
#support common x11 display and Hwcursor | #support common x11 display and Hwcursor | ||
Line 43: | Line 42: | ||
=== UMPLOCK === | === UMPLOCK === | ||
− | source code: wget http://malideveloper.arm.com/downloads/drivers/DX910/r6p1-<br/> 01rel0/DX910-SW-99002-r6p1-01rel0.tgz<br/> Patch the umplock patch to kernel, then you can find the umplock device node: | + | source code: wget [http://malideveloper.arm.com/downloads/drivers/DX910/r6p1- http://malideveloper.arm.com/downloads/drivers/DX910/r6p1-]<br/> 01rel0/DX910-SW-99002-r6p1-01rel0.tgz<br/> Patch the umplock patch to kernel, then you can find the umplock device node: |
<pre>/dev/umplock</pre> | <pre>/dev/umplock</pre> | ||
Line 51: | Line 50: | ||
The umplock only use for x11 graphic stack, no need for wayland, because mali <br/> already do the wayland sync on its driver. | The umplock only use for x11 graphic stack, no need for wayland, because mali <br/> already do the wayland sync on its driver. | ||
− | === X11 performance | + | === X11 performance test === |
2D performace: | 2D performace: | ||
Line 59: | Line 58: | ||
<pre>glmark2-es2</pre> | <pre>glmark2-es2</pre> | ||
− | X11perf tools can easy get from x11-apps.<br/> glmark2-es2 can get from https://github.com/glmark2/glmark2<br/> The glmark2-es2 source code can also build for x11, drm(gbm) and wayland. | + | X11perf tools can easy get from x11-apps.<br/> glmark2-es2 can get from [https://github.com/glmark2/glmark2 https://github.com/glmark2/glmark2]<br/> The glmark2-es2 source code can also build for x11, drm(gbm) and wayland. |
== Graphics with Wayland == | == Graphics with Wayland == | ||
Line 65: | Line 64: | ||
Weston is the reference implementation of a Wayland compositor, and a<br/> useful compositor in its own right. | Weston is the reference implementation of a Wayland compositor, and a<br/> useful compositor in its own right. | ||
− | + | === Structure === | |
+ | |||
+ | [[File:Wayland structure.png]] | ||
+ | |||
+ | === Weston === | ||
+ | |||
+ | The Weston reference implementation of a Wayland compositor. | ||
+ | |||
+ | 1. run wayland with drm and gpu renderer | ||
+ | |||
+ | <pre style="margin-left: 40px;">export XDG_RUNTIME_DIR=/tmp | ||
+ | weston --backend=drm-backend.so --idle-time=100 </pre> | ||
+ | |||
+ | 2. run wayland with drm and cpu renderer | ||
+ | <pre style="margin-left: 40px;">weston --backend=drm-backend.so --idle-time=100 --use-pixman</pre> | ||
+ | <blockquote> | ||
+ | --idle-time: how many seconds the weston got to sleep, it's usefull to test wayland <br/> suspend and resume.<br/> --use-pixman: it's usefull to compare gpu or non-gpu performance and behavior. | ||
+ | </blockquote> | ||
+ | === Wayland performance test === | ||
+ | |||
+ | 3D preformance: ''glmark2-es2-wayland''<br/> glmark2-es2 can get from https://github.com/glmark2/glmark2 | ||
+ | |||
+ | <br/> OpenVG test: ''vg_api_tests''<br/> build from mali DDK, build with make bin/vg_api_tests | ||
== Graphics with None == | == Graphics with None == | ||
Line 75: | Line 96: | ||
Framework:<br/> [http://rockchip.wikidot.com/yocto-user-guide-qt QT] can work without x11 or wayland, it run Qt5 applications on top of EGL(libmali-gbm).<br/> WIth qt eglfs, video player can reach 1080-60fps. | Framework:<br/> [http://rockchip.wikidot.com/yocto-user-guide-qt QT] can work without x11 or wayland, it run Qt5 applications on top of EGL(libmali-gbm).<br/> WIth qt eglfs, video player can reach 1080-60fps. | ||
− | = GPU | + | == MALI GPU driver == |
+ | |||
+ | === Structure === | ||
+ | |||
+ | [[File:Mali driver structure.png]] | ||
+ | |||
+ | == Mali Build option == | ||
+ | |||
+ | Build for X11:<br/> VARIANT=mali450-gles20-eb-linux-sse-vg-x11-dma_buf<br/> Build for Wayland:<br/> VARIANT=mali450-gles20-eb-vg-sse-linux-wayland-drm-dma_buf<br/> X11 stack only use gpu x11 backend, <br/> Wayland use two gpu backend, drm(gbm) and wayland | ||
+ | <blockquote> | ||
+ | -x11-: x11 backend<br/> -drm-: GBM backend<br/> -wayland: wayland backend<br/> -sse-: similar with neon, Accelerate memcpy on mali, speed up some api like <br/> glTexSubImage2D<br/> -vg-: openVG support, tested with vg_api_tests on wayland backend<br/> -dma_buf-: support dma_buf | ||
+ | </blockquote> | ||
+ | == LibDRM == | ||
+ | |||
+ | === Structure === | ||
+ | |||
+ | [[File:Drm structure.png]] | ||
+ | |||
+ | === Source code === | ||
+ | |||
+ | mainline source code: git clone git://anongit.freedesktop.org/mesa/drm<br/> LIBDRM is the cross-driver middleware which allows user-space applications (such <br/> as Mesa and 2D drivers) to communicate with the Kernel by the means of the DRI <br/> protocol. | ||
+ | |||
+ | === Mailing list === | ||
− | + | General developers discussions occur on the dri-devel@lists.freedesktop.org <br/> mailing list.<br/> Subscribe to the list at http://lists.freedesktop.org/mailman/listinfo/dri-devel.<br/> Archives are found at http://lists.freedesktop.org/archives/dri-devel/. | |
− | + | = Kernel Driver porting = | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
= Others = | = Others = |
Revision as of 03:53, 17 March 2017
Contents
Graphics Introduce
This article will give an overview of how graphics are generated on a rockchip platform.
Graphics with X11
Xserver is the display system used on regular desktop Linux platforms.
Rockchip have a custom Xserver which have enable glamor 2D acceleration.
Xserver usually have a good compatibility, but the performance may be little less and its size is more large than other display system.
Gstreamer X11 sink have DRM 4k-Video render support(though hacky).
Structure
X11 structure in Linux OS
DDX(armsoc)
source code: git clone git@github.com:markyzq/xf86-video-armsoc.git
maliline: git://anongit.freedesktop.org/xorg/driver/xf86-video-armsoc
The DDX support:
- support common x11 display and Hwcursor
- DRI2 (request by EGL X11 client)
- umplock(support non-tearing on EGL x11 client)
/etc/X11/xorg.conf: Xserver will parse this config to find DDX and configure info
Section "Device" Identifier "Mali-Fbdev" Driver "armsoc" Option "UMP_LOCK" "true" EndSection Section "Screen" Identifier "Default Screen" Device "Mali-Fbdev" DefaultDepth 24 EndSection
UMPLOCK
source code: wget http://malideveloper.arm.com/downloads/drivers/DX910/r6p1-
01rel0/DX910-SW-99002-r6p1-01rel0.tgz
Patch the umplock patch to kernel, then you can find the umplock device node:
/dev/umplock
Don't forget enable DDX umplock option:
Option "UMP_LOCK" "true"
The umplock only use for x11 graphic stack, no need for wayland, because mali
already do the wayland sync on its driver.
X11 performance test
2D performace:
x11perf
3D preformace:
glmark2-es2
X11perf tools can easy get from x11-apps.
glmark2-es2 can get from https://github.com/glmark2/glmark2
The glmark2-es2 source code can also build for x11, drm(gbm) and wayland.
Graphics with Wayland
Weston is the reference implementation of a Wayland compositor, and a
useful compositor in its own right.
Structure
Weston
The Weston reference implementation of a Wayland compositor.
1. run wayland with drm and gpu renderer
export XDG_RUNTIME_DIR=/tmp weston --backend=drm-backend.so --idle-time=100
2. run wayland with drm and cpu renderer
weston --backend=drm-backend.so --idle-time=100 --use-pixman
--idle-time: how many seconds the weston got to sleep, it's usefull to test wayland
suspend and resume.
--use-pixman: it's usefull to compare gpu or non-gpu performance and behavior.
Wayland performance test
3D preformance: glmark2-es2-wayland
glmark2-es2 can get from https://github.com/glmark2/glmark2
OpenVG test: vg_api_tests
build from mali DDK, build with make bin/vg_api_tests
Graphics with None
If you don't want to use X11 or wayland, there are some chooses for you.
Interface:
Libdrm and libmali-gbm can be used to draw UI without display systems.
Framework:
QT can work without x11 or wayland, it run Qt5 applications on top of EGL(libmali-gbm).
WIth qt eglfs, video player can reach 1080-60fps.
MALI GPU driver
Structure
File:Mali driver structure.png
Mali Build option
Build for X11:
VARIANT=mali450-gles20-eb-linux-sse-vg-x11-dma_buf
Build for Wayland:
VARIANT=mali450-gles20-eb-vg-sse-linux-wayland-drm-dma_buf
X11 stack only use gpu x11 backend,
Wayland use two gpu backend, drm(gbm) and wayland
-x11-: x11 backend
-drm-: GBM backend
-wayland: wayland backend
-sse-: similar with neon, Accelerate memcpy on mali, speed up some api like
glTexSubImage2D
-vg-: openVG support, tested with vg_api_tests on wayland backend
-dma_buf-: support dma_buf
LibDRM
Structure
Source code
mainline source code: git clone git://anongit.freedesktop.org/mesa/drm
LIBDRM is the cross-driver middleware which allows user-space applications (such
as Mesa and 2D drivers) to communicate with the Kernel by the means of the DRI
protocol.
Mailing list
General developers discussions occur on the dri-devel@lists.freedesktop.org
mailing list.
Subscribe to the list at http://lists.freedesktop.org/mailman/listinfo/dri-devel.
Archives are found at http://lists.freedesktop.org/archives/dri-devel/.
Kernel Driver porting
Others
For details of the full Linux graphics stack, please refer to online documents in Freedesktop, ARM, Arch wiki…..