Is iMX6SX OpenVG acceleration active with Linux 3.14.28 ?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Is iMX6SX OpenVG acceleration active with Linux 3.14.28 ?

Jump to solution
6,019 Views
ag74
Contributor III

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.

Labels (1)
1 Solution
2,676 Views
chingling_wang
NXP Employee
NXP Employee

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:

  • 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.

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.

View solution in original post

0 Kudos
16 Replies
2,676 Views
chingling_wang
NXP Employee
NXP Employee

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.

2,676 Views
ag74
Contributor III

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.

0 Kudos
2,677 Views
chingling_wang
NXP Employee
NXP Employee

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:

  • 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.

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.

0 Kudos
2,676 Views
ag74
Contributor III

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 ?

0 Kudos
2,676 Views
chingling_wang
NXP Employee
NXP Employee

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.

0 Kudos
2,676 Views
mtx512
Contributor V

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.

2,676 Views
ag74
Contributor III

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 ?

2,676 Views
HugoOsornio
NXP Employee
NXP Employee

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

2,676 Views
ag74
Contributor III

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,

0 Kudos
2,676 Views
karina_valencia
NXP Apps Support
NXP Apps Support

chinglingwang​ do you have the  HW to help here?

0 Kudos
2,676 Views
jamesbone
NXP TechSupport
NXP TechSupport

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:

i.MX 6SoloX Family of Applications Processors|Freescale

0 Kudos
2,676 Views
ag74
Contributor III

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.

0 Kudos
2,676 Views
mtx512
Contributor V

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!

0 Kudos
2,676 Views
ag74
Contributor III

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.

0 Kudos
2,676 Views
mtx512
Contributor V

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.

0 Kudos
2,675 Views
karina_valencia
NXP Apps Support
NXP Apps Support

HugoOsornio​ can you help to  comment here?

0 Kudos