29#ifndef __ARM_2D_HELPER_PFB_H__
30#define __ARM_2D_HELPER_PFB_H__
41# pragma clang diagnostic push
42# pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
43# pragma clang diagnostic ignored "-Wpadded"
101#define ARM_2D_HELPER_PFB_INIT( __CB_ADDR, \
111 __attribute__((section(".bss.noinit.arm_2d_pfb_pool"))) \
115 __PIXEL_TYPE tBuffer[(__WIDTH) * (__HEIGHT)]; \
116 } s_tPFBs[__PFB_NUM]; \
118 arm_2d_helper_pfb_cfg_t tCFG = { \
119 .tDisplayArea.tSize = { \
120 .iWidth = (__SCREEN_WIDTH), \
121 .iHeight = (__SCREEN_HEIGHT), \
124 .FrameBuffer.ptPFBs = (arm_2d_pfb_t *)s_tPFBs, \
125 .FrameBuffer.tFrameSize = { \
126 .iWidth = (__WIDTH), \
127 .iHeight = (__HEIGHT), \
129 .FrameBuffer.wBufferSize = sizeof(s_tPFBs[0].tBuffer), \
130 .FrameBuffer.hwPFBNum = dimof(s_tPFBs), \
135 arm_2d_helper_pfb_init((__CB_ADDR), &tCFG); \
146#define ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( \
150 arm_2d_helper_pfb_update_dependency((__CB_ADDR), \
151 ARM_2D_PFB_DEPEND_ON_DRAWING, \
152 (arm_2d_helper_pfb_dependency_t []) {{ \
154 .fnHandler = (__HANDLER), \
155 .pTarget = (NULL,##__VA_ARGS__),\
160#define __IMPL_ARM_2D_REGION_LIST(__NAME, ...) \
162 __NAME##_offset = __COUNTER__, \
165 arm_2d_region_list_item_t __NAME[] = {
168#define IMPL_ARM_2D_REGION_LIST(__NAME, ...) \
169 __IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
172#define END_IMPL_ARM_2D_REGION_LIST(...) \
175#define __ADD_REGION_TO_LIST(__NAME, ...) \
177 .ptNext = (arm_2d_region_list_item_t *) \
178 &(__NAME[__COUNTER__ - __NAME##_offset]), \
184#define ADD_REGION_TO_LIST(__NAME, ...) \
185 __ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
188#define __ADD_LAST_REGION_TO_LIST(__NAME, ...) \
196#define ADD_LAST_REGION_TO_LIST(__NAME, ...) \
197 __ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
199#define IMPL_PFB_ON_DRAW(__NAME) \
200 arm_fsm_rt_t __NAME(void *pTarget, \
201 const arm_2d_tile_t *ptTile, \
204#define IMPL_PFB_ON_LOW_LV_RENDERING(__NAME) \
205 void __NAME(void *pTarget, \
206 const arm_2d_pfb_t *ptPFB, \
210#define IMPL_PFB_ON_FRAME_SYNC_UP(__NAME) \
211 bool __NAME(void *pTarget)
260#define init_arm_2d_helper_pfb( __CB_ADDR, \
269 ARM_2D_HELPER_PFB_INIT( \
288#define update_arm_2d_helper_pfb_on_draw_handler( \
292 ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( \
294 (__HANDLER),##__VA_ARGRS__)
296#define impl_arm_2d_region_list(__NAME, ...) \
297 IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
298#define add_region_to_list(__NAME, ...) \
299 ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
300#define add_last_region_to_list(__NAME, ...) \
301 ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
302#define end_impl_arm_2d_region_list(...) \
303 END_IMPL_ARM_2D_REGION_LIST(__VA_ARGS__)
305#define impl_pfb_on_draw(__NAME) IMPL_PFB_ON_DRAW(__NAME)
306#define impl_pfb_on_low_lv_rendering(__NAME) \
307 IMPL_PFB_ON_LOW_LV_RENDERING(__NAME)
408 uint32_t wBufferSize;
410 uint16_t bDoNOTUpdateDefaultFrameBuffer : 1;
411 uint16_t bDisableDynamicFPBSize : 1;
412 uint16_t bSwapRGB16 : 1;
435 bool bFirstIteration;
436 bool bIsRegionChanged;
439 uint8_t bIsNewFrame : 1;
440 uint8_t bIsFlushRequested :1;
455 int32_t nRenderingCycle;
521#if defined(__clang__)
522# pragma clang diagnostic pop