Description
The Esp32S3SimdPlugin currently intercepts LV_BLEND_MODE_NORMAL operations for RGB565 and RGB888 destinations. However, it fails to check if a mask_buf is present. This causes font rendering (which uses alpha masks) to be rendered as solid blocks of color, as the assembly optimized path ignores the mask.
Reproduction
- Enable
CONFIG_LV_USE_SYSMON or use any text label.
- Enable the S3 SIMD plugin.
- Observe white/solid blocks instead of text.
Environment
- ESP-IDF v5.1+
- LVGL v9.5.0
- Target: ESP32-S3
Proposed Fix
The assembly blend functions currently don't handle masks. We should fall back to the C implementation when a mask is present.
// In utility/esp32/simd/simd_plugin.cpp
if (asm_dsc.mask_buf == nullptr && lv_color_blend_to_rgb565_esp(&asm_dsc))
return;
Also, simd_plugin.cpp requires #include "lv_area_private.h" for lv_area_intersect, and the component CMakeLists.txt needs to include the following private LVGL directories to resolve these headers:
managed_components/lvgl__lvgl/src/draw/sw/blend
managed_components/lvgl__lvgl/src/misc
Description
The
Esp32S3SimdPlugincurrently interceptsLV_BLEND_MODE_NORMALoperations for RGB565 and RGB888 destinations. However, it fails to check if amask_bufis present. This causes font rendering (which uses alpha masks) to be rendered as solid blocks of color, as the assembly optimized path ignores the mask.Reproduction
CONFIG_LV_USE_SYSMONor use any text label.Environment
Proposed Fix
The assembly blend functions currently don't handle masks. We should fall back to the C implementation when a mask is present.
Also,
simd_plugin.cpprequires#include "lv_area_private.h"forlv_area_intersect, and the componentCMakeLists.txtneeds to include the following private LVGL directories to resolve these headers:managed_components/lvgl__lvgl/src/draw/sw/blendmanaged_components/lvgl__lvgl/src/misc