void ge2dgen_post_release_src2buf(ge2d_context_t *wq, unsigned buffer) { ge2d_cmd_t *ge2d_cmd_cfg = ge2d_wq_get_cmd(wq); ge2d_cmd_cfg->src2_buffer = buffer; ge2d_cmd_cfg->release_flag |= RELEASE_SRC2_BUFFER; }
static void inline _bitblt(ge2d_context_t *wq, int src_x, int src_y, int w, int h, int dst_x, int dst_y, int block) { ge2d_cmd_t *ge2d_cmd_cfg = ge2d_wq_get_cmd(wq); ge2d_cmd_cfg->src1_x_start = src_x; ge2d_cmd_cfg->src1_x_end = src_x+w-1; ge2d_cmd_cfg->src1_y_start = src_y; ge2d_cmd_cfg->src1_y_end = src_y+h-1; ge2d_cmd_cfg->dst_x_start = dst_x; ge2d_cmd_cfg->dst_x_end = dst_x+w-1; ge2d_cmd_cfg->dst_y_start = dst_y; ge2d_cmd_cfg->dst_y_end = dst_y+h-1; ge2d_cmd_cfg->sc_hsc_en = 0; ge2d_cmd_cfg->sc_vsc_en = 0; ge2d_cmd_cfg->hsc_rpt_p0_num = 0; ge2d_cmd_cfg->vsc_rpt_l0_num = 0; ge2d_cmd_cfg->hsc_div_en = 0; ge2d_cmd_cfg->color_blend_mode = OPERATION_LOGIC; ge2d_cmd_cfg->color_logic_op = LOGIC_OPERATION_COPY; ge2d_cmd_cfg->alpha_blend_mode = OPERATION_LOGIC; ge2d_cmd_cfg->alpha_logic_op = LOGIC_OPERATION_COPY; ge2d_cmd_cfg->wait_done_flag = block; ge2d_wq_add_work(wq); }
static void inline _fillrect(ge2d_context_t *wq, int x, int y, int w, int h, unsigned color, int blk) { ge2d_cmd_t *ge2d_cmd_cfg = ge2d_wq_get_cmd(wq); ge2dgen_src_color(wq, color); ge2d_cmd_cfg->src1_x_start = x; ge2d_cmd_cfg->src1_x_end = x+w-1; ge2d_cmd_cfg->src1_y_start = y; ge2d_cmd_cfg->src1_y_end = y+h-1; ge2d_cmd_cfg->dst_x_start = x; ge2d_cmd_cfg->dst_x_end = x+w-1; ge2d_cmd_cfg->dst_y_start = y; ge2d_cmd_cfg->dst_y_end = y+h-1; ge2d_cmd_cfg->sc_hsc_en = 0; ge2d_cmd_cfg->sc_vsc_en = 0; ge2d_cmd_cfg->hsc_rpt_p0_num = 0; ge2d_cmd_cfg->vsc_rpt_l0_num = 0; ge2d_cmd_cfg->hsc_div_en = 0; ge2d_cmd_cfg->src1_fill_color_en = 1; ge2d_cmd_cfg->color_blend_mode = OPERATION_LOGIC; ge2d_cmd_cfg->color_logic_op = LOGIC_OPERATION_COPY; ge2d_cmd_cfg->alpha_blend_mode = OPERATION_LOGIC; ge2d_cmd_cfg->alpha_logic_op = LOGIC_OPERATION_COPY; ge2d_cmd_cfg->wait_done_flag = 1; ge2d_wq_add_work(wq); }
void ge2dgen_cb(ge2d_context_t *wq, int (*cmd_cb)(unsigned), unsigned param) { ge2d_cmd_t *ge2d_cmd_cfg = ge2d_wq_get_cmd(wq); ge2d_cmd_cfg->cmd_cb = cmd_cb; ge2d_cmd_cfg->cmd_cb_param = param; ge2d_cmd_cfg->release_flag |= RELEASE_CB; }
void ge2dgen_rendering_dir(ge2d_context_t *wq, int src_x_dir, int src_y_dir, int dst_x_dir, int dst_y_dir, int dst_xy_swap) { ge2d_cmd_t *ge2d_cmd_cfg = ge2d_wq_get_cmd(wq); ge2d_cmd_cfg->src1_x_rev = src_x_dir; ge2d_cmd_cfg->src1_y_rev = src_y_dir; ge2d_cmd_cfg->dst_x_rev = dst_x_dir; ge2d_cmd_cfg->dst_y_rev = dst_y_dir; ge2d_cmd_cfg->dst_xy_swap = dst_xy_swap; }
static void inline _bitblt_noalpha(ge2d_context_t *wq, int src_x, int src_y, int w, int h, int dst_x, int dst_y, int block) { ge2d_cmd_t *ge2d_cmd_cfg = ge2d_wq_get_cmd(wq); ge2d_dp_gen_t *dp_gen_cfg = ge2d_wq_get_dp_gen(wq); if(dp_gen_cfg->alu_const_color != 0xff) { dp_gen_cfg->alu_const_color = 0xff; wq->config.update_flag |= UPDATE_DP_GEN; } ge2d_cmd_cfg->src1_x_start = src_x; ge2d_cmd_cfg->src1_x_end = src_x+w-1; ge2d_cmd_cfg->src1_y_start = src_y; ge2d_cmd_cfg->src1_y_end = src_y+h-1; ge2d_cmd_cfg->dst_x_start = dst_x; ge2d_cmd_cfg->dst_x_end = dst_x+w-1; ge2d_cmd_cfg->dst_y_start = dst_y; ge2d_cmd_cfg->dst_y_end = dst_y+h-1; ge2d_cmd_cfg->sc_hsc_en = 0; ge2d_cmd_cfg->sc_vsc_en = 0; ge2d_cmd_cfg->hsc_rpt_p0_num = 0; ge2d_cmd_cfg->vsc_rpt_l0_num = 0; ge2d_cmd_cfg->hsc_div_en = 0; ge2d_cmd_cfg->color_blend_mode = OPERATION_LOGIC; ge2d_cmd_cfg->color_logic_op = LOGIC_OPERATION_COPY; ge2d_cmd_cfg->alpha_blend_mode = OPERATION_LOGIC; ge2d_cmd_cfg->alpha_logic_op = LOGIC_OPERATION_SET; ge2d_cmd_cfg->wait_done_flag = block; ge2d_wq_add_work(wq); }
void ge2dgen_post_release_src2canvas(ge2d_context_t *wq) { ge2d_cmd_t *ge2d_cmd_cfg = ge2d_wq_get_cmd(wq); ge2d_cmd_cfg->release_flag |= RELEASE_SRC2_CANVAS; }
int dev_ge2d_cmd(ge2d_context_t *context ,int cmd,src_dst_info_t *info) { ge2d_cmd_t *ge2d_cmd_cfg = ge2d_wq_get_cmd(context); ge2d_config_t *cfg=&context->config; rectangle_t *src=&info->src_rect,*dst=&info->dst_rect; unsigned int color=info->color; ge2d_cmd_cfg->sc_hsc_en = 0; ge2d_cmd_cfg->sc_vsc_en = 0; ge2d_cmd_cfg->hsc_rpt_p0_num = 0; ge2d_cmd_cfg->vsc_rpt_l0_num = 0; ge2d_cmd_cfg->hsc_div_en = 0; switch (cmd) { case CMD_FILLRECT: cfg->src1_data.def_color=color; ge2d_cmd_cfg->dst_x_start = dst->x; ge2d_cmd_cfg->dst_x_end = dst->x+dst->w-1; ge2d_cmd_cfg->dst_y_start = dst->y; ge2d_cmd_cfg->dst_y_end = dst->y+dst->h-1; ge2d_cmd_cfg->src1_x_start = ge2d_cmd_cfg->dst_x_start; ge2d_cmd_cfg->src1_x_end = ge2d_cmd_cfg->dst_x_end ; ge2d_cmd_cfg->src1_y_start= ge2d_cmd_cfg->dst_y_start ; ge2d_cmd_cfg->src1_y_end= ge2d_cmd_cfg->dst_y_end; ge2d_cmd_cfg->src1_fill_color_en = 1; break; case CMD_BITBLT: ge2d_cmd_cfg->src1_x_start = src->x; ge2d_cmd_cfg->src1_x_end = src->x+src->w-1; ge2d_cmd_cfg->src1_y_start = src->y; ge2d_cmd_cfg->src1_y_end = src->y+src->h-1; ge2d_cmd_cfg->dst_x_start = dst->x; ge2d_cmd_cfg->dst_x_end = dst->x+src->w-1; ge2d_cmd_cfg->dst_y_start = dst->y; ge2d_cmd_cfg->dst_y_end = dst->y+src->h-1; break; case CMD_STRETCH_BLIT: ge2d_cmd_cfg->src1_x_start = src->x; ge2d_cmd_cfg->src1_x_end = src->x+src->w-1; ge2d_cmd_cfg->src1_y_start = src->y; ge2d_cmd_cfg->src1_y_end = src->y+src->h-1; ge2d_cmd_cfg->dst_x_start = dst->x; ge2d_cmd_cfg->dst_x_end = dst->x+dst->w-1; ge2d_cmd_cfg->dst_y_start = dst->y; ge2d_cmd_cfg->dst_y_end = dst->y+dst->h-1; ge2d_cmd_cfg->sc_hsc_en = 1; ge2d_cmd_cfg->sc_vsc_en = 1; ge2d_cmd_cfg->hsc_rpt_p0_num = 1; ge2d_cmd_cfg->vsc_rpt_l0_num = 1; ge2d_cmd_cfg->hsc_div_en = 1; break; } ge2d_cmd_cfg->color_blend_mode = OPERATION_LOGIC; ge2d_cmd_cfg->color_logic_op = LOGIC_OPERATION_COPY; ge2d_cmd_cfg->alpha_blend_mode = OPERATION_LOGIC; ge2d_cmd_cfg->alpha_logic_op = LOGIC_OPERATION_COPY; ge2d_set_src1_data(&cfg->src1_data); ge2d_set_src1_gen(&cfg->src1_gen); ge2d_set_src2_dst_data(&cfg->src2_dst_data); ge2d_set_src2_dst_gen(&cfg->src2_dst_gen); ge2d_set_dp_gen(&cfg->dp_gen); ge2d_set_src1_scale_coef(FILTER_TYPE_TRIANGLE, FILTER_TYPE_TRIANGLE); ge2d_set_cmd(ge2d_cmd_cfg); ge2d_wait_done(); memset(ge2d_cmd_cfg,0,sizeof(ge2d_cmd_t)); return 0; }