Difference between revisions of "Graphics"

From Rockchip open source Document
Jump to: navigation, search
 
(6 intermediate revisions by one other user not shown)
Line 1: Line 1:
 +
 +
  
 
= Graphics Introduce =
 
= Graphics Introduce =
  
 
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.
 +
 +
 
 +
 +
 
  
 
== Graphics with X11 ==
 
== Graphics with X11 ==
Line 8: Line 14:
 
Xserver is the display system used on regular desktop Linux platforms.
 
Xserver is the display system used on regular desktop Linux platforms.
  
Rockchip have a custom [http://rockchip.wikidot.com/xserver Xserver] which have enable [https://www.freedesktop.org/wiki/Software/Glamor/ glamor 2D acceleration].
+
Rockchip have a custom [[Xserver|Xserver]] which have enable [https://www.freedesktop.org/wiki/Software/Glamor/ 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.
 
Xserver usually have a good compatibility, but the performance may be little less and its size is more large than other display system.
Line 18: Line 24:
 
X11 structure in Linux OS
 
X11 structure in Linux OS
  
[[File:X11 structure.png|RTENOTITLE]]
+
[[File:Xserver gpu.png|RTENOTITLE]]
  
 
=== DDX(armsoc) ===
 
=== DDX(armsoc) ===
Line 39: Line 45:
 
DefaultDepth 24
 
DefaultDepth 24
 
EndSection</pre>
 
EndSection</pre>
 
  
 
=== UMPLOCK ===
 
=== UMPLOCK ===
  
source code: wget [http://malideveloper.arm.com/downloads/drivers/DX910/r6p1- http://malideveloper.arm.com/downloads/drivers/DX910/r6p1-]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-01rel0/DX910-SW-99002-r6p1-01rel0.tgz http://malideveloper.arm.com/downloads/drivers/DX910/r6p1-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 50: Line 55:
  
 
The umplock only use for x11 graphic stack, no need for wayland, because mali&nbsp;<br/> already do the wayland sync on its driver.
 
The umplock only use for x11 graphic stack, no need for wayland, because mali&nbsp;<br/> already do the wayland sync on its driver.
 +
 +
&nbsp;
 +
 +
=== DDX(modesetting) ===
 +
 +
See [https://www.x.org/wiki/ModeSetting/ ModeSetting ]for detail introduce.
 +
 +
&nbsp;
  
 
=== X11 performance test ===
 
=== X11 performance test ===
Line 67: Line 80:
 
=== Structure ===
 
=== Structure ===
  
[[File:Wayland structure.png]]
+
[[File:Wayland.png|RTENOTITLE]]
  
 
=== Weston ===
 
=== Weston ===
Line 74: Line 87:
  
 
&nbsp; &nbsp; &nbsp;1. run wayland with drm and gpu renderer
 
&nbsp; &nbsp; &nbsp;1. run wayland with drm and gpu renderer
 
 
<pre style="margin-left: 40px;">export XDG_RUNTIME_DIR=/tmp
 
<pre style="margin-left: 40px;">export XDG_RUNTIME_DIR=/tmp
 
weston --backend=drm-backend.so --idle-time=100 </pre>
 
weston --backend=drm-backend.so --idle-time=100 </pre>
Line 85: Line 97:
 
=== Wayland performance test ===
 
=== Wayland performance test ===
  
3D preformance: &nbsp;''glmark2-es2-wayland''<br/> glmark2-es2 can get from https://github.com/glmark2/glmark2
+
3D preformance: &nbsp;''glmark2-es2-wayland''<br/> glmark2-es2 can get from [https://github.com/glmark2/glmark2 https://github.com/glmark2/glmark2]
  
 
<br/> OpenVG test: ''vg_api_tests''<br/> build from mali DDK, build with make bin/vg_api_tests
 
<br/> OpenVG test: ''vg_api_tests''<br/> build from mali DDK, build with make bin/vg_api_tests
 +
 +
&nbsp;
 +
  
 
== Graphics with None ==
 
== Graphics with None ==
Line 93: Line 108:
 
If you don't want to use X11 or wayland, there are some chooses for you.
 
If you don't want to use X11 or wayland, there are some chooses for you.
  
Interface:<br/> Libdrm and libmali-gbm can be used to draw UI without display systems.
+
Interface:<br/> libdrm and libmali-gbm can be used to draw UI without display systems.
  
Framework:<br/> [http://rockchip.wikidot.com/yocto-user-guide-qt QT]&nbsp;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/> [[Qt|QT]]&nbsp;can work without x11 or wayland. Qt5 applications could be run on top of EGL(libmali-gbm).
  
 
== MALI GPU driver ==
 
== MALI GPU driver ==
Line 101: Line 116:
 
=== Structure ===
 
=== Structure ===
  
[[File:Mali driver structure.png]]
+
[[File:Mali gpu.png|RTENOTITLE]]
  
 
== Mali Build option ==
 
== Mali Build option ==
Line 113: Line 128:
 
=== Structure ===
 
=== Structure ===
  
[[File:Drm structure.png]]
+
[[File:DRM.png|RTENOTITLE]]
  
 
=== Source code ===
 
=== 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&nbsp;<br/> as Mesa and 2D drivers) to communicate with the Kernel by the means of the DRI&nbsp;<br/> protocol.
+
mainline source code: git clone [git://anongit.freedesktop.org/mesa/drm git://anongit.freedesktop.org/mesa/drm]<br/> LIBDRM is the cross-driver middleware which allows user-space applications (such&nbsp;<br/> as Mesa and 2D drivers) to communicate with the Kernel by the means of the DRI&nbsp;<br/> protocol.
  
 
=== Mailing list ===
 
=== Mailing list ===
  
General developers discussions occur on the dri-devel@lists.freedesktop.org&nbsp;<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/.
+
General developers discussions occur on the dri-devel@lists.freedesktop.org&nbsp;<br/> mailing list.<br/> Subscribe to the list at [http://lists.freedesktop.org/mailman/listinfo/dri-devel http://lists.freedesktop.org/mailman/listinfo/dri-devel].<br/> Archives are found at [http://lists.freedesktop.org/archives/dri-devel/ http://lists.freedesktop.org/archives/dri-devel/].
  
 
= Kernel Driver porting =
 
= Kernel Driver porting =

Latest revision as of 02:04, 12 October 2017


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

RTENOTITLE

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:

  1. support common x11 display and Hwcursor
  2. DRI2 (request by EGL X11 client)
  3. 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.

 

DDX(modesetting)

See ModeSetting for detail introduce.

 

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

RTENOTITLE

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. Qt5 applications could be run on top of EGL(libmali-gbm).

MALI GPU driver

Structure

RTENOTITLE

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

RTENOTITLE

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 FreedesktopARMArch wiki…..