Hi,
I'm in charge of evaluating the iMX6SX and espacially its Vectorial 2D drawing capabilities through OpenVG.
According to the datasheet, the iMX6SX feature a GC400T GPU which seems to be OpenVG 1.1 compatible but after some test I've been wondering if 2D drawning functions are really hardware accelerated (rectangle, line, gradient, etc...).
I compiled one of our 2D app that uses OpenVG to draw the GUI with a few animations and it's pretty slow.
At least the app is slower when running on the iMX6SX than when running on the iMX535D.
To check what feature is accelerated on the iMX6, I also used the vgHardwareQuery() function, but it always returns that nothing is accelerated.
When calling this function on the iMX535D, it returns that some features are accelerated.
That's why I'm wondering if the OpenVG is hardware accelerated on the iMX6SX.
The linux kernel v3.14.28 does have the Vivante graphic driver enabled, but I didn't find any other options to enable to make sure the hardware acceleration is enabled.
I also try to force the system to use either /usr/lib/libOpenVG.2D.so or /usr/lib/libOpenVG.3D.so libraries but the drawing performances remain the same.
Does anyone know if the iMX6SX support hardware accelerated 2D drawing through OpenVG (rectangle, line, ...) ? Not only BitBlt
All my tests were made using the iMX6SX Sabre SD demo board.
Thanks.
解決済! 解決策の投稿を見る。
Sorry, I think I made some mistake in last post.
Yes, we are supporting Openvg in imx6sx. But there is no openvg gpu core on imx6sx. The gc400t on imx6sx exposes the openvg1.1 api running on the 3D core with software tessellation. The tessellation is done by software, but when rendering, it is accelerated through 3D core. The dedicated VG cpu core like gc355 is that it has a proper HW tessellator.
If your opevg path is changed each frame or frequently, the cpu is being used for tessellation. The performance will be bad. If path remains static, it just re-render the frame,n hw acceleartion is used and performance will be OK.
But, if you want to do something like blit, copy etc using vg core explicitly such as the case in our g2d_test, you will get the error of openvg core not supported message since there is no vg core.
in your application, is the drawing path changed frequently? Did you need to do some specific job using openvg gpu core?
For a open vg application, here are all the steps for rendering:
If you have openvg core, it will do all the steps, all steps are hardware accelerated.
if there is no openvg core such as in imx6x, step1-3 are done by cpu, and step 4-5 are done by 3D core which are hardware accelerated.
Hope this clarify.
And, I built and tested 3.14.28 using community yocto, the graphics applciation works fine.
I haven't try 3.14.38 on imx6sx yet. could you tell me where you get it? It should be working. Did you build using yocto community ? Can you give the link?
I tried them on imx6q and imx6qp, they all work OK.
Here
are the lists for various gpu cores:
Imx6q/d, vivante gpu core gc2000 3d+g2d + openvg
Imx6dl/solo vivante gpu core gc800+gc320 3d +g2d
Imx6sl vivante gpu core gc355 g2d+openvg
Im6sx vivatne gpu core gc400T 3d+g2d
And there is quick way to know what gpu core and hardware accelerations are supported.
After booting using sd card, Go to /opt/fsl-gpu-sdk,
In this directories, it listed all the demo application we supported, If openvg is supported, you will see OpenVG directories to have all the openvg demo samples listed, If there is no such directories, no such directories be created.
For example, in imx6qsabresd, there will be such directories, for imx6sx, no much directory.
Here are the directories present in /opt/fsl-gpu-sdk on the last v3.14.38 :
- G2D
- GLES2
- GLES3
- OpenVG
So if iMX6 SoloX does not support OpenVG why in the last release they included the OpenVG examples ?
Unfortunately, this release fails to run any graphic apps. The EGL context can't get initialized.
Each app fails with "ERROR: demo setup failed with: eglGetDisplay(hDisplay) failed with error code 12".
Even Qt5 demos fail to start...they do start with release v3.14.28.
Sorry, I think I made some mistake in last post.
Yes, we are supporting Openvg in imx6sx. But there is no openvg gpu core on imx6sx. The gc400t on imx6sx exposes the openvg1.1 api running on the 3D core with software tessellation. The tessellation is done by software, but when rendering, it is accelerated through 3D core. The dedicated VG cpu core like gc355 is that it has a proper HW tessellator.
If your opevg path is changed each frame or frequently, the cpu is being used for tessellation. The performance will be bad. If path remains static, it just re-render the frame,n hw acceleartion is used and performance will be OK.
But, if you want to do something like blit, copy etc using vg core explicitly such as the case in our g2d_test, you will get the error of openvg core not supported message since there is no vg core.
in your application, is the drawing path changed frequently? Did you need to do some specific job using openvg gpu core?
For a open vg application, here are all the steps for rendering:
If you have openvg core, it will do all the steps, all steps are hardware accelerated.
if there is no openvg core such as in imx6x, step1-3 are done by cpu, and step 4-5 are done by 3D core which are hardware accelerated.
Hope this clarify.
And, I built and tested 3.14.28 using community yocto, the graphics applciation works fine.
I haven't try 3.14.38 on imx6sx yet. could you tell me where you get it? It should be working. Did you build using yocto community ? Can you give the link?
I tried them on imx6q and imx6qp, they all work OK.
Thanks for making yourself clearer.
For a open vg application, here are all the steps for rendering:
- Stage 1: Path, Transformation, Stroke, and Paint
- Stage 2: Stroked Path Generation
- Stage 3: Transformation
- Stage 4: Rasterization
- Stage 5: Clipping and Masking
- Stage 6: Paint Generation
- Stage 7: Image Interpolation
- Stage 8: Blending and Anti-aliasing
If you have openvg core, it will do all the steps, all steps are hardware accelerated.
if there is no openvg core such as in imx6x, step1-3 are done by cpu, and step 4-5 are done by 3D core which are hardware accelerated.
Is there a datasheet taht explain this kind of fine detail ?
are you using fb backend?
imx6sx is gc400T gpu core, it has no openvg on it. It only has 3d and 2d acceleration.
The message you got is all right for imx6x board.
I don't know where you got the idea that imx6sx support openvg, at first, I thought you are running g2d test.
Product datasheet mentions the following and our part number is MCIMX6X4EVM10AB :
The GC400T is a graphics engine with separate 2D and 3D pipelines to provide both 2D and 3D acceleration. It supports DirectFB and GAL APIs. It supports OpenGL ES1.1/2.0 and OpenVG 1.1 APIs.
I'm using fb backend indeed and I'm not running g2d but some openVG examples and one of our app I've compiled. Please read my first post.
I got the idea that GC400T supports OpenVG after I've read the "i.MX 6SoloX Applications Processor Reference Manual".
In chapter "1.5.2 Architectural Partitioning" page 180 :
"Architecture supports processing-intensive tasks in the following ways:
[..]
• Multimedia is supported with:
• GC400T Graphics Engine supports engine with separate 2D and 3D pipelines to
provide both 2D and 3D acceleration. It supports:
• DirectFB and GAL APIs
• OpenGL ES1.1/2.0
• OpenVG 1.1 APIs.
[..]"
but also in chapter "33.1 Overview" page 1579:
"The graphics processing unit (GPU) is designed for high performance, high quality
graphics, and low power consumption that delivers hardware acceleration for 2D and 3D
graphics displays.
[..]
GPU accelerates numerous 2D and 3D graphics applications, including graphical user
interfaces (GUI), menu displays, flash animation, and gaming. GPU supports the
following graphics APIs:
• OpenGL ES 2.0
• OpenGL ES 1.1
• OpenVG 1.1
• DirectFB
• GDI/DirectDraw"
And according to chapter "33.4 GPU 3D Features", page 1582, it seems that OpenVG is handled by the 3D core...why not !
"The features of the GPU 3D-unit include:
• OpenGL ES 2.0 compliance, including extensions; OpenGL ES 1.1; OpenVG 1.1"
The ambiguous part is in chapter "1.4 Features" page 177 :
"[..]
The i.MX 6SoloX processors incorporate the following hardware accelerators:
• GPU—2D/3D Graphics Processing Unit
• PXP—PiXel Processing Pipeline.
[..]
NOTE
The actual feature set depends on the part number. Functions,
such as 2D and OpenVG hardware graphics acceleration may
not be enabled for specific part numbers.
[..]"
Our part number is PCIMX6X4EVM10AB, and according to the datasheet "i.MX6 SoloX Applications Processors for Consumer Products, Rev. 0", chapter "1.1 Ordering Information", this part number does support 2D&3D GPU, the only unsupported feature is MLB.
With all these information, where do you get that OpenVG is not supported by GC400T ?
Hello karinavalencia
I will take a look into the 3.14.28 driver sources to check if there exists OpenVG Acceleration, however, I won't be able to execute tests given that I don't have the i.MXSX HW available.
Start date for this activity: Wednesday October 26th
Hugo
Hello Victor,
If you want me to explain what I did to compile the rootfs let me know.
Since I do have a iMX6SX Sabre-SDB board, I can perform some tests if you want.
Alex,
chinglingwang do you have the HW to help here?
Hello Ag74,
It is a tricky response, since the GPU it is an option resource in the i.MX6SoloX, there are devices that have the supported GPU 2D and 3D and there are devices that does not support the GPU please review the datasheet of the device that you are using so you can see if it has the support of the GPU, you can find the datasheets in the following link:
Hi Jamesbone,
Thanks for your answer but I've already ckeched that the iMX6 we've been testing is supposed to support the OpenVG acceleration though the Vivante GC400T.
According to the "iMX6 SoloX applications processors for consumer products" document, our iMX6 has the part number PCIMX6EVM10ABX which is supposed to support the OpenVG. I know the PC letters mean prototype samples but I hope they're fully functionnal.
Regards.
I'm noticing the same issue, the part number on the board is MCIMX6X4EVM10AB, which should support 2D & 3D. I suspect it is a driver/vivante issue because in the kernel log (3.14.28) I'm seeing the following:
[ 1.678461] galcore: clk_get 2d core clock failed, disable 2d/vg!
[ 1.687740] Galcore version 5.0.11.25762
g2d_test reports the following:
---------------- g2d copy & cache performance ----------------
g2d copy non-cacheable time 8834us, 113fps, 236Mpixel/s ........
cpu copy non-cacheable time 100095us, 9fps, 20Mpixel/s ........
cpu copy user cacheable time 18421us, 54fps, 113Mpixel/s ........
cpu copy gpu cacheable time 18389us, 54fps, 113Mpixel/s ........
g2d copy with cache op time 22495us, 44fps, 92Mpixel/s ........
g2d_make_current: fail to set current hardware type to 1
vg core is not supported in device!
We suspect a software issue too.
After a look in the device tree configuration file I didn't notice any settings that could enable the OpenVG acceleration.
We do have the same result when checking out the dmseg output and the g2d_test test results.
2D core seems to be disabled.
--[dmesg]--
galcore: clk_get 2d core clock failed, disable 2d/vg!
Galcore version 5.0.11.25762
---------------- g2d copy & cache performance ----------------
g2d copy non-cacheable time 8894us, 112fps, 234Mpixel/s ........
cpu copy non-cacheable time 48592us, 20fps, 42Mpixel/s ........
cpu copy user cacheable time 17586us, 56fps, 118Mpixel/s ........
cpu copy gpu cacheable time 18189us, 54fps, 114Mpixel/s ........
g2d copy with cache op time 23246us, 43fps, 89Mpixel/s ........
g2d_make_current: fail to set current hardware type to 1
vg core is not supported in device!
The Vivante kernel module may be buggy or does not fully support the GC400T.
Can the freescale team support reply to confirm whether the OpenVG acceleration is supported and fully functional in the kernel v3.14.28 ?
Thanks.
Regards.
The kernel error is because there is no gpu2d_clk
' or 'gpu2d_axi_clk
' configured in the dtsi. However these clocks don't seem to exists for imx6sx.
HugoOsornio can you help to comment here?