canonical / mir

The Mir compositor
GNU General Public License v2.0
620 stars 99 forks source link

Unable to start ubuntu-frame using xilinx libmali #3506

Open Asalle opened 1 month ago

Asalle commented 1 month ago

Environment

Architecture: arm64 Operation System: Ubuntu 22.04 (custom image for Xilinx) ubuntu-frame: 144-mir2.17.0, with hardcoded ARGB pixel format, see #3466 libmali in a custom graphics-core22 snap: https://github.com/Xilinx/mali-userspace-binaries/tree/xilinx_v2022.1 HDMI monitor connected for output: Samsung U28R550UQP (4K)

Steps to reproduce

~ sudo ubuntu-frame

Expected result

ubuntu-frame started without issue, ubuntu-frame grey gradient visible on the HDMI monitor

Actual result:

234567891011121314151617181920212223242526272829[2024-07-22 12:49:44.002173] <information> mirserver: Starting
[2024-07-22 12:49:44.002423] < - debug - > mirserver: Not trying logind: "DISPLAY" is set and X need not have claimed the VT
[2024-07-22 12:49:44.002809] < - debug - > mirserver: Not using Linux VT subsystem for session management: Failed to open current VT
[2024-07-22 12:49:44.002916] < - debug - > mirserver: No session management supported
[2024-07-22 12:49:44.003019] <information> VT switch key handler: No VT switching support available: MinimalConsoleServices does not support VT switching
[2024-07-22 12:49:44.003652] <information> mircommon: Loading modules from: /snap/ubuntu-frame/9753/usr/lib/aarch64-linux-gnu/mir/server-platform
[2024-07-22 12:49:44.003944] <information> mircommon: Loading module: /snap/ubuntu-frame/9753/usr/lib/aarch64-linux-gnu/mir/server-platform/graphics-eglstream-kms.so.22
[2024-07-22 12:49:44.004979] < -warning- > mircommon: Failed to load module: /snap/ubuntu-frame/9753/usr/lib/aarch64-linux-gnu/mir/server-platform/graphics-eglstream-kms.so.22 (error was:libnvidia-egl-wayland.so.1: cannot open shared object file: No such file or directory)
[2024-07-22 12:49:44.005090] <information> mircommon: Loading module: /snap/ubuntu-frame/9753/usr/lib/aarch64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.22
[2024-07-22 12:49:44.005157] <information> mircommon: Loading module: /snap/ubuntu-frame/9753/usr/lib/aarch64-linux-gnu/mir/server-platform/renderer-egl-generic.so.22
[2024-07-22 12:49:44.005214] <information> mircommon: Loading module: /snap/ubuntu-frame/9753/usr/lib/aarch64-linux-gnu/mir/server-platform/server-x11.so.22
[2024-07-22 12:49:44.006184] < -warning- > mircommon: Failed to load module: /snap/ubuntu-frame/9753/usr/lib/aarch64-linux-gnu/mir/server-platform/server-x11.so.22 (error was:libX11-xcb.so.1: cannot open shared object file: No such file or directory)
[2024-07-22 12:49:44.006278] <information> mircommon: Loading module: /snap/ubuntu-frame/9753/usr/lib/aarch64-linux-gnu/mir/server-platform/input-evdev.so.9
[2024-07-22 12:49:44.011085] <information> mirserver: Found display driver: mir:egl-generic (version 2.17.0)
[2024-07-22 12:49:44.011336] <information> mirserver: Found display driver: mir:gbm-kms (version 2.17.0)
[2024-07-22 12:49:44.014904] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card0, driver zynqmp-display
[2024-07-22 12:49:44.015832] <information> gbm-kms: Failed to probe DRM device: ./src/platforms/gbm-kms/server/kms/egl_helper.cpp(72): Throw in function void {anonymous}::initialise_egl(EGLDisplay, int, int)
Dynamic exception type: boost::wrapexcept<std::system_error>
std::exception::what: Failed to initialize EGL display: EGL_BAD_ALLOC (0x3003)

[2024-07-22 12:49:44.016472] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver 
[2024-07-22 12:49:44.016630] <information> mirserver: Driver supports:
[2024-07-22 12:49:44.016689] <information> mirserver:   /devices/platform/axi/fd4a0000.display/drm/card0 (priority 0)
ERROR: ./src/server/graphics/default_configuration.cpp(198): Throw in function virtual const std::vector<std::shared_ptr<mir::graphics::DisplayPlatform> >& mir::DefaultServerConfiguration::the_display_platforms()
Dynamic exception type: boost::wrapexcept<std::runtime_error>
std::exception::what: Exception while creating graphics platform
ERROR: ./src/server/graphics/platform_probe.cpp(232): Throw in function std::vector<std::pair<mir::graphics::SupportedDevice, std::shared_ptr<mir::SharedLibrary> > > mir::graphics::modules_for_device(const std::function<std::vector<mir::graphics::SupportedDevice>(const mir::SharedLibrary&)>&, const std::vector<std::shared_ptr<mir::SharedLibrary> >&, mir::graphics::TypePreference)
Dynamic exception type: boost::wrapexcept<std::runtime_error>
std::exception::what: Failed to find any platforms for current system

