mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
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:
@@ -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 {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user