Qt5 on iMX6: enable vsync with single framebuffer

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

Qt5 on iMX6: enable vsync with single framebuffer

3,776 Views
FedericoWegher
Contributor III

Hi.

I am using SabreSD evaluation kit with Linux BSP ltib-4.1.1, I have cross-compiled Qt5 and running its test applications with success. From documentation I read that the following environment variable can affect both vertical synch and number of framebuffers used:

- FB_MULTI_BUFFER=1, then one framebuffer is used and vsync is disabled

- FB_MULTI_BUFFER=2, then 2 framebuffers are used and vsync is enabled

My LCD is 1024x600@60Hz and framebuffer virtual size is 1024x600 16bpp.

I have two questions:

- in case FB_MULTI_BUFFER=2, I do not see any change in virtual size, it is always 1024x600. Is it correct? I expected fb driver to be asked for twice as vxres or vyres;

- in case FB_MULTI_BUFFER=1, is there any way to enable vsync anyway? I ask that because my specific application requires framebuffer grabbing, so one framebuffer is a requirement.

Thanks for help.

Regards,

Federico

Labels (3)
0 Kudos
2 Replies

1,461 Views
Bio_TICFSL
NXP TechSupport
NXP TechSupport

Hi Federico,

for FM_MULTI_BUFFER=2 is correct, for FB_MULTI_BUFFER=1, Probably it isn´t swapping or there is a vsync wait, try glFinish before eglSwapBuffer. also Please check try with FB_MULTI_BUFFER=3

hope this helps

0 Kudos

1,461 Views
FedericoWegher
Contributor III

Hi.

I am using simple QML application, so there are no openGL/EGL calls.

Browsing the web, I found out that Qt5 eglfs platform plugin allows definition of variable QT_QPA_EGLFS_FORCEVSYNC, which relies on kernel vsync ioctl-based implementation coded in mxc IPUv3 framebuffer driver. So I changed my setup this way:

export FB_MULTI_BUFFER=1

export QT_QPA_EGLFS_FORCEVSYNC=1

which mean: use 1 framebuffer but enable vsync. This setup seems to work, because framerate is limited to vsync, framebuffer virtual resolution is same as real resolution (so 1 fb is used actually). Anyway, when my QML application plays some animations, I see graphical artifacts on LCD.

So, my question are:

1) how can I enable vsync, keep one framebuffer and avoid artifacts?

2) why in case of FB_MULTI_BUFFER=2 (2 FBs and vsync enabled) there are no such artifacts?

Regards,

Federico

0 Kudos