miral-app started from VT:

[2024-07-23 08:18:02.686937] <information> mirserver: Starting
[2024-07-23 08:18:02.697655] < - debug - > mirserver: Discovered object path for current session = /org/freedesktop/login1/session/_366
[2024-07-23 08:18:02.708547] < - debug - > mirserver: Using logind for session management
[2024-07-23 08:18:02.709031] <information> mircommon: Loading modules from: /usr/lib/aarch64-linux-gnu/mir/server-platform
[2024-07-23 08:18:02.709300] <information> mircommon: Loading module: /usr/lib/aarch64-linux-gnu/mir/server-platform/graphics-wayland.so.22
[2024-07-23 08:18:02.736722] < -warning- > mircommon: Failed to load module: /usr/lib/aarch64-linux-gnu/mir/server-platform/graphics-wayland.so.22 (error was:/usr/lib/aarch64-linux-gnu/mir/server-platform/graphics-wayland.so.22: undefined symbol: eglCreatePlatformWindowSurface)
[2024-07-23 08:18:02.736979] <information> mircommon: Loading module: /usr/lib/aarch64-linux-gnu/mir/server-platform/server-x11.so.22
[2024-07-23 08:18:02.737083] <information> mircommon: Loading module: /usr/lib/aarch64-linux-gnu/mir/server-platform/server-virtual.so.22
[2024-07-23 08:18:02.737142] <information> mircommon: Loading module: /usr/lib/aarch64-linux-gnu/mir/server-platform/renderer-egl-generic.so.22
[2024-07-23 08:18:02.737196] <information> mircommon: Loading module: /usr/lib/aarch64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.22
[2024-07-23 08:18:02.737252] <information> mircommon: Loading module: /usr/lib/aarch64-linux-gnu/mir/server-platform/input-evdev.so.9
[2024-07-23 08:18:02.742585] <information> mirserver: Found display driver: mir:x11 (version 2.17.0)
[2024-07-23 08:18:02.742798] <information> mirserver: (Unsupported by system environment)
[2024-07-23 08:18:02.742855] <information> mirserver: Found display driver: mir:egl-generic (version 2.17.0)
[2024-07-23 08:18:02.743064] <information> mirserver: Found display driver: mir:gbm-kms (version 2.17.0)
[2024-07-23 08:18:02.746582] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card0, driver zynqmp-display
[2024-07-23 08:18:02.776388] <information> gbm-kms: Failed to probe DRM device: Dynamic exception type: std::system_error
std::exception::what: Probe failed to query GL renderer: GL_NO_ERROR (0)

[2024-07-23 08:18:02.777112] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver 
[2024-07-23 08:18:02.777325] <information> mirserver: Driver supports:
[2024-07-23 08:18:02.777422] <information> mirserver:   /devices/platform/axi/fd4a0000.display/drm/card0 (priority 0)
ERROR: ./src/server/graphics/default_configuration.cpp(198): Throw in function virtual const std::vector<std::shared_ptr<mir::graphics::DisplayPlatform> >& mir::DefaultServerConfiguration::the_display_platforms()
Dynamic exception type: boost::wrapexcept<std::runtime_error>
std::exception::what: Exception while creating graphics platform
ERROR: ./src/server/graphics/platform_probe.cpp(232): Throw in function std::vector<std::pair<mir::graphics::SupportedDevice, std::shared_ptr<mir::SharedLibrary> > > mir::graphics::modules_for_device(const std::function<std::vector<mir::graphics::SupportedDevice>(const mir::SharedLibrary&)>&, const std::vector<std::shared_ptr<mir::SharedLibrary> >&, mir::graphics::TypePreference)
Dynamic exception type: boost::wrapexcept<std::runtime_error>
std::exception::what: Failed to find any platforms for current system

RAOF:

Ah. I see a problem in the probing code, there. I think we accidentally rely on EGL_KHR_surfaceless_context being supported. So, during platform probing here we setup an EGL context. That calls into here, which doesn't create an EGLSurface, so when we call make_current it does so with the default EGL_NO_SURFACE.

AlanGriffiths commented 1 month ago

Manually selecting the platform will bypass some of the checks that fail above. This might work (from a VT):

miral-app  --platform-display-libs mir:gbm-kms  --platform-rendering-libs mir:gbm-kms 

(It is also possible to configure Frame with these options, but this is simpler to test.)