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"
57#define ARM_2D_FPS_MODE_RENDER_ONLY 0
58#define ARM_2D_FPS_MODE_REAL 1
108#define ARM_2D_HELPER_PFB_INIT( __CB_ADDR, \
118 __attribute__((section(".bss.noinit.arm_2d_pfb_pool"))) \
122 __PIXEL_TYPE tBuffer[(__WIDTH) * (__HEIGHT)]; \
123 } s_tPFBs[__PFB_NUM]; \
125 arm_2d_helper_pfb_cfg_t tCFG = { \
126 .tDisplayArea.tSize = { \
127 .iWidth = (__SCREEN_WIDTH), \
128 .iHeight = (__SCREEN_HEIGHT), \
131 .FrameBuffer.ptPFBs = (arm_2d_pfb_t *)s_tPFBs, \
132 .FrameBuffer.tFrameSize = { \
133 .iWidth = (__WIDTH), \
134 .iHeight = (__HEIGHT), \
136 .FrameBuffer.wBufferSize = sizeof(s_tPFBs[0].tBuffer), \
137 .FrameBuffer.hwPFBNum = dimof(s_tPFBs), \
142 arm_2d_helper_pfb_init((__CB_ADDR), &tCFG); \
153#define ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( \
157 arm_2d_helper_pfb_update_dependency((__CB_ADDR), \
158 ARM_2D_PFB_DEPEND_ON_DRAWING, \
159 (arm_2d_helper_pfb_dependency_t []) {{ \
161 .fnHandler = (__HANDLER), \
162 .pTarget = (NULL,##__VA_ARGS__),\
167#define __IMPL_ARM_2D_REGION_LIST(__NAME, ...) \
169 __NAME##_offset = __COUNTER__, \
172 arm_2d_region_list_item_t __NAME[] = {
175#define IMPL_ARM_2D_REGION_LIST(__NAME, ...) \
176 __IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
179#define END_IMPL_ARM_2D_REGION_LIST(...) \
182#define __ADD_REGION_TO_LIST(__NAME, ...) \
184 .ptNext = (arm_2d_region_list_item_t *) \
185 &(__NAME[__COUNTER__ - __NAME##_offset]), \
191#define ADD_REGION_TO_LIST(__NAME, ...) \
192 __ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
195#define __ADD_LAST_REGION_TO_LIST(__NAME, ...) \
203#define ADD_LAST_REGION_TO_LIST(__NAME, ...) \
204 __ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
207#define IMPL_PFB_ON_DRAW(__NAME) IMPL_ON_DRAW_EVT(__NAME)
210#define IMPL_PFB_ON_LOW_LV_RENDERING(__NAME) \
211 void __NAME(void *pTarget, \
212 const arm_2d_pfb_t *ptPFB, \
216#define IMPL_PFB_ON_FRAME_SYNC_UP(__NAME) \
217 bool __NAME(void *pTarget)
266#define init_arm_2d_helper_pfb( __CB_ADDR, \
275 ARM_2D_HELPER_PFB_INIT( \
294#define update_arm_2d_helper_pfb_on_draw_handler( \
298 ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( \
300 (__HANDLER),##__VA_ARGRS__)
313#define arm_2d_helper_pfb_report_rendering_complete(__PFB_HELPER_PTR,...) \
314 __arm_2d_helper_pfb_report_rendering_complete((__PFB_HELPER_PTR), \
315 (NULL,##__VA_ARGS__))
318#define impl_arm_2d_region_list(__NAME, ...) \
319 IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
320#define add_region_to_list(__NAME, ...) \
321 ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
322#define add_last_region_to_list(__NAME, ...) \
323 ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
324#define end_impl_arm_2d_region_list(...) \
325 END_IMPL_ARM_2D_REGION_LIST(__VA_ARGS__)
327#define impl_pfb_on_draw(__NAME) IMPL_PFB_ON_DRAW(__NAME)
328#define impl_pfb_on_low_lv_rendering(__NAME) \
329 IMPL_PFB_ON_LOW_LV_RENDERING(__NAME)
341 uint32_t u24Size : 24;
427 uint32_t wBufferSize;
429 uint16_t bDoNOTUpdateDefaultFrameBuffer : 1;
430 uint16_t bDisableDynamicFPBSize : 1;
431 uint16_t bSwapRGB16 : 1;
432 uint16_t bDebugDirtyRegions : 1;
434 uint16_t u3PixelWidthAlign : 3;
435 uint16_t u3PixelHeightAlign : 3;
436 uint16_t u4PoolReserve : 4;
460 uint32_t wPFBPixelCount;
461 bool bFirstIteration;
462 bool bIsRegionChanged;
465 uint8_t bIsNewFrame : 1;
466 uint8_t bIsFlushRequested :1;
467 uint8_t bNoAdditionalDirtyRegionList;
469 uint16_t hwFreePFBCount;
484 int32_t nRenderingCycle;
680#if defined(__clang__)
681# pragma clang diagnostic pop