60 views
in System Integration by

I am running an Embedded Wizard application on an STM32MP1 platform with OpenGL ES 2.0 and DRM. The application initializes fine, but when I enable EW_PERFORM_FULLSCREEN_UPDATE = 1, the performance drops significantly, making the UI very slow.

I also noticed the following warning during startup:

root@stm32mp1:/# ./EmbeddedWizard-Linux-OpenGL-DRM
Using drm device node '/dev/dri/card0'!
Display interface 'DSI_0' detected.

Available output modes:
  720 x 1280 @ 50Hz (pixel clock:   54000kHz) (preferred mode)

Preferred display mode requested

Selected display mode:  720x1280@50Hz (pixel clock: 54000kHz)

 

WARNING: egl swap behaviour - buffer preservation not supported (egl error: 0x3009)
Use macro EW_PERFORM_FULLSCREEN_UPDATE = 1

Initialize Display...                        [OK]
Initialize Touch Driver...                   [OK]
Initialize Memory Manager...                 [OK]
Initialize Graphics Engine...                [OK]
Initialize Invocation Queue...               [OK]
Thread Started: Invalid argument
Create Embedded Wizard Root Object...        [OK]
Create Embedded Wizard Viewport...           [OK]
Starting Embedded Wizard main loop - press <p> to shutdown application...
---------------------------------------------
Embedded Wizard System Info                  
---------------------------------------------
Target system                                STM32MP1 (OpenGL ES 2.0/EGL/DRM)      
Color format                                 RGBA8888      
Build Environment version                    V13.03.00.00      
Runtime Environment (RTE) version            V13.03
Graphics Engine (GFX) version                V13.03
MemoryPool address                           0x001A47B0  
MemoryPool size                              33554432 bytes
Display interface                            DSI      
Display size                                 720 x 1280
Viewport size                                720 x 1228
Viewport rotation                            270      
EwScreenSize                                 1024 x 600
Graphics accelerator                         OpenGL ES 2.0      
Warp function support                        enabled      
Vector graphics support                      enabled      
Gradients support                            enabled      
Blur support                                 enabled      
Mask support                                 enabled      
Tint support                                 enabled      
Bidirectional text support                   enabled      
Compression support                          enabled      
Index8 bitmap resource support               enabled      
RGB565 bitmap resource support               enabled      
Native bitmap resource support               enabled      
Max surface cache size                       8388608 bytes
Glyph cache size                             512 x 512
Max issue tasks                              512      
Operating system                             Embedded Linux      
Toolchain                                    GCC      
C-Compiler version                           13.3.0      
Build date and time                          Mar 17 2025, 12:02:50  
---------------------------------------------
Shutting down Application...                 [OK]
Deinitialize Invocation Queue...             [OK]
Deinitialize Graphics Engine...              [OK]
Deinitialize Touch Driver...                 [OK]
Deinitialize Display Driver...               [OK]

 

I have tried adding multiple graphical packages into my build layers, but the issue persists.

Here are my questions:

  1. Why does enabling EW_PERFORM_FULLSCREEN_UPDATE slow down my application?
  2. How can I improve the rendering performance while keeping smooth updates?
  3. Is there a way to enable buffer preservation (EGL_BUFFER_PRESERVED) on STM32MP1?
  4. Would reducing the display resolution or modifying EGL configurations help?

Any insights or suggestions on optimizing performance would be greatly appreciated!

1 Answer

0 votes
by

Hello Embedded Wizard user,

Regarding your questions:

  1. Why does enabling EW_PERFORM_FULLSCREEN_UPDATE slow down my application?
    I assume, that this is because of higher memory load since whole graphical layer has to be rewritten on every frame in case of EW_PERFORM_FULLSCREEN_UPDATE=1
     
  2. How can I improve the rendering performance while keeping smooth updates?
    I think we have to avoid the FULLSCREEN_UPDATE mode.
    According to my verification EW_PERFORM_FULLSCREEN_UPDATE=1 is not needed on STM32MP1.
     
  3. Is there a way to enable buffer preservation (EGL_BUFFER_PRESERVED) on STM32MP1?
    Using the original Embedded Wizard STM32MP1-OpenGL-DRM Build Environment enabling buffer preservation worked as expected (without the mentioned warning).
    For my verification I used the system image version 'Linux stm32mp1 6.1.82' and the SDK 'Distro Version: 4.2.1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21'.
    Hardware platform was STM32MP157F-DK2.
    Maybe the behaviour is different on different SDK/image releases.
     
  4. Would reducing the display resolution or modifying EGL configurations help?
    Reducing display resolution will of course reduce the memory load and therefore increase the possible max number of frames per second.
    Regarding modifying EGL configurations currently I have no other recommendations beside enabling EGL_BUFFER_PRESERVED.
Kind regards,
Martin

Embedded Wizard Website | Privacy Policy | Imprint

...