feat(draw-sw): add Helium acceleration to draw-sw (#5045)

Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
This commit is contained in:
Gabriel Wang
2023-12-27 03:10:16 +00:00
committed by GitHub
parent 1be21a93b3
commit 6fe14490e2
17 changed files with 2342 additions and 859 deletions
+118 -114
View File
@@ -36,9 +36,10 @@
<repository type="git">https://github.com/lvgl/lvgl.git</repository>
<releases>
<release date="2023-12-12" version="9.0.0-dev1" url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/LVGL.lvgl.9.0.0-dev1.pack">
<release date="2023-12-24" version="9.0.0-dev2" url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/LVGL.lvgl.9.0.0-dev2.pack">
- LVGL 9.0.0-dev
- New Driver Architecture
- Adds Helium support
- Other fixes
</release>
<release date="2023-12-05" version="8.3.11" url="https://github.com/lvgl/lvgl/raw/8194d83226c27c84f12dd51e16f5add9939215a5/env_support/cmsis-pack/LVGL.lvgl.8.3.11.pack">
@@ -265,6 +266,12 @@
<require Cclass="LVGL" Cgroup="Essential"/>
</condition>
<condition id="LVGL-Essential-Assets">
<description>Require LVGL Essential Service and Demo Assets </description>
<require Cclass="LVGL" Cgroup="Essential" />
<require Cclass="LVGL" Cgroup="Demos" Csub="Assets" />
</condition>
<condition id="Arm-2D">
<description>Require Arm-2D Support</description>
<require Cclass="Acceleration" Cgroup="Arm-2D"/>
@@ -542,7 +549,7 @@
<!-- src/themes -->
<file category="sourceC" name="src/themes/lv_theme.c" />
<file category="sourceC" name="src/themes/mono/lv_theme_mono.c" />
<file category="sourceC" name="src/themes/basic/lv_theme_basic.c" />
<file category="sourceC" name="src/themes/simple/lv_theme_simple.c" />
<file category="sourceC" name="src/themes/default/lv_theme_default.c" />
<!-- src/tick -->
@@ -562,7 +569,7 @@
<file category="sourceC" name="src/widgets/checkbox/lv_checkbox.c" />
<file category="sourceC" name="src/widgets/dropdown/lv_dropdown.c" />
<file category="sourceC" name="src/widgets/image/lv_image.c" />
<file category="sourceC" name="src/widgets/imgbtn/lv_imgbtn.c" />
<file category="sourceC" name="src/widgets/imagebutton/lv_imagebutton.c" />
<file category="sourceC" name="src/widgets/keyboard/lv_keyboard.c" />
<file category="sourceC" name="src/widgets/label/lv_label.c" />
<file category="sourceC" name="src/widgets/led/lv_led.c" />
@@ -590,6 +597,7 @@
<!-- src/others -->
<file category="sourceC" name="src/others/sysmon/lv_sysmon.c" />
<file category="sourceC" name="src/others/observer/lv_observer.c" />
<!-- src/demons -->
<file category="sourceC" name="demos/lv_demos.c" />
@@ -598,7 +606,7 @@
<file category="sourceC" name="src/osal/lv_os_none.c"/>
<!-- general -->
<file category="preIncludeGlobal" name="lv_conf_cmsis.h" attr="config" version="2.0.2" />
<file category="preIncludeGlobal" name="lv_conf_cmsis.h" attr="config" version="2.1.0" />
<file category="sourceC" name="lv_cmsis_pack.c" />
<file category="header" name="lvgl.h" />
<file category="doc" name="README.md"/>
@@ -1376,21 +1384,6 @@
</component>
<component Cgroup="Libraries and Others" Csub="Observer" condition="LVGL-Essential">
<description>Add an observer pattern implementation</description>
<files>
<!-- src/others/observer -->
<file category="sourceC" name="src/others/observer/lv_observer.c" />
</files>
<RTE_Components_h>
/*! \brief enable an observer pattern implementation*/
#define LV_USE_OBSERVER 1
</RTE_Components_h>
</component>
<component Cgroup="Libraries and Others" Csub="Snapshot" condition="LVGL-Essential">
<description>Add the API to take snapshot for object</description>
<files>
@@ -1406,13 +1399,10 @@
</component>
<component Cgroup="Demos" Csub="Benchmark" condition="LVGL-Essential">
<component Cgroup="Demos" Csub="Assets" condition="LVGL-Essential">
<description>Add the official benchmark.</description>
<files>
<!-- demos/benchmark -->
<file category="sourceC" name="demos/benchmark/lv_demo_benchmark.c" />
<file category="sourceC" name="demos/benchmark/assets/img_benchmark_cogwheel_alpha256.c" />
<file category="sourceC" name="demos/benchmark/assets/img_benchmark_cogwheel_argb.c" />
<file category="sourceC" name="demos/benchmark/assets/img_benchmark_cogwheel_indexed16.c" />
@@ -1421,60 +1411,8 @@
<file category="sourceC" name="demos/benchmark/assets/lv_font_benchmark_montserrat_12_compr_az.c.c" />
<file category="sourceC" name="demos/benchmark/assets/lv_font_benchmark_montserrat_16_compr_az.c.c" />
<file category="sourceC" name="demos/benchmark/assets/lv_font_benchmark_montserrat_28_compr_az.c.c" />
<file category="doc" name="demos/benchmark/README.md" />
</files>
<RTE_Components_h>
/*! \brief enable demo:bencharmk */
#define LV_USE_DEMO_BENCHMARK 1
</RTE_Components_h>
</component>
<component Cgroup="Demos" Csub="Flex Layout" condition="LVGL-Essential">
<description>Add the Flex layout demo</description>
<files>
<!-- demos/flex_layout -->
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_ctrl_pad.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_flex_loader.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_main.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_view.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_view_child_node.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_view_ctrl_pad.c" />
</files>
<RTE_Components_h>
/*! \brief enable the Flex layout demo */
#define LV_USE_DEMO_FLEX_LAYOUT 1
</RTE_Components_h>
</component>
<component Cgroup="Demos" Csub="Keypad Encoder" condition="LVGL-Essential">
<description>Add the demonstrate the usage of encoder and keyboard</description>
<files>
<!-- demos/keypad_encoder -->
<file category="sourceC" name="demos/keypad_encoder/lv_demo_keypad_encoder.c" />
<file category="doc" name="demos/keypad_encoder/README.md" />
</files>
<RTE_Components_h>
/*! \brief enable the demonstrate the usage of encoder and keyboard */
#define LV_USE_DEMO_KEYPAD_AND_ENCODER 1
</RTE_Components_h>
</component>
<component Cgroup="Demos" Csub="Multi-Language" condition="LVGL-Essential">
<description>Add the Smart-phone like multi-language demo.</description>
<files>
<!-- demos/multilang -->
<file category="sourceC" name="demos/multilang/lv_demo_multilang.c" />
<file category="sourceC" name="demos/multilang/assets/img_multilang_like.c" />
<file category="sourceC" name="demos/multilang/assets/avatars/img_multilang_avatar_1.c" />
<file category="sourceC" name="demos/multilang/assets/avatars/img_multilang_avatar_2.c" />
@@ -1516,26 +1454,8 @@
<file category="sourceC" name="demos/multilang/assets/fonts/font_multilang_large.c" />
<file category="sourceC" name="demos/multilang/assets/fonts/font_multilang_small.c" />
<file category="doc" name="demos/multilang/README.md" />
</files>
<RTE_Components_h>
/*! \brief enable the Smart-phone like multi-language demo */
#define LV_USE_DEMO_MULTILANG 1
</RTE_Components_h>
</component>
<component Cgroup="Demos" Csub="Music Player" condition="LVGL-Essential">
<description>Add the music player demo</description>
<files>
<!-- demos/music -->
<file category="sourceC" name="demos/music/lv_demo_music.c" />
<file category="sourceC" name="demos/music/lv_demo_music_list.c" />
<file category="sourceC" name="demos/music/lv_demo_music_main.c" />
<file category="sourceC" name="demos/music/assets/img_lv_demo_music_wave_top_large.c" />
<file category="sourceC" name="demos/music/assets/img_lv_demo_music_wave_top.c" />
<file category="sourceC" name="demos/music/assets/img_lv_demo_music_wave_bottom_large.c" />
@@ -1580,7 +1500,105 @@
<file category="sourceC" name="demos/music/assets/img_lv_demo_music_btn_list_pause_large.c" />
<file category="sourceC" name="demos/music/assets/img_lv_demo_music_btn_list_pause.c" />
<file category="sourceC" name="demos/music/assets/img_lv_demo_music_btn_corner_large.c" />
<!-- demos/widgets -->
<file category="sourceC" name="demos/widgets/assets/img_clothes.c" />
<file category="sourceC" name="demos/widgets/assets/img_demo_widgets_avatar.c" />
<file category="sourceC" name="demos/widgets/assets/img_demo_widgets_needle.c" />
<file category="sourceC" name="demos/widgets/assets/img_lvgl_logo.c" />
<!-- demos/transform -->
<file category="sourceC" name="demos/transform/assets/img_transform_avatar_15.c" />
<!-- demos/vector_graphic -->
<file category="sourceC" name="demos/vector_graphic/assets/img_demo_vector_avatar.c" />
<!-- demos/render -->
<file category="sourceC" name="demos/render/assets/img_render_arc_bg.c" />
<file category="sourceC" name="demos/render/assets/img_render_lvgl_logo_argb8888.c" />
<file category="sourceC" name="demos/render/assets/img_render_lvgl_logo_rgb565.c" />
<file category="sourceC" name="demos/render/assets/img_render_lvgl_logo_rgb888.c" />
<file category="sourceC" name="demos/render/assets/img_render_lvgl_logo_xrgb8888.c" />
</files>
</component>
<component Cgroup="Demos" Csub="Benchmark" condition="LVGL-Essential-Assets">
<description>Add the official benchmark.</description>
<files>
<!-- demos/benchmark -->
<file category="sourceC" name="demos/benchmark/lv_demo_benchmark.c" />
<file category="doc" name="demos/benchmark/README.md" />
</files>
<RTE_Components_h>
/*! \brief enable demo:bencharmk */
#define LV_USE_DEMO_BENCHMARK 1
</RTE_Components_h>
</component>
<component Cgroup="Demos" Csub="Flex Layout" condition="LVGL-Essential-Assets">
<description>Add the Flex layout demo</description>
<files>
<!-- demos/flex_layout -->
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_ctrl_pad.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_flex_loader.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_main.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_view.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_view_child_node.c" />
<file category="sourceC" name="demos/flex_layout/lv_demo_flex_layout_view_ctrl_pad.c" />
</files>
<RTE_Components_h>
/*! \brief enable the Flex layout demo */
#define LV_USE_DEMO_FLEX_LAYOUT 1
</RTE_Components_h>
</component>
<component Cgroup="Demos" Csub="Keypad Encoder" condition="LVGL-Essential-Assets">
<description>Add the demonstrate the usage of encoder and keyboard</description>
<files>
<!-- demos/keypad_encoder -->
<file category="sourceC" name="demos/keypad_encoder/lv_demo_keypad_encoder.c" />
<file category="doc" name="demos/keypad_encoder/README.md" />
</files>
<RTE_Components_h>
/*! \brief enable the demonstrate the usage of encoder and keyboard */
#define LV_USE_DEMO_KEYPAD_AND_ENCODER 1
</RTE_Components_h>
</component>
<component Cgroup="Demos" Csub="Multi-Language" condition="LVGL-Essential-Assets">
<description>Add the Smart-phone like multi-language demo.</description>
<files>
<!-- demos/multilang -->
<file category="sourceC" name="demos/multilang/lv_demo_multilang.c" />
<file category="doc" name="demos/multilang/README.md" />
</files>
<RTE_Components_h>
/*! \brief enable the Smart-phone like multi-language demo */
#define LV_USE_DEMO_MULTILANG 1
</RTE_Components_h>
</component>
<component Cgroup="Demos" Csub="Music Player" condition="LVGL-Essential-Assets">
<description>Add the music player demo</description>
<files>
<!-- demos/music -->
<file category="sourceC" name="demos/music/lv_demo_music.c" />
<file category="sourceC" name="demos/music/lv_demo_music_list.c" />
<file category="sourceC" name="demos/music/lv_demo_music_main.c" />
<file category="doc" name="demos/music/README.md" />
</files>
@@ -1592,7 +1610,7 @@
</component>
<component Cgroup="Demos" Csub="Scroll" condition="LVGL-Essential">
<component Cgroup="Demos" Csub="Scroll" condition="LVGL-Essential-Assets">
<description>Add the demonstration for scroll settings</description>
<files>
<!-- demos/scroll -->
@@ -1607,7 +1625,7 @@
</component>
<component Cgroup="Demos" Csub="Stress Test" condition="LVGL-Essential">
<component Cgroup="Demos" Csub="Stress Test" condition="LVGL-Essential-Assets">
<description>Add the Stress test for LVGL</description>
<files>
<!-- demos/stress -->
@@ -1622,12 +1640,11 @@
</component>
<component Cgroup="Demos" Csub="Widget Transform" condition="LVGL-Essential">
<component Cgroup="Demos" Csub="Widget Transform" condition="LVGL-Essential-Assets">
<description>Add the Widget transformation demo</description>
<files>
<!-- demos/transform -->
<file category="sourceC" name="demos/transform/lv_demo_transform.c" />
<file category="sourceC" name="demos/transform/assets/img_transform_avatar_15.c" />
</files>
<RTE_Components_h>
@@ -1638,12 +1655,11 @@
</component>
<component Cgroup="Demos" Csub="Vector Graphic" condition="LVGL-Essential">
<component Cgroup="Demos" Csub="Vector Graphic" condition="LVGL-Essential-Assets">
<description>Add the Vector graphic demo</description>
<files>
<!-- demos/vector_graphic -->
<file category="sourceC" name="demos/vector_graphic/lv_demo_vector_graphic.c" />
<file category="sourceC" name="demos/vector_graphic/assets/img_demo_vector_avatar.c" />
</files>
<RTE_Components_h>
@@ -1654,16 +1670,11 @@
</component>
<component Cgroup="Demos" Csub="Widgets" condition="LVGL-Essential">
<component Cgroup="Demos" Csub="Widgets" condition="LVGL-Essential-Assets">
<description>Add the demo:widgets</description>
<files>
<!-- demos/widgets -->
<file category="sourceC" name="demos/widgets/lv_demo_widgets.c" />
<file category="sourceC" name="demos/widgets/assets/img_clothes.c" />
<file category="sourceC" name="demos/widgets/assets/img_demo_widgets_avatar.c" />
<file category="sourceC" name="demos/widgets/assets/img_demo_widgets_needle.c" />
<file category="sourceC" name="demos/widgets/assets/img_lvgl_logo.c" />
</files>
<RTE_Components_h>
@@ -1674,18 +1685,11 @@
</component>
<component Cgroup="Demos" Csub="Render Test" condition="LVGL-Essential">
<component Cgroup="Demos" Csub="Render Test" condition="LVGL-Essential-Assets">
<description>Add the Render test for each primitives. Requires at least 480x272 display</description>
<files>
<!-- demos/render -->
<file category="sourceC" name="demos/render/lv_demo_render.c" />
<file category="sourceC" name="demos/render/assets/img_render_arc_bg.c" />
<file category="sourceC" name="demos/render/assets/img_render_lvgl_logo_argb8888.c" />
<file category="sourceC" name="demos/render/assets/img_render_lvgl_logo_rgb565.c" />
<file category="sourceC" name="demos/render/assets/img_render_lvgl_logo_rgb888.c" />
<file category="sourceC" name="demos/render/assets/img_render_lvgl_logo_xrgb8888.c" />
<file category="doc" name="demos/render/README.md" />
</files>
+2 -2
View File
@@ -2,8 +2,8 @@
<index schemaVersion="1.0.0" xs:noNamespaceSchemaLocation="PackIndex.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
<vendor>LVGL</vendor>
<url>https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/</url>
<timestamp>2023-12-12</timestamp>
<timestamp>2023-12-24</timestamp>
<pindex>
<pdsc url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/" vendor="LVGL" name="lvgl" version="9.0.0-dev1"/>
<pdsc url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/" vendor="LVGL" name="lvgl" version="9.0.0-dev2"/>
</pindex>
</index>
+71 -4
View File
@@ -40,39 +40,66 @@ remove the misleading guide above this code segment.
4. Remove macro definitions for
- LV_USE_DEMO_WIDGETS
- LV_USE_DEMO_BENCHMARK
- LV_USE_IME_PINYIN
- LV_USE_OS
- LV_USE_FILE_EXPLORER
- LV_USE_DEMO_WIDGETS
- LV_USE_DEMO_KEYPAD_AND_ENCODER
- LV_USE_DEMO_BENCHMARK
- LV_USE_DEMO_RENDER
- LV_USE_DEMO_STRESS
- LV_USE_DEMO_MUSIC
- LV_USE_DEMO_FLEX_LAYOUT
- LV_USE_DEMO_MULTILANG
- LV_USE_DEMO_TRANSFORM
- LV_USE_DEMO_SCROLL
- LV_USE_DEMO_VECTOR_GRAPHIC
- LV_USE_DRAW_VGLITE
- LV_USE_DRAW_PXP
- LV_USE_DRAW_SDL
- LV_USE_DRAW_ARM2D
- LV_USE_SNAPSHOT
- LV_USE_MONKEY
- LV_USE_GRIDNAV
- LV_USE_FRAGMENT
- LV_USE_IMGFONT
- LV_USE_OBSERVER
5. Update `LV_LOG_PRINTF` to `1` and `LV_LOG_LEVEL` to `LV_LOG_LEVEL_USER`
6. Set `LV_FONT_MONTSERRAT_12` and `LV_FONT_MONTSERRAT_16` to `1` (So Widgets and Benchmark can be compiled correctly, this is for improving the out of box experience.)
6. Set `LV_FONT_MONTSERRAT_12`, `LV_FONT_MONTSERRAT_24` and `LV_FONT_MONTSERRAT_16` to `1` (So Widgets and Benchmark can be compiled correctly, this is for improving the out of box experience.)
7. Update macro `LV_ATTRIBUTE_MEM_ALIGN` and `LV_ATTRIBUTE_MEM_ALIGN_SIZE` to force a WORD alignment.
```c
#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 4
#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1
#define LV_DRAW_BUF_STRIDE_ALIGN 4
#define LV_ATTRIBUTE_MEM_ALIGN __attribute__((aligned(4)))
```
@@ -130,7 +157,47 @@ Make sure `LV_MEM_SIZE` is no less than `(256*1024U)`.
```
11. rename '**lv_conf_template.h**' to '**lv_conf_cmsis.h**'.
11. Add the following code to `HAL SETTINGS`:
```c
/*customize tick-get */
#if defined(__PERF_COUNTER__) && __PERF_COUNTER__
#define LV_GLOBAL_INIT(__GLOBAL_PTR) \
do { \
lv_global_init((lv_global_t *)(__GLOBAL_PTR)); \
extern uint32_t perfc_tick_get(void); \
(__GLOBAL_PTR)->tick_state.tick_get_cb = perfc_tick_get; \
} while(0)
#endif
```
12. Replace the macro definition:
```c
#define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE
```
with:
```c
#if !defined(LV_USE_DRAW_SW_ASM) && defined(RTE_Acceleration_Arm_2D)
/*turn-on helium acceleration when Arm-2D and the Helium-powered device are detected */
#if defined(__ARM_FEATURE_MVE) && __ARM_FEATURE_MVE
#define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_HELIUM
#define LV_USE_DRAW_ARM2D 1
#endif
#endif
#ifndef LV_USE_DRAW_SW_ASM
#define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE
#endif
```
13. rename '**lv_conf_template.h**' to '**lv_conf_cmsis.h**'.
+1 -7
View File
@@ -126,14 +126,8 @@ _ARMABI time_t time(time_t * time)
* Get the elapsed milliseconds since start up from perf_counter
* @return the elapsed milliseconds
*/
uint32_t $Sub$$lv_tick_get(void)
uint32_t perfc_tick_get(void)
{
lv_tick_state_t * state_p = &state;
if (state_p->tick_get_cb){
return state_p->tick_get_cb();
}
return (uint32_t)get_system_ms();
}
+24 -2
View File
@@ -61,12 +61,22 @@
*(Not so important, you can adjust it to modify default sizes and spaces)*/
#define LV_DPI_DEF 130 /*[px/inch]*/
/*customize tick-get */
#if defined(__PERF_COUNTER__) && __PERF_COUNTER__
#define LV_GLOBAL_INIT(__GLOBAL_PTR) \
do { \
lv_global_init((lv_global_t *)(__GLOBAL_PTR)); \
extern uint32_t perfc_tick_get(void); \
(__GLOBAL_PTR)->tick_state.tick_get_cb = perfc_tick_get; \
} while(0)
#endif
/*========================
* RENDERING CONFIGURATION
*========================*/
/*Align the stride of all layers and images to this bytes*/
#define LV_DRAW_BUF_STRIDE_ALIGN 4
#define LV_DRAW_BUF_STRIDE_ALIGN 1
/*Align the start address of draw_buf addresses to this bytes*/
#define LV_DRAW_BUF_ALIGN 4
@@ -103,7 +113,17 @@
#define LV_DRAW_SW_CIRCLE_CACHE_SIZE 4
#endif
#define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE
#if !defined(LV_USE_DRAW_SW_ASM) && defined(RTE_Acceleration_Arm_2D)
/*turn-on helium acceleration when Arm-2D and the Helium-powered device are detected */
#if defined(__ARM_FEATURE_MVE) && __ARM_FEATURE_MVE
#define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_HELIUM
#define LV_USE_DRAW_ARM2D 1
#endif
#endif
#ifndef LV_USE_DRAW_SW_ASM
#define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE
#endif
#if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_CUSTOM
#define LV_DRAW_SW_ASM_CUSTOM_INCLUDE ""
@@ -680,6 +700,8 @@
#define LV_IMGFONT_USE_IMAGE_CACHE_HEADER 0
#endif
/*1: Enable an observer pattern implementation*/
#define LV_USE_OBSERVER 1
/*1: Enable Pinyin input method*/
/*Requires: lv_keyboard*/