From: Krunoslav Kovac <krunoslav.ko...@amd.com>

We assume FP16 1.0 frame buffer value maps to 80 nits.
DC changes are to make this configurable.

Signed-off-by: Krunoslav Kovac <krunoslav.ko...@amd.com>
Reviewed-by: Anthony Koo <anthony....@amd.com>
Acked-by: Harry Wentland <harry.wentl...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc.c | 6 +++++-
 drivers/gpu/drm/amd/display/dc/dc.h      | 5 +++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c 
b/drivers/gpu/drm/amd/display/dc/core/dc.c
index 350458d3730c..990f891a46f6 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -1057,6 +1057,9 @@ static enum surface_update_type 
get_plane_info_update_type(const struct dc_surfa
        if (u->plane_info->input_tf != u->surface->input_tf)
                update_flags->bits.input_tf_change = 1;
 
+       if (u->plane_info->sdr_white_level != u->surface->sdr_white_level)
+               update_flags->bits.output_tf_change = 1;
+
        if (u->plane_info->horizontal_mirror != u->surface->horizontal_mirror)
                update_flags->bits.horizontal_mirror_change = 1;
 
@@ -1101,7 +1104,8 @@ static enum surface_update_type 
get_plane_info_update_type(const struct dc_surfa
                        || update_flags->bits.stereo_format_change
                        || update_flags->bits.gamma_change
                        || update_flags->bits.bpp_change
-                       || update_flags->bits.bandwidth_change)
+                       || update_flags->bits.bandwidth_change
+                       || update_flags->bits.output_tf_change)
                return UPDATE_TYPE_FULL;
 
        return UPDATE_TYPE_MED;
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
b/drivers/gpu/drm/amd/display/dc/dc.h
index bc595bc15fe2..41d095318a5c 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -367,6 +367,8 @@ struct dc_transfer_func {
        struct dc_transfer_func_distributed_points tf_pts;
        enum dc_transfer_func_type type;
        enum dc_transfer_func_predefined tf;
+       /* FP16 1.0 reference level in nits, default is 80 nits, only for PQ*/
+       uint32_t sdr_ref_white_level;
        struct dc_context *ctx;
 };
 
@@ -397,6 +399,7 @@ union surface_update_flags {
                uint32_t position_change:1;
                uint32_t in_transfer_func_change:1;
                uint32_t input_csc_change:1;
+               uint32_t output_tf_change:1;
 
                /* Full updates */
                uint32_t new_plane:1;
@@ -428,6 +431,7 @@ struct dc_plane_state {
        struct dc_bias_and_scale *bias_and_scale;
        struct csc_transform input_csc_color_matrix;
        struct fixed31_32 coeff_reduction_factor;
+       uint32_t sdr_white_level;
 
        // TODO: No longer used, remove
        struct dc_hdr_static_metadata hdr_static_ctx;
@@ -464,6 +468,7 @@ struct dc_plane_info {
        enum plane_stereo_format stereo_format;
        enum dc_color_space color_space;
        enum color_transfer_func input_tf;
+       unsigned int sdr_white_level;
        bool horizontal_mirror;
        bool visible;
        bool per_pixel_alpha;
-- 
2.14.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to