Skip to content

feat(lvgl_port_simd): RGB888 image blend to RGB888#553

Merged
peter-marcisovsky merged 1 commit intomasterfrom
feat/lvgl_port_simd_rgb888_memcpy
Apr 8, 2025
Merged

feat(lvgl_port_simd): RGB888 image blend to RGB888#553
peter-marcisovsky merged 1 commit intomasterfrom
feat/lvgl_port_simd_rgb888_memcpy

Conversation

@peter-marcisovsky
Copy link
Copy Markdown
Collaborator

@peter-marcisovsky peter-marcisovsky commented Mar 31, 2025

This MR adds SIMD support for LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888
Which is basically a highly optimized memcpy for memory arrays with RGB888 color format

ESP-BSP Pull Request checklist

Note: For new BSPs create a PR with this link.

  • Version of modified component bumped
  • CI passing

Change description

  • esp32s3 SIMD assembly implementation of the RGB888 to RGB888 memcpy
  • esp32 assembly implementation of the RGB888 to RGB888 memcpy
  • Functionality and benchmark tests
  • Updated README with achieved benchmark results

@peter-marcisovsky peter-marcisovsky self-assigned this Mar 31, 2025
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 31, 2025

Test Results

 19 files  19 suites   17m 42s ⏱️
 95 tests 34 ✅  61 💤 0 ❌
646 runs  34 ✅ 612 💤 0 ❌

Results for commit 2c7e658.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 1, 2025

Benchmark for BOARD esp32_p4_function_ev_board

DATE: 08.04.2025 06:12

LVGL version: 9.2.2

Name Avg. CPU Avg. FPS Avg. time render time flush time
Empty screen 61% 88 5 (-1) 5 (-1) 0
Moving wallpaper 89% (-1) 71 (+1) 11 9 2
Single rectangle 23% 89 (+1) 1 1 0
Multiple rectangles 44% 98 6 4 2
Multiple RGB images 93% 52 15 13 2
Multiple ARGB images 98% 24 34 (-1) 32 2 (-1)
Rotated ARGB images 99% 3 249 (-1) 248 1 (-1)
Multiple labels 99% 32 26 (-1) 24 (-1) 2
Screen sized text 7% 88 4 4 0
Multiple arcs 91% (-1) 39 20 (-1) 18 (-1) 2
Containers 51% (+3) 88 5 5 0
Containers with overlay 98% 17 50 (+1) 49 (+2) 1 (-1)
Containers with opa 73% (+3) 77 9 9 0
Containers with opa_layer 97% 11 81 79 (-1) 2 (+1)
Containers with scrolling 99% 18 51 49 2
Widgets demo 99% 16 55 53 (-1) 2 (+1)
All scenes avg. 76% 50 38 37 1

Benchmark for BOARD esp32_s3_eye

DATE: 08.04.2025 06:15

LVGL version: 9.2.2

Name Avg. CPU Avg. FPS Avg. time render time flush time
Empty screen 92% 60 13 2 11
Moving wallpaper 63% (-1) 75 9 4 5
Single rectangle 14% 89 0 0 0
Multiple rectangles 82% (-1) 74 10 (-1) 3 (-1) 7
Multiple RGB images 20% (+1) 91 (+1) 0 0 0
Multiple ARGB images 17% (+1) 88 3 (+1) 3 (+1) 0
Rotated ARGB images 71% (+2) 60 (-3) 16 (+1) 14 2 (+1)
Multiple labels 17% 89 1 0 1
Screen sized text 92% 36 25 (+1) 14 11 (+1)
Multiple arcs 11% (+1) 89 0 0 0
Containers 12% 91 4 4 0
Containers with overlay 90% 41 21 (+1) 10 11 (+1)
Containers with opa 29% (+2) 92 (+1) 6 (+1) 6 (+1) 0
Containers with opa_layer 31% (+1) 81 (-1) 11 (-1) 10 (-1) 1
Containers with scrolling 97% (+1) 40 24 (+1) 13 11 (+1)
Widgets demo 95% 44 8 8 0
All scenes avg. 52% (+1) 71 8 5 3

Benchmark for BOARD esp32_s3_lcd_ev_board_2

DATE: 08.04.2025 06:22

LVGL version: 9.2.2

Name Avg. CPU Avg. FPS Avg. time render time flush time
Empty screen 88% 27 30 19 11
Moving wallpaper 100% 14 64 52 12
Single rectangle 99% 59 13 2 11
Multiple rectangles 100% 30 30 20 10
Multiple RGB images 99% 19 44 (-1) 32 (-1) 12
Multiple ARGB images 100% 16 53 46 7
Rotated ARGB images 100% 3 264 260 4
Multiple labels 99% 29 29 16 13
Screen sized text 99% 11 78 66 12
Multiple arcs 99% 58 13 5 8
Containers 95% 32 27 20 7
Containers with overlay 99% 12 78 68 10
Containers with opa 99% 25 33 25 8
Containers with opa_layer 99% 11 81 74 7
Containers with scrolling 99% 14 64 55 9
Widgets demo 99% 11 67 58 9
All scenes avg. 98% 23 60 51 9

Benchmark for BOARD esp32_s3_lcd_ev_board

DATE: 08.04.2025 06:20

LVGL version: 9.2.2

Name Avg. CPU Avg. FPS Avg. time render time flush time
Empty screen 98% 16 53 29 24
Moving wallpaper 99% 10 86 80 6
Single rectangle 99% 34 25 3 22
Multiple rectangles 99% 17 52 30 22
Multiple RGB images 99% 11 80 58 22
Multiple ARGB images 100% 10 86 (+2) 79 7 (+2)
Rotated ARGB images 100% 2 334 (+1) 317 (+1) 17
Multiple labels 100% 16 50 (-1) 30 (-1) 20
Screen sized text 99% 8 110 96 14
Multiple arcs 99% (-1) 17 50 45 5
Containers 100% (+1) 10 83 (+1) 71 (-1) 12 (+2)
Containers with overlay 99% 7 111 (+1) 99 (-1) 1 (-9)
Containers with opa 100% 8 103 (-1) 87 16 (-1)
Containers with opa_layer 100% 4 190 179 11
Containers with scrolling 100% (+1) 8 109 (-1) 99 (-1) 10
Widgets demo 99% 7 98 (+1) 81 (+1) 17
All scenes avg. 99% 11 100 86 14

Benchmark for BOARD esp_box_3

DATE: 08.04.2025 06:17

LVGL version: 9.2.2

Name Avg. CPU Avg. FPS Avg. time render time flush time
Empty screen 94% (-2) 26 34 (+1) 3 31 (+1)
Moving wallpaper 96% (-3) 25 (-1) 35 4 (-1) 31 (+1)
Single rectangle 7% (-12) 94 (+4) 0 0 0
Multiple rectangles 95% (-2) 50 16 3 (-1) 13 (+1)
Multiple RGB images 25% (-7) 89 (-1) 1 (-1) 0 1 (-1)
Multiple ARGB images 35% (-15) 89 (-4) 5 2 (-1) 3 (+1)
Rotated ARGB images 91% (-9) 21 (-1) 42 28 14
Multiple labels 8% (-32) 99 0 0 0
Screen sized text 94% (-2) 16 55 (-1) 24 (-1) 31
Multiple arcs 15% (-13) 93 (+1) 0 0 0
Containers 36% (-6) 74 (-4) 16 4 (-1) 12 (+1)
Containers with overlay 90% (-9) 21 44 14 (+1) 30 (-1)
Containers with opa 52% (+3) 69 (-5) 18 (+2) 6 (+1) 12 (+1)
Containers with opa_layer 57% (-6) 56 27 14 13
Containers with scrolling 97% (-1) 20 45 (+1) 14 31 (+1)
Widgets demo 96% (-3) 25 (-1) 24 10 14
All scenes avg. 61% (-8) 54 21 (-1) 7 (-1) 14

Benchmark for BOARD m5dial

DATE: 08.04.2025 06:26

LVGL version: 9.2.2

Name Avg. CPU Avg. FPS Avg. time render time flush time
Empty screen 96% 38 22 4 18
Moving wallpaper 95% 40 23 8 15
Single rectangle 30% (-1) 93 (+1) 0 (-1) 0 (-1) 0
Multiple rectangles 91% (+1) 65 (+1) 12 (-1) 8 4 (-1)
Multiple RGB images 31% (-3) 92 1 1 0
Multiple ARGB images 30% (-2) 90 (-3) 3 3 0
Rotated ARGB images 73% (-8) 69 (+13) 14 (-3) 14 (-3) 0
Multiple labels 26% (-2) 96 (-1) 0 0 0
Screen sized text 95% (-4) 27 (-1) 34 (+2) 32 (+1) 2 (+1)
Multiple arcs 20% (-5) 88 (-1) 0 0 0
Containers 36% (-1) 83 13 8 (-1) 5 (+1)
Containers with overlay 92% (-2) 36 24 19 5
Containers with opa 46% (+3) 80 15 11 4
Containers with opa_layer 46% 74 (-2) 17 14 3
Containers with scrolling 98% (-1) 33 26 (+1) 22 (+1) 4
Widgets demo 99% 29 18 16 2
All scenes avg. 62% (-2) 64 13 10 3

