/* * Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2019. All rights reserved. * Description: gfx2d interface * Create: 2019-11-19 */ #ifndef __UAPI_GFX2D_H__ #define __UAPI_GFX2D_H__ #include "td_type.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif #define UAPI_GFX2D_COMPONENT 3 #define UAPI_GFX2D_MAX_ALPHASUM 17 #define UAPI_GFX2D_MAX_HOLES_NUM 4 typedef enum { UAPI_GFX2D_DEV_ID_0 = 0x0, UAPI_GFX2D_DEV_ID_1, UAPI_GFX2D_DEV_ID_MAX } uapi_gfx2d_dev_id; typedef enum { UAPI_GFX2D_FMT_RGB565 = 0, UAPI_GFX2D_FMT_BGR565, UAPI_GFX2D_FMT_RGB888, UAPI_GFX2D_FMT_BGR888, UAPI_GFX2D_FMT_ARGB4444 = 0x10, UAPI_GFX2D_FMT_ABGR4444, UAPI_GFX2D_FMT_RGBA4444, UAPI_GFX2D_FMT_BGRA4444, UAPI_GFX2D_FMT_ARGB1555, UAPI_GFX2D_FMT_ABGR1555, UAPI_GFX2D_FMT_RGBA5551, UAPI_GFX2D_FMT_BGRA5551, UAPI_GFX2D_FMT_ARGB8888 = 0x20, UAPI_GFX2D_FMT_ABGR8888, UAPI_GFX2D_FMT_RGBA8888, UAPI_GFX2D_FMT_BGRA8888, UAPI_GFX2D_FMT_XRGB8888, UAPI_GFX2D_FMT_XBGR8888, UAPI_GFX2D_FMT_ARGB2101010, UAPI_GFX2D_FMT_ARGB10101010, UAPI_GFX2D_FMT_FP16, UAPI_GFX2D_FMT_CLUT1 = 0x30, UAPI_GFX2D_FMT_CLUT2, UAPI_GFX2D_FMT_CLUT4, UAPI_GFX2D_FMT_CLUT8, UAPI_GFX2D_FMT_ACLUT44, UAPI_GFX2D_FMT_ACLUT88, UAPI_GFX2D_FMT_A1, UAPI_GFX2D_FMT_A8, UAPI_GFX2D_FMT_YUV888 = 0x40, UAPI_GFX2D_FMT_AYUV8888, UAPI_GFX2D_FMT_YUYV422, UAPI_GFX2D_FMT_YVYU422, UAPI_GFX2D_FMT_UYVY422, UAPI_GFX2D_FMT_YYUV422, UAPI_GFX2D_FMT_VYUY422, UAPI_GFX2D_FMT_VUYY422, UAPI_GFX2D_FMT_SEMIPLANAR400 = 0x50, UAPI_GFX2D_FMT_SEMIPLANAR420UV, UAPI_GFX2D_FMT_SEMIPLANAR420VU, UAPI_GFX2D_FMT_SEMIPLANAR422UV_H, UAPI_GFX2D_FMT_SEMIPLANAR422VU_H, UAPI_GFX2D_FMT_SEMIPLANAR422UV_V, UAPI_GFX2D_FMT_SEMIPLANAR422VU_V, UAPI_GFX2D_FMT_SEMIPLANAR444UV, UAPI_GFX2D_FMT_SEMIPLANAR444VU, UAPI_GFX2D_FMT_PLANAR400 = 0x60, UAPI_GFX2D_FMT_PLANAR420, UAPI_GFX2D_FMT_PLANAR411, UAPI_GFX2D_FMT_PLANAR410, UAPI_GFX2D_FMT_PLANAR422H, UAPI_GFX2D_FMT_PLANAR422V, UAPI_GFX2D_FMT_PLANAR444, UAPI_GFX2D_FMT_MAX } uapi_gfx2d_color_fmt; typedef struct { td_s32 x; td_s32 y; td_u32 width; td_u32 height; } uapi_gfx2d_rect; typedef enum { UAPI_GFX2D_ROP_BLACK = 0x0, UAPI_GFX2D_ROP_NOTMERGEPEN, UAPI_GFX2D_ROP_MASKNOTPEN, UAPI_GFX2D_ROP_NOTCOPYPEN, UAPI_GFX2D_ROP_MASKPENNOT, UAPI_GFX2D_ROP_NOT, UAPI_GFX2D_ROP_XORPEN, UAPI_GFX2D_ROP_NOTMASKPEN, UAPI_GFX2D_ROP_MASKPEN, UAPI_GFX2D_ROP_NOTXORPEN, UAPI_GFX2D_ROP_NOP, UAPI_GFX2D_ROP_MERGENOTPEN, UAPI_GFX2D_ROP_COPYPEN, UAPI_GFX2D_ROP_MERGEPENNOT, UAPI_GFX2D_ROP_MERGEPEN, UAPI_GFX2D_ROP_WHITE, UAPI_GFX2D_ROP_MAX } uapi_gfx2d_rop_mode; typedef struct { td_bool rop_enable; uapi_gfx2d_rop_mode alpha_rop_mode; uapi_gfx2d_rop_mode color_rop_mode; } uapi_gfx2d_rop_attr; typedef enum { UAPI_GFX2D_MIRROR_NONE = 0, UAPI_GFX2D_MIRROR_HORIZONTAL, UAPI_GFX2D_MIRROR_VERTICAL, UAPI_GFX2D_MIRROR_BOTH, UAPI_GFX2D_MIRROR_MAX } uapi_gfx2d_mirror_mode; typedef struct { td_bool mirror_en; uapi_gfx2d_mirror_mode mirror_mode; } uapi_gfx2d_mirror_attr; typedef enum { UAPI_GFX2D_CLIP_NONE = 0x0, UAPI_GFX2D_CLIP_INSIDE, UAPI_GFX2D_CLIP_OUTSIDE, UAPI_GFX2D_CLIP_MAX } uapi_gfx2d_clip_mode; typedef struct { td_bool clip_en; uapi_gfx2d_clip_mode clip_mode; uapi_gfx2d_rect clip_rect; } uapi_gfx2d_clip_attr; typedef enum { UAPI_GFX2D_COLORKEY_NONE = 0, UAPI_GFX2D_COLORKEY_FOREGROUND, UAPI_GFX2D_COLORKEY_BACKGROUND, UAPI_GFX2D_COLORKEY_MAX } uapi_gfx2d_colorkey_mode; typedef struct { td_u16 component_min; td_u16 component_max; td_bool is_component_out; td_bool is_component_ignore; td_u16 component_mask; } uapi_gfx2d_colorkey_component; typedef union { struct { uapi_gfx2d_colorkey_component alpha; uapi_gfx2d_colorkey_component red; uapi_gfx2d_colorkey_component green; uapi_gfx2d_colorkey_component blue; } colorkey_argb; struct { uapi_gfx2d_colorkey_component alpha; uapi_gfx2d_colorkey_component y; uapi_gfx2d_colorkey_component cb; uapi_gfx2d_colorkey_component cr; } colorkey_ycbcr; struct { uapi_gfx2d_colorkey_component alpha; uapi_gfx2d_colorkey_component clut; } colorkey_clut; } uapi_gfx2d_colorkey_value; typedef struct { td_bool colorkey_enable; uapi_gfx2d_colorkey_mode colorkey_mode; uapi_gfx2d_colorkey_value colorkey_value; } uapi_gfx2d_colorkey_attr; typedef enum { UAPI_GFX2D_FILTER_COLOR = 0, UAPI_GFX2D_FILTER_ALPHA, UAPI_GFX2D_FILTER_BOTH, UAPI_GFX2D_FILTER_NONE, UAPI_GFX2D_FILTER_MAX } uapi_gfx2d_filter_mode; typedef struct { td_bool filter_enable; uapi_gfx2d_filter_mode filter_mode; } uapi_gfx2d_filter_attr; typedef enum { UAPI_GFX2D_DEFLICKER_NONE = 0, UAPI_GFX2D_DEFLICKER_RGB, UAPI_GFX2D_DEFLICKER_BOTH, UAPI_GFX2D_DEFLICKER_MAX } uapi_gfx2d_deflicker_mode; typedef struct { td_bool deflicker_enable; uapi_gfx2d_deflicker_mode deflicker_mode; } uapi_gfx2d_deflicker_attr; typedef enum { UAPI_GFX2D_BLEND_ZERO = 0x0, UAPI_GFX2D_BLEND_ONE, UAPI_GFX2D_BLEND_SRC2COLOR, UAPI_GFX2D_BLEND_INVSRC2COLOR, UAPI_GFX2D_BLEND_SRC2ALPHA, UAPI_GFX2D_BLEND_INVSRC2ALPHA, UAPI_GFX2D_BLEND_SRC1COLOR, UAPI_GFX2D_BLEND_INVSRC1COLOR, UAPI_GFX2D_BLEND_SRC1ALPHA, UAPI_GFX2D_BLEND_INVSRC1ALPHA, UAPI_GFX2D_BLEND_SRC2ALPHASAT, UAPI_GFX2D_BLEND_MAX } uapi_gfx2d_blend_mode; typedef enum { UAPI_GFX2D_BLENDCMD_NONE = 0x0, UAPI_GFX2D_BLENDCMD_CLEAR, UAPI_GFX2D_BLENDCMD_SRC, UAPI_GFX2D_BLENDCMD_SRCOVER, UAPI_GFX2D_BLENDCMD_DSTOVER, UAPI_GFX2D_BLENDCMD_SRCIN, UAPI_GFX2D_BLENDCMD_DSTIN, UAPI_GFX2D_BLENDCMD_SRCOUT, UAPI_GFX2D_BLENDCMD_DSTOUT, UAPI_GFX2D_BLENDCMD_SRCATOP, UAPI_GFX2D_BLENDCMD_DSTATOP, UAPI_GFX2D_BLENDCMD_ADD, UAPI_GFX2D_BLENDCMD_XOR, UAPI_GFX2D_BLENDCMD_DST, UAPI_GFX2D_BLENDCMD_CONFIG, UAPI_GFX2D_BLENDCMD_MAX } uapi_gfx2d_blend_cmd; typedef enum { UAPI_GFX2D_OUTALPHA_FROM_NORM = 0, UAPI_GFX2D_OUTALPHA_FROM_BACKGROUND, UAPI_GFX2D_OUTALPHA_FROM_FOREGROUND, UAPI_GFX2D_OUTALPHA_FROM_GLOBALALPHA, UAPI_GFX2D_OUTALPHA_FROM_MAX } uapi_gfx2d_out_alpha_mode; typedef struct { /* only for blitter */ td_bool blend_enable; uapi_gfx2d_blend_cmd blend_cmd; uapi_gfx2d_blend_mode blend_mode; uapi_gfx2d_out_alpha_mode out_alpha_mode; /* only for composer */ td_bool cov_blend; td_bool global_alpha_en; td_u8 global_alpha; td_bool pixel_alpha_en; } uapi_gfx2d_blend_attr; typedef struct { td_bool in_csc_user_en; td_bool is_in_csc_param_reload; td_bool out_csc_user_en; td_bool is_out_csc_param_reload; td_mem_handle in_csc_param_mem_handle; td_u32 in_csc_param_buf_size; td_mem_handle out_csc_param_mem_handle; td_u32 out_csc_param_buf_size; } uapi_gfx2d_csc_attr; typedef struct { td_bool colorize_enable; td_u32 colorrize_value; } uapi_gfx2d_colorize_attr; typedef struct { td_bool clut_reload; } uapi_gfx2d_clut_attr; typedef struct { td_bool resize_enable; } uapi_gfx2d_resize_attr; typedef struct { td_bool holes_enable; td_u32 holes_cnt; uapi_gfx2d_rect rect[UAPI_GFX2D_MAX_HOLES_NUM]; td_u8 a[UAPI_GFX2D_MAX_HOLES_NUM]; td_u32 rgb[UAPI_GFX2D_MAX_HOLES_NUM]; } uapi_gfx2d_holes_attr; typedef struct { uapi_gfx2d_resize_attr resize_attr; uapi_gfx2d_filter_attr filter_attr; uapi_gfx2d_rop_attr rop_attr; uapi_gfx2d_colorkey_attr colorkey_attr; uapi_gfx2d_clip_attr clip_attr; uapi_gfx2d_deflicker_attr deflicker_attr; uapi_gfx2d_mirror_attr mirror_attr; uapi_gfx2d_blend_attr blend_attr; uapi_gfx2d_csc_attr csc_attr; uapi_gfx2d_colorize_attr color_rize_attr; uapi_gfx2d_clut_attr clut_attr; uapi_gfx2d_holes_attr holes_attr; } uapi_gfx2d_attr; typedef enum { UAPI_GFX2D_COMPRESS_NONE = 0x0, UAPI_GFX2D_COMPRESS_HFBC, UAPI_GFX2D_COMPRESS_AFBC, UAPI_GFX2D_COMPRESS_MAX } uapi_gfx2d_compress_mode; typedef enum { UAPI_GFX2D_HDR_SDR, UAPI_GFX2D_HDR_HDR10, UAPI_GFX2D_HDR_HLG, UAPI_GFX2D_HDR_MAX } uapi_gfx2d_xdr_mode; typedef enum { UAPI_GFX2D_COLOR_SPACE_BT709, UAPI_GFX2D_COLOR_SPACE_BT2020, UAPI_GFX2D_COLOR_SPACE_MAX } uapi_gfx2d_color_space; typedef enum { UAPI_GFX2D_SURFACE_TYPE_MEM = 0x0, UAPI_GFX2D_SURFACE_TYPE_COLOR, UAPI_GFX2D_SURFACE_TYPE_MAX } uapi_gfx2d_surface_type; typedef struct { td_bool alpha_ext_enable; td_u8 alpha0; td_u8 alpha1; } uapi_gfx2d_alpha_ext; typedef struct { td_u32 alpha_sum[UAPI_GFX2D_MAX_ALPHASUM]; } uapi_gfx2d_compose_ext_info; typedef struct { td_bool is_secure; td_u32 width; td_u32 height; td_u32 stride[UAPI_GFX2D_COMPONENT]; td_u32 size[UAPI_GFX2D_COMPONENT]; td_mem_handle mem_handle[UAPI_GFX2D_COMPONENT]; uapi_gfx2d_color_fmt format; uapi_gfx2d_xdr_mode xdr_mode; uapi_gfx2d_color_space color_space; uapi_gfx2d_compress_mode compress_mode; td_u32 background_color; uapi_gfx2d_surface_type surface_type; td_bool is_ycbcr_clut; td_u32 palette_phy_addr_size; td_mem_handle palette_mem_handle; td_u32 stogram_phy_addr_size; td_mem_handle stogram_mem_handle; td_bool premulti_en; td_bool is_alpha_max_255; td_bool is_alpha_ext_1555; uapi_gfx2d_alpha_ext alpha_ext; uapi_gfx2d_rect in_rect; uapi_gfx2d_rect out_rect; uapi_gfx2d_attr *attr; td_s32 acquire_fence_fd; td_s32 release_fence_fd; uapi_gfx2d_compose_ext_info ext_info; } uapi_gfx2d_surface; typedef enum { UAPI_GFX2D_OPS_NONE = 0, UAPI_GFX2D_OPS_QUICK_COPY, UAPI_GFX2D_OPS_QUICK_FILL, UAPI_GFX2D_OPS_QUICK_RESIZE, UAPI_GFX2D_OPS_QUICK_DEFLICKER, UAPI_GFX2D_OPS_BIT_BLIT, UAPI_GFX2D_OPS_SOLID_DRAW, UAPI_GFX2D_OPS_ROTATE, UAPI_GFX2D_OPS_PATTERN_FILL, UAPI_GFX2D_OPS_MAX } uapi_gfx2d_ops_mode; typedef struct { td_u32 src_surface_cnt; uapi_gfx2d_surface *src_surfaces; uapi_gfx2d_surface *dst_surface; uapi_gfx2d_ops_mode ops_mode; } uapi_gfx2d_list; typedef struct { td_u8 total_layer_num; /* Total number of support input layers */ /* CNcomment: 支持的输入层个数 */ td_u8 max_graphic_layer_num; /* Max graphic layer */ /* CNcomment: 最大图形层个数 */ td_u8 max_video_layer_num; /* Max video layer */ /* CNcomment: 最大视频层个数 */ td_bool input_support_fmt[UAPI_GFX2D_FMT_MAX]; /* input support fmt */ td_bool output_support_fmt[UAPI_GFX2D_FMT_MAX]; /* output support fmt */ td_u32 min_stride; /* min stride */ td_u32 max_stride; /* max stride */ td_u8 stride_align; /* stride align */ td_u32 min_width; /* min width */ td_u32 max_width; /* max width */ td_u32 min_height; /* min height */ td_u32 max_height; /* max height */ td_u32 min_video_layer_width; /* min width of video layer */ /* CNcomment: 视频层最小宽度 */ td_u32 min_video_layer_height; /* min height of video layer */ /* 视频层最小高度 */ td_u32 max_horizontal_zme_ratio; /* maximum horizontal reduction factor */ /* CNcomment: 水平最大缩小倍数 */ td_u32 max_vertical_zme_ratio; /* vertical maximum reduction factor */ /* CNcomment: 垂直最大缩小倍数 */ td_u8 width_align; /* width alignment requirements */ /* CNcomment: 宽度对齐要求 */ td_bool compress_support_fmt[UAPI_GFX2D_FMT_MAX]; /* CNcomment: 压缩支持的格式 */ td_bool clip_support; /* Does Support clip */ /* CNcomment: 是否支持clip */ td_u8 graphic_layer_zme_num; /* Max zme support layers */ td_u8 video_layer_zme_num; /* Max zme support layers */ td_u32 max_frm_rate; /* 1080p max frame rate */ } uapi_gfx2d_capability; td_s32 uapi_gfx2d_open(uapi_gfx2d_dev_id dev_id); td_s32 uapi_gfx2d_close(uapi_gfx2d_dev_id dev_id); td_handle uapi_gfx2d_create(uapi_gfx2d_dev_id dev_id); td_s32 uapi_gfx2d_bitblit(td_handle handle, uapi_gfx2d_list *surface_list); td_s32 uapi_gfx2d_compose(td_handle handle, uapi_gfx2d_list *surface_list, td_bool is_sync); td_s32 uapi_gfx2d_submit(td_handle handle, td_bool is_sync, td_u32 time_out); td_s32 uapi_gfx2d_cancel(td_handle handle); td_s32 uapi_gfx2d_get_status(td_handle handle); td_s32 uapi_gfx2d_get_hw_status(uapi_gfx2d_dev_id dev_id); td_s32 uapi_gfx2d_destroy(td_handle handle); td_s32 uapi_gfx2d_get_capability(uapi_gfx2d_capability *capability); /* gfx2d support capability */ #ifdef __cplusplus #if __cplusplus } #endif #endif #endif /* __UAPI_GFX2D_H__ */