hello,
i've been finally able to make the platform EGLFS render on both screens
and the "hellowindow --multiscreen" example shows me nicely the two
trolltech logs spinning each on its display. so far so good.
now my setup is 2 screens: one internal LCD 800x480 and one external
fullHD 1920x1080 on ext HDMI.
kmstest shows me the two test cards, correctly.
/ # kmstest
Connector 0/@32: Unknown-1
Crtc 0/@30 (plane 0/@28): 800x480 29.500 800/24/72/96 480/3/10/7 60
(59.48) 0xa 0x48
Fb 44 800x480-XR24
Connector 1/@37: HDMI-A-1
Crtc 1/@35 (plane 2/@33): 1920x1080 148.500 1920/88/44/148
1080/4/5/36 60 (60.00) 0x5 0x48
Fb 45 1920x1080-XR24
press enter to exit
now, when i test my own sample code, i loop for screenIdx 0&1 into this fn:
bool Manager::StartOnScreen(int screenIdx){
_desktopWidget = QApplication::desktop();
QScreen * qScreen = QGuiApplication::screens().at(screenIdx);
QWidget* screen = _desktopWidget->screen(screenIdx);
QWidget* bgWidget = new QWidget(screen);
bgWidget->show();
QFrame* smallFrame = new QFrame(bgWidget);
//Set frame color
if(screenIdx == 0)
bgWidget->setStyleSheet("background-color:rgb(0, 0, 254);");
else
bgWidget->setStyleSheet("background-color:rgb(254, 0, 0);");
smallFrame->setStyleSheet("background-color:rgb(0, 254, 0);");
//Show the frame (windowed)
smallFrame->show();
smallFrame->resize(100,100);
smallFrame->move(100,100);
return true;
}
then, i get this wrong render on the full HD display only:
https://drive.google.com/open?id=1vFuJEz1HgiUO6Ariz53ih-yNgXwDUe-3
we can see on the left the "viewport" supposed to land on the internal
LCD, on the right the widget for the HD screen with an offset of 800px
(and cropped on the right border..)
i tried also with setting a simple *QT_QPA_EGLFS_KMS_CONFIG*:
/ # cat /root/egl_kms.json
{
"device": "/dev/dri/card0",
"hwcursor": false,
"pbuffers": true,
"outputs": [
{
"name": "None1",
"mode": "800x480"
},
{
"name": "HDMI1",
"mode": "1920x1080"
}
]
}
but not visible change at all. same view as above on the HDMI display
and the LCD black.
the crazy thing is that if i just run the loop only for screenIndex 0, i
see the widget on the LCD! at full frame 800x480
BTW i found very few info about EGLFS multihead.. mainly google returns
me this post from Laszlo and indeed his sample code IS working! thanx
Laszlo!
http://blog.qt.io/blog/2016/09/19/qt-graphics-with-multiple-displays-on-embedded-linux/
is this behaviour triggering ideas on anyone ? can you spot bugs or
errors on the simple procedure for setting up the objects?
BTW my scope is a single app driving both displays, so i like this EGLFS
stuff because it's light and i do not need a compositor..
thanx
andrea
On 03/09/2018 02:42 PM, Laszlo Agocs wrote:
Hi,
eglfs_mali is for Mali userspace drivers
(https://developer.arm.com/products/software/mali-drivers/user-space)
marked as fbdev. This is from the time when there were only two
options, fbdev and x11.
When having the wayland variants in place, use eglfs_kms instead. When
in doubt, try running weston first. If it comes up correctly,
eglfs_kms is the right choice. This has been tested with an Asus
Tinkerboard (Rockchip RK3288) a while ago. I don’t have experience
with other Mali-based boards.
We do have multi-screen support with DRM, yes. The fbdev and other
backends have none or very limited capabilities in this regard. The
way forward is to use eglfs_kms (or eglfs_kms_egldevice when on
NVIDIA) whenever possible.
Best regards,
Laszlo
*From:* Interest <interest-bounces+laszlo.agocs=qt...@qt-project.org>
*On Behalf Of *Andrea Venturi
*Sent:* fredag 9. mars 2018 13.00
*To:* interest@qt-project.org
*Subject:* [Interest] issues with Qt 5.9.3 with eglfs QPA_Platform on
DRM/KMS kernel on Arm32/Mali HW
hello guys,
the subject says a lot.. :-) let me extend a bit in the body, anyway!
i'm working on a buildroot based OS on top of a Allwinner A20 based
EVB (Olimex A20 SOM) with both a LCD and an HDMI interface.
with a fairly latest 4.15 kernel and proper DTS i can see kmstest
showing correctly two test cards on both heads/screens. so far so good
now i'd like to use the Mali acceleration for snappy Qt experience
(two apps each running full screen on its head..); i know the
libMali.so is a bit of a mess and i currently use this binary blobs:
https://github.com/mosajjal/r6p2/tree/master/libwayland_for_mali/h3/lib_wayland
AFAIK it's ARM32 release for "allwinner gears". and it currently
someway works on wayland but it's bit too heavy for my workload.
i'm wondering if that trunk is good also for "lighter" gbm-only
approach (wayland free.. i mean)
i'm trying to make Qt5 use the eglfs backend, because i suppose the
less the code, the less the bugs.. :-)
but i fail to understand if i have to use elgfs_mali or eglfs_kms
device integration, because the first one failt on "createdisplay()"
with a segfault inside the libMali.so binary blob.
i'm wondering if this issue is related to the fact that the Mali
integration in qt5 eglfs is supposed to use /dev/fb0 for video mode
setting, but the dual head DRM/KMS setup is not offering a complete
dual-head fbdev emulation (and never will AFAICS from the linux-sunxi
community..).
so my question is, finally, is the eglfs_kms supposed to be able to:
* drive correctly the dual-head DRM/KMS setup
* still use the libGLESV2 accelerated path provided by libMali.so
if the latter is true, i'm wondering what's the purpose of eglfs_mali
"device integration".. is that a leftover of times where only /dev/fbX
mode setting was supported?
what's the long term more healthy path to support acceleration and
dual/multiple heads on linux mainline?
really let me know if there are reference updated documentation with
clear information of the different implementation and their use cases,
because my google-fu is failing on me and i find a lot of discussions
dealing with Mali (on many different SOCs) with very few technical
details and insights (that's why this post is pretty long.. feel free
to ask for more info if i'm missing something usefull).
bests
andrea
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest