30#ifndef __ARM_2D_HELPER_PFB_H__
31#define __ARM_2D_HELPER_PFB_H__
42# pragma clang diagnostic push
43# pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
44# pragma clang diagnostic ignored "-Wpadded"
102#define ARM_2D_HELPER_PFB_INIT( __CB_ADDR, \
112 __attribute__((section(".bss.noinit.arm_2d_pfb_pool"))) \
116 __PIXEL_TYPE tBuffer[(__WIDTH) * (__HEIGHT)]; \
117 } s_tPFBs[__PFB_NUM]; \
119 arm_2d_helper_pfb_cfg_t tCFG = { \
120 .tDisplayArea.tSize = { \
121 .iWidth = (__SCREEN_WIDTH), \
122 .iHeight = (__SCREEN_HEIGHT), \
125 .FrameBuffer.ptPFBs = (arm_2d_pfb_t *)s_tPFBs, \
126 .FrameBuffer.tFrameSize = { \
127 .iWidth = (__WIDTH), \
128 .iHeight = (__HEIGHT), \
130 .FrameBuffer.wBufferSize = sizeof(s_tPFBs[0].tBuffer), \
131 .FrameBuffer.hwPFBNum = dimof(s_tPFBs), \
136 arm_2d_helper_pfb_init((__CB_ADDR), &tCFG); \
147#define ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( \
151 arm_2d_helper_pfb_update_dependency((__CB_ADDR), \
152 ARM_2D_PFB_DEPEND_ON_DRAWING, \
153 (arm_2d_helper_pfb_dependency_t []) {{ \
155 .fnHandler = (__HANDLER), \
156 .pTarget = (NULL,##__VA_ARGS__),\
161#define __IMPL_ARM_2D_REGION_LIST(__NAME, ...) \
163 __NAME##_offset = __COUNTER__, \
166 arm_2d_region_list_item_t __NAME[] = {
169#define IMPL_ARM_2D_REGION_LIST(__NAME, ...) \
170 __IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
173#define END_IMPL_ARM_2D_REGION_LIST(...) \
176#define __ADD_REGION_TO_LIST(__NAME, ...) \
178 .ptNext = (arm_2d_region_list_item_t *) \
179 &(__NAME[__COUNTER__ - __NAME##_offset]), \
185#define ADD_REGION_TO_LIST(__NAME, ...) \
186 __ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
189#define __ADD_LAST_REGION_TO_LIST(__NAME, ...) \
197#define ADD_LAST_REGION_TO_LIST(__NAME, ...) \
198 __ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
200#define IMPL_PFB_ON_DRAW(__NAME) \
201 arm_fsm_rt_t __NAME(void *pTarget, \
202 const arm_2d_tile_t *ptTile, \
205#define IMPL_PFB_ON_LOW_LV_RENDERING(__NAME) \
206 void __NAME(void *pTarget, \
207 const arm_2d_pfb_t *ptPFB, \
211#define IMPL_PFB_ON_FRAME_SYNC_UP(__NAME) \
212 bool __NAME(void *pTarget)
261#define init_arm_2d_helper_pfb( __CB_ADDR, \
270 ARM_2D_HELPER_PFB_INIT( \
289#define update_arm_2d_helper_pfb_on_draw_handler( \
293 ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( \
295 (__HANDLER),##__VA_ARGRS__)
297#define impl_arm_2d_region_list(__NAME, ...) \
298 IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
299#define add_region_to_list(__NAME, ...) \
300 ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
301#define add_last_region_to_list(__NAME, ...) \
302 ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
303#define end_impl_arm_2d_region_list(...) \
304 END_IMPL_ARM_2D_REGION_LIST(__VA_ARGS__)
306#define impl_pfb_on_draw(__NAME) IMPL_PFB_ON_DRAW(__NAME)
307#define impl_pfb_on_low_lv_rendering(__NAME) \
308 IMPL_PFB_ON_LOW_LV_RENDERING(__NAME)
320 uint32_t u24Size : 24;
413 uint32_t wBufferSize;
415 uint16_t bDoNOTUpdateDefaultFrameBuffer : 1;
416 uint16_t bDisableDynamicFPBSize : 1;
417 uint16_t bSwapRGB16 : 1;
419 uint16_t u4PoolReserve : 4;
442 bool bFirstIteration;
443 bool bIsRegionChanged;
446 uint8_t bIsNewFrame : 1;
447 uint8_t bIsFlushRequested :1;
449 uint16_t hwFreePFBCount;
464 int32_t nRenderingCycle;
615#if defined(__clang__)
616# pragma clang diagnostic pop