30#ifndef __ARM_2D_HELPER_PFB_H__
31#define __ARM_2D_HELPER_PFB_H__
36#include "./__arm_2d_helper_common.h"
44# pragma clang diagnostic push
45# pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
46# pragma clang diagnostic ignored "-Wpadded"
104#define ARM_2D_HELPER_PFB_INIT( __CB_ADDR, \
114 __attribute__((section(".bss.noinit.arm_2d_pfb_pool"))) \
118 __PIXEL_TYPE tBuffer[(__WIDTH) * (__HEIGHT)]; \
119 } s_tPFBs[__PFB_NUM]; \
121 arm_2d_helper_pfb_cfg_t tCFG = { \
122 .tDisplayArea.tSize = { \
123 .iWidth = (__SCREEN_WIDTH), \
124 .iHeight = (__SCREEN_HEIGHT), \
127 .FrameBuffer.ptPFBs = (arm_2d_pfb_t *)s_tPFBs, \
128 .FrameBuffer.tFrameSize = { \
129 .iWidth = (__WIDTH), \
130 .iHeight = (__HEIGHT), \
132 .FrameBuffer.wBufferSize = sizeof(s_tPFBs[0].tBuffer), \
133 .FrameBuffer.hwPFBNum = dimof(s_tPFBs), \
138 arm_2d_helper_pfb_init((__CB_ADDR), &tCFG); \
149#define ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( \
153 arm_2d_helper_pfb_update_dependency((__CB_ADDR), \
154 ARM_2D_PFB_DEPEND_ON_DRAWING, \
155 (arm_2d_helper_pfb_dependency_t []) {{ \
157 .fnHandler = (__HANDLER), \
158 .pTarget = (NULL,##__VA_ARGS__),\
163#define __IMPL_ARM_2D_REGION_LIST(__NAME, ...) \
165 __NAME##_offset = __COUNTER__, \
168 arm_2d_region_list_item_t __NAME[] = {
171#define IMPL_ARM_2D_REGION_LIST(__NAME, ...) \
172 __IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
175#define END_IMPL_ARM_2D_REGION_LIST(...) \
178#define __ADD_REGION_TO_LIST(__NAME, ...) \
180 .ptNext = (arm_2d_region_list_item_t *) \
181 &(__NAME[__COUNTER__ - __NAME##_offset]), \
187#define ADD_REGION_TO_LIST(__NAME, ...) \
188 __ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
191#define __ADD_LAST_REGION_TO_LIST(__NAME, ...) \
199#define ADD_LAST_REGION_TO_LIST(__NAME, ...) \
200 __ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
203#define IMPL_PFB_ON_DRAW(__NAME) IMPL_ON_DRAW_EVT(__NAME)
206#define IMPL_PFB_ON_LOW_LV_RENDERING(__NAME) \
207 void __NAME(void *pTarget, \
208 const arm_2d_pfb_t *ptPFB, \
212#define IMPL_PFB_ON_FRAME_SYNC_UP(__NAME) \
213 bool __NAME(void *pTarget)
262#define init_arm_2d_helper_pfb( __CB_ADDR, \
271 ARM_2D_HELPER_PFB_INIT( \
290#define update_arm_2d_helper_pfb_on_draw_handler( \
294 ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( \
296 (__HANDLER),##__VA_ARGRS__)
309#define arm_2d_helper_pfb_report_rendering_complete(__PFB_HELPER_PTR,...) \
310 __arm_2d_helper_pfb_report_rendering_complete((__PFB_HELPER_PTR), \
311 (NULL,##__VA_ARGS__))
314#define impl_arm_2d_region_list(__NAME, ...) \
315 IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
316#define add_region_to_list(__NAME, ...) \
317 ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
318#define add_last_region_to_list(__NAME, ...) \
319 ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
320#define end_impl_arm_2d_region_list(...) \
321 END_IMPL_ARM_2D_REGION_LIST(__VA_ARGS__)
323#define impl_pfb_on_draw(__NAME) IMPL_PFB_ON_DRAW(__NAME)
324#define impl_pfb_on_low_lv_rendering(__NAME) \
325 IMPL_PFB_ON_LOW_LV_RENDERING(__NAME)
337 uint32_t u24Size : 24;
422 uint32_t wBufferSize;
424 uint16_t bDoNOTUpdateDefaultFrameBuffer : 1;
425 uint16_t bDisableDynamicFPBSize : 1;
426 uint16_t bSwapRGB16 : 1;
428 uint16_t u4PoolReserve : 4;
451 bool bFirstIteration;
452 bool bIsRegionChanged;
455 uint8_t bIsNewFrame : 1;
456 uint8_t bIsFlushRequested :1;
457 uint8_t bNoAdditionalDirtyRegionList;
459 uint16_t hwFreePFBCount;
474 int32_t nRenderingCycle;
590#if defined(__clang__)
591# pragma clang diagnostic pop