From adb732d66cf13b6c4276b498fab5dc5a09bebce1 Mon Sep 17 00:00:00 2001 From: Vitaly Prosyak Date: Tue, 26 Mar 2019 17:34:00 -0500 Subject: drm/amd/display: Add some tm3dlut flags Move flags from color_gamma.h to mod_shared.h and add more options and setting structures Signed-off-by: Vitaly Prosyak Reviewed-by: Aric Cyr Acked-by: Bhawanpreet Lakha Acked-by: Vitaly Prosyak Signed-off-by: Alex Deucher --- .../gpu/drm/amd/display/modules/inc/mod_shared.h | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'drivers/gpu/drm/amd/display/modules/inc/mod_shared.h') diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h b/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h index b711e7e6c204..5a631854efda 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h @@ -45,5 +45,42 @@ enum vrr_packet_type { PACKET_TYPE_VTEM }; +#if defined(CONFIG_DRM_AMD_DC_DCN2_0) +union tm3dlut_internal_flags { + unsigned int raw; + struct { + unsigned int dochroma_scale :1; + unsigned int spec_version :3; + unsigned int use_zero_display_black :1; + unsigned int use_zero_source_black :1; + unsigned int force_display_black :6; + unsigned int apply_display_gamma :1; + unsigned int exp_shaper_max :6; + unsigned int unity3dlut :1; + unsigned int bypass3dlut :1; + unsigned int use3dlut :1; + unsigned int less_than_dcip3 :1; + unsigned int override_lum :1; + unsigned int reseved :8; + } bits; +}; + +enum tm_show_option_internal { + tm_show_option_internal_single_file = 0,/*flags2 not in use*/ + tm_show_option_internal_duplicate_file,/*use flags2*/ + tm_show_option_internal_duplicate_sidebyside/*use flags2*/ +}; + +struct tm3dlut_settings { + unsigned char version; + union tm3dlut_internal_flags flags; + union tm3dlut_internal_flags flags2; + enum tm_show_option_internal option; + unsigned int min_lum;/*multiplied by 100*/ + unsigned int max_lum; + unsigned int min_lum2; + unsigned int max_lum2; +}; +#endif #endif /* MOD_SHARED_H_ */ -- cgit v1.2.3 From 83a76b53737e5e0ad52606aefa69ac9ce307b697 Mon Sep 17 00:00:00 2001 From: Vitaly Prosyak Date: Fri, 29 Mar 2019 12:47:10 -0500 Subject: drm/amd/display: Add 3dlut control flags [Why & How] The follow up change Improve some naming for fields and structs Signed-off-by: Vitaly Prosyak Reviewed-by: Aric Cyr Acked-by: Bhawanpreet Lakha Acked-by: Vitaly Prosyak Signed-off-by: Alex Deucher --- .../gpu/drm/amd/display/modules/inc/mod_shared.h | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'drivers/gpu/drm/amd/display/modules/inc/mod_shared.h') diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h b/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h index 5a631854efda..9406d0a167ee 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h @@ -46,35 +46,35 @@ enum vrr_packet_type { }; #if defined(CONFIG_DRM_AMD_DC_DCN2_0) -union tm3dlut_internal_flags { +union lut3d_control_flags { unsigned int raw; struct { - unsigned int dochroma_scale :1; - unsigned int spec_version :3; - unsigned int use_zero_display_black :1; - unsigned int use_zero_source_black :1; - unsigned int force_display_black :6; - unsigned int apply_display_gamma :1; - unsigned int exp_shaper_max :6; - unsigned int unity3dlut :1; - unsigned int bypass3dlut :1; - unsigned int use3dlut :1; - unsigned int less_than_dcip3 :1; - unsigned int override_lum :1; - unsigned int reseved :8; + unsigned int do_chroma_scale :1; + unsigned int spec_version :3; + unsigned int use_zero_display_black :1; + unsigned int use_zero_source_black :1; + unsigned int force_display_black :6; + unsigned int apply_display_gamma :1; + unsigned int exp_shaper_max :6; + unsigned int unity_3dlut :1; + unsigned int bypass_3dlut :1; + unsigned int use_3dlut :1; + unsigned int less_than_dcip3 :1; + unsigned int override_lum :1; + unsigned int reseved :8; } bits; }; enum tm_show_option_internal { tm_show_option_internal_single_file = 0,/*flags2 not in use*/ - tm_show_option_internal_duplicate_file,/*use flags2*/ + tm_show_option_internal_duplicate_file, /*use flags2*/ tm_show_option_internal_duplicate_sidebyside/*use flags2*/ }; -struct tm3dlut_settings { +struct lut3d_settings { unsigned char version; - union tm3dlut_internal_flags flags; - union tm3dlut_internal_flags flags2; + union lut3d_control_flags flags; + union lut3d_control_flags flags2; enum tm_show_option_internal option; unsigned int min_lum;/*multiplied by 100*/ unsigned int max_lum; -- cgit v1.2.3 From 97516065a0da1c771ee0035b11a5f9a46d8fd021 Mon Sep 17 00:00:00 2001 From: Vitaly Prosyak Date: Tue, 9 Apr 2019 10:39:25 -0500 Subject: drm/amd/display: add flags for gamut map library [Why & How] Gamut map lib provides a wider gamut mapping options vs BT2390 Signed-off-by: Vitaly Prosyak Reviewed-by: Krunoslav Kovac Acked-by: Aric Cyr Acked-by: Bhawanpreet Lakha Acked-by: Vitaly Prosyak Signed-off-by: Alex Deucher --- .../gpu/drm/amd/display/modules/inc/mod_shared.h | 24 +++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'drivers/gpu/drm/amd/display/modules/inc/mod_shared.h') diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h b/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h index 9406d0a167ee..6c877eeba429 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h @@ -61,7 +61,10 @@ union lut3d_control_flags { unsigned int use_3dlut :1; unsigned int less_than_dcip3 :1; unsigned int override_lum :1; - unsigned int reseved :8; + unsigned int use_gamut_map_lib :1; + unsigned int chromatic_adaptation_src :1; + unsigned int chromatic_adaptation_dst :1; + unsigned int reseved :5; } bits; }; @@ -71,6 +74,21 @@ enum tm_show_option_internal { tm_show_option_internal_duplicate_sidebyside/*use flags2*/ }; +enum lut3d_control_gamut_map { + lut3d_control_gamut_map_none = 0, + lut3d_control_gamut_map_tonemap, + lut3d_control_gamut_map_chto, + lut3d_control_gamut_map_chto_chso, + lut3d_control_gamut_map_chto_chci +}; + +enum lut3d_control_rotation_mode { + lut3d_control_rotation_mode_none = 0, + lut3d_control_rotation_mode_hue, + lut3d_control_rotation_mode_cc, + lut3d_control_rotation_mode_hue_cc +}; + struct lut3d_settings { unsigned char version; union lut3d_control_flags flags; @@ -80,6 +98,10 @@ struct lut3d_settings { unsigned int max_lum; unsigned int min_lum2; unsigned int max_lum2; + enum lut3d_control_gamut_map map; + enum lut3d_control_rotation_mode rotation; + enum lut3d_control_gamut_map map2; + enum lut3d_control_rotation_mode rotation2; }; #endif -- cgit v1.2.3 From f99b6f4f216ac0ff7f477dd36c88e7b229292dec Mon Sep 17 00:00:00 2001 From: Vitaly Prosyak Date: Thu, 18 Apr 2019 09:51:12 -0500 Subject: drm/amd/display: Integrate color transform3x4 with 3dlut tm [Why & How] Reuse existent code path (dcn1+) and in order to do that apply de gamma in 1D blender LUT and re use MPC OGAM. Follow up is required. Signed-off-by: Vitaly Prosyak Reviewed-by: Aric Cyr Acked-by: Bhawanpreet Lakha Acked-by: Krunoslav Kovac Acked-by: Vitaly Prosyak Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/display/dc/core/dc.c | 7 +++++++ drivers/gpu/drm/amd/display/dc/core/dc_surface.c | 10 ++++++++++ drivers/gpu/drm/amd/display/dc/dc.h | 1 + drivers/gpu/drm/amd/display/modules/inc/mod_shared.h | 7 ++++--- 4 files changed, 22 insertions(+), 3 deletions(-) (limited to 'drivers/gpu/drm/amd/display/modules/inc/mod_shared.h') diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index 6abf22aaf571..867a84c2bfbf 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -1669,6 +1669,13 @@ static void copy_surface_update_to_plane( srf_update->lut3d_func)) memcpy(surface->lut3d_func, srf_update->lut3d_func, sizeof(*surface->lut3d_func)); + + if (srf_update->blend_tf && + (surface->blend_tf != + srf_update->blend_tf)) + memcpy(surface->blend_tf, srf_update->blend_tf, + sizeof(*surface->blend_tf)); + #endif if (srf_update->input_csc_color_matrix) surface->input_csc_color_matrix = diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c index 60f20d96f9e0..394a87981614 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c @@ -60,6 +60,11 @@ static void construct(struct dc_context *ctx, struct dc_plane_state *plane_state plane_state->lut3d_func->ctx = ctx; plane_state->lut3d_func->initialized = false; } + plane_state->blend_tf = dc_create_transfer_func(); + if (plane_state->blend_tf != NULL) { + plane_state->blend_tf->type = TF_TYPE_BYPASS; + plane_state->blend_tf->ctx = ctx; + } #endif } @@ -85,6 +90,11 @@ static void destruct(struct dc_plane_state *plane_state) plane_state->lut3d_func); plane_state->lut3d_func = NULL; } + if (plane_state->blend_tf != NULL) { + dc_transfer_func_release( + plane_state->blend_tf); + plane_state->blend_tf = NULL; + } #endif } diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h index 139ea7354910..53a3876841cc 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -761,6 +761,7 @@ struct dc_surface_update { #if defined(CONFIG_DRM_AMD_DC_DCN2_0) const struct dc_transfer_func *func_shaper; const struct dc_3dlut *lut3d_func; + const struct dc_transfer_func *blend_tf; #endif }; diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h b/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h index 6c877eeba429..b45f7d65e76a 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_shared.h @@ -64,7 +64,8 @@ union lut3d_control_flags { unsigned int use_gamut_map_lib :1; unsigned int chromatic_adaptation_src :1; unsigned int chromatic_adaptation_dst :1; - unsigned int reseved :5; + unsigned int do_blender_lut_degamma :1; + unsigned int reseved :4; } bits; }; @@ -78,8 +79,8 @@ enum lut3d_control_gamut_map { lut3d_control_gamut_map_none = 0, lut3d_control_gamut_map_tonemap, lut3d_control_gamut_map_chto, - lut3d_control_gamut_map_chto_chso, - lut3d_control_gamut_map_chto_chci + lut3d_control_gamut_map_chso, + lut3d_control_gamut_map_chci }; enum lut3d_control_rotation_mode { -- cgit v1.2.3