i.MX8MP Dual Display: Second Output Falls Back to CPU Rendering (Weston + Kiosk Shell)

I’m using i.MX8MP with Weston (kiosk-shell) and two displays:

  • HDMI (native)

  • DSI → HDMI converter

Two UI clients (wxWidgets) run full-screen on each display. Video playback uses GStreamer with hardware decode (vpudec).

Issue:

  • On HDMI, Weston uses GL renderer → smooth playback, low CPU (~4–6%).

  • On DSI→HDMI, Weston falls back to Pixman (CPU) → video is laggy, CPU jumps to ~24–28%.

Question:
How can I force GPU rendering on both outputs?

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


I’d be glad to help! To provide the most accurate guidance for your dual-display GPU rendering setup, could you let me know which OS and version you are using? Also, please run the tdx-info command to get detailed information about your hardware configuration.

You can find more details about the tdx-info command here: Getting Device Information with Tdx-Info | Toradex Developer Center

This information will help me provide specific guidance for enabling GPU rendering on both your native HDMI and DSI→HDMI converter outputs with your i.MX8MP setup.

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Software summary

Bootloader: U-Boot

Kernel version: 5.15.177-6.8.2+git.5a6602cc6c32 #1-TorizonCore SMP PREEMPT Fri Mar 21 16:22:58 UTC 2025
Kernel command line: root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/dc605fdc4ae9783601f1f5366f00606d7bfddf905c880a7954f2fc76ebf85084/0 video=HDMI-A-1:1024x768
Distro name: NAME=“TorizonCore”
Distro version: VERSION_ID=6.8.2-build.30
Distro variant: VARIANT=“Docker”
Hostname: verdin-imx8mp-15404184

Hardware info

HW model: Toradex Verdin iMX8M Plus WB on Yavia Board
Toradex version: 0058 V1.1B
Serial number: 15404184
Processor arch: aarch64

Based on your Verdin iMX8M Plus running TorizonCore 6.8.2, I can help you force GPU rendering on both outputs. The issue you’re experiencing is common with dual-display setups where one output falls back to software rendering.

Multi-Display Configuration for GPU Acceleration

Your Verdin iMX8M Plus has both displays connected to the same DRM interface, which should allow hardware acceleration on both outputs(1). Here’s how to configure this properly:

1. Verify Display Configuration

First, check that both displays are detected on the same DRM interface(1):

ls /sys/class/drm/*/status

You should see both displays listed under the same card (e.g., card0-HDMI-A-1 and card0-HDMI-A-2)(1).

2. Configure Weston for Dual Display with kiosk-shell

Since you’re using kiosk-shell, you can redirect specific applications to different outputs using app-ids(1). Add this configuration to your weston.ini file:

[core]
shell=kiosk-shell.so

[output]
name=HDMI-A-1
app-ids=your-first-app-id

[output]
name=HDMI-A-2
app-ids=your-second-app-id

3. Force Hardware Acceleration

To ensure GPU rendering is used on both outputs, make sure your Weston container is properly configured for hardware acceleration. For Verdin iMX8M Plus, use the weston-imx8 container(1):

docker run -e ACCEPT_FSL_EULA=1 -d --rm --name=weston --net=host --cap-add CAP_SYS_TTY_CONFIG \
    -v /dev:/dev -v /tmp:/tmp -v /run/udev/:/run/udev/ \
    --device-cgroup-rule='c 4:* rmw' --device-cgroup-rule='c 13:* rmw' \
    --device-cgroup-rule='c 199:* rmw' --device-cgroup-rule='c 226:* rmw' \
    torizon/weston-imx8:3 --developer

4. GStreamer Hardware Acceleration

For your video playback with vpudec, ensure you’re using the proper hardware-accelerated pipeline(2):

gst-launch-1.0 filesrc location=<encoded_file_location> ! qtdemux ! h264parse ! vpudec ! waylandsink

5. Troubleshooting GPU Rendering

If the DSI→HDMI output still falls back to Pixman rendering:

  1. Check GPU capabilities: Verify that your Verdin iMX8M Plus supports OpenGL ES acceleration(3)
  2. Monitor GPU usage: Use tools to verify that the GPU is being utilized for both displays
  3. Review Weston logs: Check for any GPU-related errors or fallback messages

The key is ensuring that both displays are properly recognized by the same GPU context and that Weston doesn’t fall back to software rendering for the DSI output.

**


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Description:
I’m working on an i.MX8Plus platform with Weston as the Wayland compositor. I’ve noticed inconsistent behavior in rendering:

  • Case 1: Both displays use GPU rendering → CPU usage stays around 8–12% (expected behavior).

  • Case 2: Both displays fall back to CPU rendering → CPU usage spikes to 30–35%.

This happens randomly without any obvious trigger. The pipeline involves GStreamer for video playback, and glimagesink.
eg: gst-launch-1.0 filesrc location=test.mp4 ! qtdemux name=demux demux.video_0 ! h264parse ! vpudec ! videoconvert ! glimagesink name=vsink

Questions:

  • What could cause this fallback from GPU to CPU rendering?

  • Are there known issues with Weston or GStreamer on i.MX8Plus regarding GPU buffer sharing?

  • Any tips to ensure consistent GPU-based rendering?