Benchmark for BOARD m5stack_core_s3

DATE: 08.04.2025 06:30

LVGL version: 9.2.2

Name Avg. CPU Avg. FPS Avg. time render time flush time
Empty screen 92% 29 30 5 25
Moving wallpaper 94% 30 29 9 20
Single rectangle 19% 93 0 0 0
Multiple rectangles 92% 57 14 5 9
Multiple RGB images 28% 89 2 1 1
Multiple ARGB images 42% 91 4 4 0
Rotated ARGB images 96% 21 42 33 9
Multiple labels 15% 98 0 0 0
Screen sized text 92% 24 37 (+1) 33 4 (+1)
Multiple arcs 28% 94 1 1 0
Containers 36% 75 14 7 7
Containers with overlay 94% 29 30 18 12
Containers with opa 43% 73 17 10 7
Containers with opa_layer 55% 57 25 20 5
Containers with scrolling 96% 27 33 22 11
Widgets demo 97% (+1) 28 19 (-1) 15 (-1) 4
All scenes avg. 63% 57 18 11 7

Benchmark for BOARD m5stack_core_s3_se

DATE: 08.04.2025 06:32

LVGL version: 9.2.2

Name Avg. CPU Avg. FPS Avg. time render time flush time
Empty screen 92% 29 30 5 25
Moving wallpaper 95% 30 29 9 (+1) 20 (-1)
Single rectangle 19% (-1) 93 0 0 0
Multiple rectangles 92% 57 14 5 9
Multiple RGB images 31% (+2) 91 (-2) 2 1 1
Multiple ARGB images 38% (+1) 92 (-1) 3 3 0
Rotated ARGB images 96% (+5) 21 41 32 9
Multiple labels 15% (-7) 98 0 0 0
Screen sized text 92% (-2) 24 36 (-1) 33 (-1) 3
Multiple arcs 28% (+3) 94 (-2) 1 (+1) 1 (+1) 0
Containers 36% 75 (+1) 14 (-1) 7 (-1) 7
Containers with overlay 94% (+2) 29 30 18 12
Containers with opa 43% 73 (-1) 17 (+1) 10 (+1) 7
Containers with opa_layer 55% (-2) 57 (-3) 25 20 (+1) 5 (-1)
Containers with scrolling 96% (+2) 27 33 22 11
Widgets demo 96% 28 19 15 4
All scenes avg. 63% 57 18 11 7

@peter-marcisovsky peter-marcisovsky force-pushed the feat/lvgl_port_simd_rgb888_memcpy branch from 6c85438 to 428a65f Compare April 1, 2025 09:10
@peter-marcisovsky peter-marcisovsky marked this pull request as ready for review April 1, 2025 10:55
Copy link
Copy Markdown
Collaborator

@tore-espressif tore-espressif left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Comment thread components/esp_lvgl_port/test_apps/simd/README.md Outdated
@peter-marcisovsky peter-marcisovsky force-pushed the feat/lvgl_port_simd_rgb888_memcpy branch 2 times, most recently from 13ce660 to cbd4229 Compare April 7, 2025 23:08
    - RGB888 blend to RGB888 (optimized memcpy for RGB888 type)
    - esp32s3 assembly implementation using SIMD instructions
    - esp32 assembly fallback
@peter-marcisovsky peter-marcisovsky force-pushed the feat/lvgl_port_simd_rgb888_memcpy branch from cbd4229 to 2c7e658 Compare April 8, 2025 05:12
Copy link
Copy Markdown
Collaborator

@espzav espzav left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@peter-marcisovsky peter-marcisovsky merged commit 23d3a43 into master Apr 8, 2025
39 checks passed
@peter-marcisovsky peter-marcisovsky deleted the feat/lvgl_port_simd_rgb888_memcpy branch April 8, 2025 07:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants