mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-21 22:52:46 +08:00
feat(arm-2d): upgrade to v1.1.6 and slightly improve the performance
This commit is contained in:
committed by
Gabor Kiss-Vamosi
parent
f292ddde34
commit
03871ad18d
@@ -17,6 +17,7 @@ extern "C" {
|
||||
*********************/
|
||||
|
||||
#include "../../../lv_conf_internal.h"
|
||||
#include "../../../misc/lv_area_private.h"
|
||||
|
||||
#if LV_USE_DRAW_ARM2D_SYNC
|
||||
|
||||
|
||||
@@ -29,6 +29,12 @@ extern "C" {
|
||||
#elif defined(__IS_COMPILER_GCC__)
|
||||
#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers"
|
||||
#endif
|
||||
|
||||
|
||||
#if ARM_2D_VERSION < 10106ul
|
||||
#error Please upgrade to Arm-2D v1.1.6 or above
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
@@ -301,20 +307,15 @@ static inline lv_result_t lv_rgb565_blend_normal_to_rgb565_mix_mask_opa_arm2d(lv
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint16_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint16_t);
|
||||
|
||||
__arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
0x00,
|
||||
255 - dsc->opa);
|
||||
|
||||
__arm_2d_impl_rgb565_src_msk_copy((uint16_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
__arm_2d_impl_rgb565_tile_copy_with_src_mask_and_opacity((uint16_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size,
|
||||
dsc->opa);
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
|
||||
@@ -428,20 +429,15 @@ static inline lv_result_t lv_rgb888_blend_normal_to_rgb565_mix_mask_opa_arm2d(lv
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
__arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
0x00,
|
||||
255 - dsc->opa);
|
||||
|
||||
__arm_2d_impl_rgb565_src_msk_copy(tmp_buf,
|
||||
des_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
__arm_2d_impl_rgb565_tile_copy_with_src_mask_and_opacity(tmp_buf,
|
||||
des_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size,
|
||||
dsc->opa);
|
||||
|
||||
lv_free(tmp_buf);
|
||||
return LV_RESULT_OK;
|
||||
@@ -453,37 +449,12 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_arm2d(lv_draw_sw_bl
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint16_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint32_t);
|
||||
|
||||
#if ARM_2D_VERSION >= 10106ul
|
||||
|
||||
__arm_2d_impl_ccca8888_to_rgb565((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
#else
|
||||
uint16_t * tmp_buf = (uint16_t *)lv_malloc(dsc->dest_stride * dsc->dest_h);
|
||||
if(NULL == tmp_buf) {
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
|
||||
__arm_2d_impl_cccn888_to_rgb565((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint16_t *)tmp_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
__arm_2d_impl_rgb565_src_chn_msk_copy(tmp_buf,
|
||||
des_stride,
|
||||
(uint32_t *)((uintptr_t)(dsc->src_buf) + 3),
|
||||
src_stride,
|
||||
&draw_size,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
lv_free(tmp_buf);
|
||||
#endif
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
|
||||
@@ -493,7 +464,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_opa_arm2d(lv_d
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint16_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint32_t);
|
||||
|
||||
#if ARM_2D_VERSION >= 10106ul
|
||||
__arm_2d_impl_ccca8888_tile_copy_to_rgb565_with_opacity((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
@@ -501,50 +471,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_opa_arm2d(lv_d
|
||||
&draw_size,
|
||||
dsc->opa);
|
||||
|
||||
#else
|
||||
uint16_t * tmp_buf = (uint16_t *)lv_malloc(dsc->dest_stride * dsc->dest_h);
|
||||
if(NULL == tmp_buf) {
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
|
||||
|
||||
uint8_t * tmp_msk = (uint8_t *)lv_malloc(des_stride * dsc->dest_h);
|
||||
if(NULL == tmp_msk) {
|
||||
lv_free(tmp_buf);
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
|
||||
/* get rgb565 */
|
||||
__arm_2d_impl_cccn888_to_rgb565((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint16_t *)tmp_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
lv_memzero(tmp_msk, des_stride * dsc->dest_h);
|
||||
|
||||
/* get mask */
|
||||
__arm_2d_impl_gray8_colour_filling_channel_mask_opacity(tmp_msk,
|
||||
des_stride,
|
||||
(uint32_t *)((uintptr_t)(dsc->src_buf) + 3),
|
||||
src_stride,
|
||||
&draw_size,
|
||||
0xFF,
|
||||
dsc->opa);
|
||||
|
||||
__arm_2d_impl_rgb565_src_msk_copy(tmp_buf,
|
||||
des_stride,
|
||||
tmp_msk,
|
||||
des_stride,
|
||||
&draw_size,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
lv_free(tmp_msk);
|
||||
lv_free(tmp_buf);
|
||||
#endif
|
||||
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
|
||||
@@ -554,8 +480,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_mask_arm2d(lv_
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint16_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint32_t);
|
||||
|
||||
#if ARM_2D_VERSION >= 10106ul
|
||||
|
||||
__arm_2d_impl_ccca8888_tile_copy_to_rgb565_with_src_mask((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
@@ -564,49 +488,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_mask_arm2d(lv_
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
#else
|
||||
uint16_t * tmp_buf = (uint16_t *)lv_malloc(dsc->dest_stride * dsc->dest_h);
|
||||
if(NULL == tmp_buf) {
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
uint8_t * tmp_msk = (uint8_t *)lv_malloc(des_stride * dsc->dest_h);
|
||||
if(NULL == tmp_msk) {
|
||||
lv_free(tmp_buf);
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
|
||||
/* get rgb565 */
|
||||
__arm_2d_impl_cccn888_to_rgb565((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint16_t *)tmp_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
lv_memzero(tmp_msk, des_stride * dsc->dest_h);
|
||||
|
||||
/* get mask */
|
||||
__arm_2d_impl_gray8_colour_filling_channel_mask(tmp_msk,
|
||||
des_stride,
|
||||
(uint32_t *)((uintptr_t)(dsc->src_buf) + 3),
|
||||
src_stride,
|
||||
&draw_size,
|
||||
0xFF);
|
||||
|
||||
__arm_2d_impl_rgb565_masks_copy(tmp_buf,
|
||||
des_stride,
|
||||
tmp_msk,
|
||||
des_stride,
|
||||
&draw_size,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
&draw_size);
|
||||
|
||||
lv_free(tmp_msk);
|
||||
lv_free(tmp_buf);
|
||||
#endif
|
||||
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
@@ -617,7 +498,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_arm2d(
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint16_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint32_t);
|
||||
|
||||
#if ARM_2D_VERSION >= 10106ul
|
||||
__arm_2d_impl_ccca8888_tile_copy_to_rgb565_with_src_mask_and_opacity((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
@@ -627,50 +507,7 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_arm2d(
|
||||
des_stride,
|
||||
&draw_size,
|
||||
dsc->opa);
|
||||
#else
|
||||
uint16_t * tmp_buf = (uint16_t *)lv_malloc(dsc->dest_stride * dsc->dest_h);
|
||||
if(NULL == tmp_buf) {
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
uint8_t * tmp_msk = (uint8_t *)lv_malloc(des_stride * dsc->dest_h);
|
||||
if(NULL == tmp_msk) {
|
||||
lv_free(tmp_buf);
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
|
||||
/* get rgb565 */
|
||||
__arm_2d_impl_cccn888_to_rgb565((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint16_t *)tmp_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
lv_memzero(tmp_msk, des_stride * dsc->dest_h);
|
||||
|
||||
/* get mask */
|
||||
__arm_2d_impl_gray8_colour_filling_channel_mask_opacity(tmp_msk,
|
||||
des_stride,
|
||||
(uint32_t *)((uintptr_t)(dsc->src_buf) + 3),
|
||||
src_stride,
|
||||
&draw_size,
|
||||
0xFF,
|
||||
dsc->opa);
|
||||
|
||||
__arm_2d_impl_rgb565_masks_copy(tmp_buf,
|
||||
des_stride,
|
||||
tmp_msk,
|
||||
des_stride,
|
||||
&draw_size,
|
||||
(uint16_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
&draw_size);
|
||||
|
||||
lv_free(tmp_msk);
|
||||
lv_free(tmp_buf);
|
||||
#endif
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
|
||||
@@ -861,20 +698,15 @@ static inline lv_result_t lv_rgb565_blend_normal_to_rgb888_mix_mask_opa_arm2d(lv
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
__arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
0x00,
|
||||
255 - dsc->opa);
|
||||
|
||||
__arm_2d_impl_cccn888_src_msk_copy(tmp_buf,
|
||||
des_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
__arm_2d_impl_cccn888_tile_copy_with_src_mask_and_opacity(tmp_buf,
|
||||
des_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size,
|
||||
dsc->opa);
|
||||
|
||||
lv_free(tmp_buf);
|
||||
return LV_RESULT_OK;
|
||||
@@ -955,20 +787,15 @@ static inline lv_result_t lv_rgb888_blend_normal_to_rgb888_mix_mask_opa_arm2d(lv
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint32_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint32_t);
|
||||
|
||||
__arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
0x00,
|
||||
255 - dsc->opa);
|
||||
|
||||
__arm_2d_impl_cccn888_src_msk_copy((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
__arm_2d_impl_cccn888_tile_copy_with_src_mask_and_opacity((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size,
|
||||
dsc->opa);
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
|
||||
@@ -984,22 +811,12 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_arm2d(lv_draw_sw_bl
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint32_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint32_t);
|
||||
|
||||
#if ARM_2D_VERSION >= 10106ul
|
||||
__arm_2d_impl_ccca8888_to_cccn888((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
#else
|
||||
__arm_2d_impl_cccn888_src_chn_msk_copy((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint32_t *)((uintptr_t)(dsc->src_buf) + 3),
|
||||
src_stride,
|
||||
&draw_size,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
#endif
|
||||
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
|
||||
@@ -1014,42 +831,13 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_with_opa_arm2d(lv_d
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint32_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint32_t);
|
||||
|
||||
#if ARM_2D_VERSION >= 10106ul
|
||||
|
||||
__arm_2d_impl_ccca8888_tile_copy_to_cccn888_with_opacity((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size,
|
||||
dsc->opa);
|
||||
#else
|
||||
uint8_t * tmp_msk = (uint8_t *)lv_malloc(des_stride * dsc->dest_h);
|
||||
if(NULL == tmp_msk) {
|
||||
return LV_RESULT_INVALID;
|
||||
}
|
||||
|
||||
lv_memzero(tmp_msk, des_stride * dsc->dest_h);
|
||||
|
||||
/* get mask */
|
||||
__arm_2d_impl_gray8_colour_filling_channel_mask_opacity(tmp_msk,
|
||||
des_stride,
|
||||
(uint32_t *)((uintptr_t)(dsc->src_buf) + 3),
|
||||
src_stride,
|
||||
&draw_size,
|
||||
0xFF,
|
||||
dsc->opa);
|
||||
|
||||
__arm_2d_impl_cccn888_src_msk_copy((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
tmp_msk,
|
||||
des_stride,
|
||||
&draw_size,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
|
||||
lv_free(tmp_msk);
|
||||
#endif
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
|
||||
@@ -1065,8 +853,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_with_mask_arm2d(lv_
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint32_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint32_t);
|
||||
|
||||
#if ARM_2D_VERSION >= 10106ul
|
||||
|
||||
__arm_2d_impl_ccca8888_tile_copy_to_cccn888_with_src_mask((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
@@ -1075,19 +861,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_with_mask_arm2d(lv_
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
&draw_size);
|
||||
#else
|
||||
__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint32_t *)((uintptr_t)(dsc->src_buf) + 3),
|
||||
src_stride,
|
||||
&draw_size,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
&draw_size);
|
||||
#endif
|
||||
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
@@ -1103,8 +876,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_arm2d(
|
||||
int16_t des_stride = dsc->dest_stride / sizeof(uint32_t);
|
||||
int16_t src_stride = dsc->src_stride / sizeof(uint32_t);
|
||||
|
||||
#if ARM_2D_VERSION >= 10106ul
|
||||
|
||||
__arm_2d_impl_ccca8888_tile_copy_to_cccn888_with_src_mask_and_opacity((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
@@ -1114,25 +885,7 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_arm2d(
|
||||
des_stride,
|
||||
&draw_size,
|
||||
dsc->opa);
|
||||
#else
|
||||
__arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
0x00,
|
||||
255 - dsc->opa);
|
||||
|
||||
__arm_2d_impl_cccn888_src_chn_msk_des_msk_copy((uint32_t *)dsc->src_buf,
|
||||
src_stride,
|
||||
(uint32_t *)((uintptr_t)(dsc->src_buf) + 3),
|
||||
src_stride,
|
||||
&draw_size,
|
||||
(uint32_t *)dsc->dest_buf,
|
||||
des_stride,
|
||||
(uint8_t *)dsc->mask_buf,
|
||||
dsc->mask_stride,
|
||||
&draw_size,
|
||||
&draw_size);
|
||||
#endif
|
||||
return LV_RESULT_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user