feat(arm-2d): upgrade to v1.1.6 and slightly improve the performance

This commit is contained in:
Gabriel Wang
2024-08-26 22:05:18 +01:00
committed by Gabor Kiss-Vamosi
parent f292ddde34
commit 03871ad18d
2 changed files with 44 additions and 290 deletions
+1
View File
@@ -17,6 +17,7 @@ extern "C" {
*********************/
#include "../../../lv_conf_internal.h"
#include "../../../misc/lv_area_private.h"
#if LV_USE_DRAW_ARM2D_SYNC
+43 -290
View File
@@ -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;
}