video: rockchip: rga3: support fg/bg global alpha

Change-Id: I64d2446d494e179e9e2024c14bc768c2ed0dca47
Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com>
This commit is contained in:
Yu Qiaowei
2023-08-18 08:38:12 +00:00
committed by Tao Huang
parent 360d892f93
commit ac55c7d667
3 changed files with 35 additions and 39 deletions

View File

@@ -612,7 +612,7 @@ struct rga_req {
/* porter duff alpha mode sel */
uint8_t PD_mode;
/* global alpha value */
/* legacy: global alpha value */
uint8_t alpha_global_value;
/* rop2/3/4 code scan from rop code table*/
@@ -674,7 +674,11 @@ struct rga_req {
struct rga_pre_intr_info pre_intr_info;
uint8_t reservr[59];
/* global alpha */
uint8_t fg_global_alpha;
uint8_t bg_global_alpha;
uint8_t reservr[57];
};
struct rga_alpha_config {

View File

@@ -2087,11 +2087,21 @@ static void rga_cmd_to_rga2_cmd(struct rga_scheduler_t *scheduler,
req->alpha_config.bg_pixel_alpha_en =
rga_is_alpha_format(req->dst.format);
req->alpha_config.fg_global_alpha_en = false;
req->alpha_config.bg_global_alpha_en = false;
if (req_rga->fg_global_alpha < 0xff) {
req->alpha_config.fg_global_alpha_en = true;
req->alpha_config.fg_global_alpha_value = req_rga->fg_global_alpha;
} else if (!req->alpha_config.fg_pixel_alpha_en) {
req->alpha_config.fg_global_alpha_en = true;
req->alpha_config.fg_global_alpha_value = 0xff;
}
req->alpha_config.fg_global_alpha_value = req_rga->alpha_global_value;
req->alpha_config.bg_global_alpha_value = req_rga->alpha_global_value;
if (req_rga->bg_global_alpha < 0xff) {
req->alpha_config.bg_global_alpha_en = true;
req->alpha_config.bg_global_alpha_value = req_rga->bg_global_alpha;
} else if (!req->alpha_config.bg_pixel_alpha_en) {
req->alpha_config.bg_global_alpha_en = true;
req->alpha_config.bg_global_alpha_value = 0xff;
}
/* porter duff alpha enable */
switch (req_rga->PD_mode) {
@@ -2105,20 +2115,6 @@ static void rga_cmd_to_rga2_cmd(struct rga_scheduler_t *scheduler,
req->alpha_config.mode = RGA_ALPHA_BLEND_DST;
break;
case 3:
if ((req_rga->alpha_rop_mode & 3) == 0) {
/* both use globalAlpha. */
req->alpha_config.fg_global_alpha_en = true;
req->alpha_config.bg_global_alpha_en = true;
} else if ((req_rga->alpha_rop_mode & 3) == 1) {
/* Do not use globalAlpha. */
req->alpha_config.fg_global_alpha_en = false;
req->alpha_config.bg_global_alpha_en = false;
} else {
/* dst use globalAlpha */
req->alpha_config.fg_global_alpha_en = false;
req->alpha_config.bg_global_alpha_en = true;
}
req->alpha_config.mode = RGA_ALPHA_BLEND_SRC_OVER;
break;
case 4:

View File

@@ -1070,7 +1070,7 @@ static void RGA3_set_reg_overlap_info(u8 *base, struct rga3_req *msg)
bottom_color_ctrl.bits.alpha_cal_mode = RGA_ALPHA_SATURATION;
top_color_ctrl.bits.global_alpha = config->fg_global_alpha_value;
bottom_color_ctrl.bits.global_alpha = config->fg_global_alpha_value;
bottom_color_ctrl.bits.global_alpha = config->bg_global_alpha_value;
/* porter duff alpha enable */
switch (config->mode) {
@@ -1643,11 +1643,21 @@ static void rga_cmd_to_rga3_cmd(struct rga_req *req_rga, struct rga3_req *req)
req->alpha_config.fg_pixel_alpha_en = rga_is_alpha_format(req->win1.format);
req->alpha_config.bg_pixel_alpha_en = rga_is_alpha_format(req->win0.format);
req->alpha_config.fg_global_alpha_en = false;
req->alpha_config.bg_global_alpha_en = false;
if (req_rga->fg_global_alpha < 0xff) {
req->alpha_config.fg_global_alpha_en = true;
req->alpha_config.fg_global_alpha_value = req_rga->fg_global_alpha;
} else if (!req->alpha_config.fg_pixel_alpha_en) {
req->alpha_config.fg_global_alpha_en = true;
req->alpha_config.fg_global_alpha_value = 0xff;
}
req->alpha_config.fg_global_alpha_value = req_rga->alpha_global_value;
req->alpha_config.bg_global_alpha_value = req_rga->alpha_global_value;
if (req_rga->bg_global_alpha < 0xff) {
req->alpha_config.bg_global_alpha_en = true;
req->alpha_config.bg_global_alpha_value = req_rga->bg_global_alpha;
} else if (!req->alpha_config.bg_pixel_alpha_en) {
req->alpha_config.bg_global_alpha_en = true;
req->alpha_config.bg_global_alpha_value = 0xff;
}
/* porter duff alpha enable */
switch (req_rga->PD_mode) {
@@ -1661,20 +1671,6 @@ static void rga_cmd_to_rga3_cmd(struct rga_req *req_rga, struct rga3_req *req)
req->alpha_config.mode = RGA_ALPHA_BLEND_DST;
break;
case 3:
if ((req_rga->alpha_rop_mode & 3) == 0) {
/* both use globalAlpha. */
req->alpha_config.fg_global_alpha_en = true;
req->alpha_config.bg_global_alpha_en = true;
} else if ((req_rga->alpha_rop_mode & 3) == 1) {
/* Do not use globalAlpha. */
req->alpha_config.fg_global_alpha_en = false;
req->alpha_config.bg_global_alpha_en = false;
} else {
/* dst use globalAlpha */
req->alpha_config.fg_global_alpha_en = false;
req->alpha_config.bg_global_alpha_en = true;
}
req->alpha_config.mode = RGA_ALPHA_BLEND_SRC_OVER;
break;
case 4: