mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 12:37:59 +07:00
drm/amd/display: Flattening to dc_transfer_func
Flattening dc transfer functions in the following manner: transfer_func > core_transfer_func > dc_transfer_func References to deleted structs are updated as needed. Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Acked-by: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
d7e3316cf4
commit
7b0c470fcb
@ -45,18 +45,11 @@ struct gamma {
|
|||||||
int ref_count;
|
int ref_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct transfer_func {
|
|
||||||
struct core_transfer_func protected;
|
|
||||||
int ref_count;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define DC_SURFACE_TO_SURFACE(dc_surface) container_of(dc_surface, struct surface, protected.public)
|
#define DC_SURFACE_TO_SURFACE(dc_surface) container_of(dc_surface, struct surface, protected.public)
|
||||||
#define CORE_SURFACE_TO_SURFACE(core_surface) container_of(core_surface, struct surface, protected)
|
#define CORE_SURFACE_TO_SURFACE(core_surface) container_of(core_surface, struct surface, protected)
|
||||||
|
|
||||||
#define DC_GAMMA_TO_GAMMA(dc_gamma) \
|
#define DC_GAMMA_TO_GAMMA(dc_gamma) \
|
||||||
container_of(dc_gamma, struct gamma, protected.public)
|
container_of(dc_gamma, struct gamma, protected.public)
|
||||||
#define DC_TRANSFER_FUNC_TO_TRANSFER_FUNC(dc_tf) \
|
|
||||||
container_of(dc_tf, struct transfer_func, protected.public)
|
|
||||||
#define CORE_GAMMA_TO_GAMMA(core_gamma) \
|
#define CORE_GAMMA_TO_GAMMA(core_gamma) \
|
||||||
container_of(core_gamma, struct gamma, protected)
|
container_of(core_gamma, struct gamma, protected)
|
||||||
|
|
||||||
@ -208,18 +201,14 @@ struct dc_gamma *dc_create_gamma()
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dc_transfer_func_retain(const struct dc_transfer_func *dc_tf)
|
void dc_transfer_func_retain(struct dc_transfer_func *tf)
|
||||||
{
|
{
|
||||||
struct transfer_func *tf = DC_TRANSFER_FUNC_TO_TRANSFER_FUNC(dc_tf);
|
|
||||||
|
|
||||||
ASSERT(tf->ref_count > 0);
|
ASSERT(tf->ref_count > 0);
|
||||||
++tf->ref_count;
|
++tf->ref_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dc_transfer_func_release(const struct dc_transfer_func *dc_tf)
|
void dc_transfer_func_release(struct dc_transfer_func *tf)
|
||||||
{
|
{
|
||||||
struct transfer_func *tf = DC_TRANSFER_FUNC_TO_TRANSFER_FUNC(dc_tf);
|
|
||||||
|
|
||||||
ASSERT(tf->ref_count > 0);
|
ASSERT(tf->ref_count > 0);
|
||||||
--tf->ref_count;
|
--tf->ref_count;
|
||||||
|
|
||||||
@ -229,14 +218,14 @@ void dc_transfer_func_release(const struct dc_transfer_func *dc_tf)
|
|||||||
|
|
||||||
struct dc_transfer_func *dc_create_transfer_func()
|
struct dc_transfer_func *dc_create_transfer_func()
|
||||||
{
|
{
|
||||||
struct transfer_func *tf = dm_alloc(sizeof(*tf));
|
struct dc_transfer_func *tf = dm_alloc(sizeof(*tf));
|
||||||
|
|
||||||
if (tf == NULL)
|
if (tf == NULL)
|
||||||
goto alloc_fail;
|
goto alloc_fail;
|
||||||
|
|
||||||
++tf->ref_count;
|
++tf->ref_count;
|
||||||
|
|
||||||
return &tf->protected.public;
|
return tf;
|
||||||
|
|
||||||
alloc_fail:
|
alloc_fail:
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -293,6 +293,8 @@ struct dc_transfer_func {
|
|||||||
struct dc_transfer_func_distributed_points tf_pts;
|
struct dc_transfer_func_distributed_points tf_pts;
|
||||||
enum dc_transfer_func_type type;
|
enum dc_transfer_func_type type;
|
||||||
enum dc_transfer_func_predefined tf;
|
enum dc_transfer_func_predefined tf;
|
||||||
|
struct dc_context *ctx;
|
||||||
|
int ref_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct dc_surface {
|
struct dc_surface {
|
||||||
@ -310,7 +312,7 @@ struct dc_surface {
|
|||||||
struct dc_hdr_static_metadata hdr_static_ctx;
|
struct dc_hdr_static_metadata hdr_static_ctx;
|
||||||
|
|
||||||
const struct dc_gamma *gamma_correction;
|
const struct dc_gamma *gamma_correction;
|
||||||
const struct dc_transfer_func *in_transfer_func;
|
struct dc_transfer_func *in_transfer_func;
|
||||||
|
|
||||||
enum dc_color_space color_space;
|
enum dc_color_space color_space;
|
||||||
enum surface_pixel_format format;
|
enum surface_pixel_format format;
|
||||||
@ -384,8 +386,8 @@ void dc_gamma_retain(const struct dc_gamma *dc_gamma);
|
|||||||
void dc_gamma_release(const struct dc_gamma **dc_gamma);
|
void dc_gamma_release(const struct dc_gamma **dc_gamma);
|
||||||
struct dc_gamma *dc_create_gamma(void);
|
struct dc_gamma *dc_create_gamma(void);
|
||||||
|
|
||||||
void dc_transfer_func_retain(const struct dc_transfer_func *dc_tf);
|
void dc_transfer_func_retain(struct dc_transfer_func *dc_tf);
|
||||||
void dc_transfer_func_release(const struct dc_transfer_func *dc_tf);
|
void dc_transfer_func_release(struct dc_transfer_func *dc_tf);
|
||||||
struct dc_transfer_func *dc_create_transfer_func(void);
|
struct dc_transfer_func *dc_create_transfer_func(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -465,7 +467,7 @@ struct dc_stream {
|
|||||||
|
|
||||||
struct freesync_context freesync_ctx;
|
struct freesync_context freesync_ctx;
|
||||||
|
|
||||||
const struct dc_transfer_func *out_transfer_func;
|
struct dc_transfer_func *out_transfer_func;
|
||||||
struct colorspace_transform gamut_remap_matrix;
|
struct colorspace_transform gamut_remap_matrix;
|
||||||
struct csc_transform csc_color_matrix;
|
struct csc_transform csc_color_matrix;
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ static bool dce110_set_input_transfer_func(
|
|||||||
const struct core_surface *surface)
|
const struct core_surface *surface)
|
||||||
{
|
{
|
||||||
struct input_pixel_processor *ipp = pipe_ctx->ipp;
|
struct input_pixel_processor *ipp = pipe_ctx->ipp;
|
||||||
const struct core_transfer_func *tf = NULL;
|
const struct dc_transfer_func *tf = NULL;
|
||||||
struct ipp_prescale_params prescale_params = { 0 };
|
struct ipp_prescale_params prescale_params = { 0 };
|
||||||
bool result = true;
|
bool result = true;
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ static bool dce110_set_input_transfer_func(
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (surface->public.in_transfer_func)
|
if (surface->public.in_transfer_func)
|
||||||
tf = DC_TRANSFER_FUNC_TO_CORE(surface->public.in_transfer_func);
|
tf = surface->public.in_transfer_func;
|
||||||
|
|
||||||
build_prescale_params(&prescale_params, surface);
|
build_prescale_params(&prescale_params, surface);
|
||||||
ipp->funcs->ipp_program_prescale(ipp, &prescale_params);
|
ipp->funcs->ipp_program_prescale(ipp, &prescale_params);
|
||||||
@ -262,8 +262,8 @@ static bool dce110_set_input_transfer_func(
|
|||||||
/* Default case if no input transfer function specified */
|
/* Default case if no input transfer function specified */
|
||||||
ipp->funcs->ipp_set_degamma(ipp,
|
ipp->funcs->ipp_set_degamma(ipp,
|
||||||
IPP_DEGAMMA_MODE_HW_sRGB);
|
IPP_DEGAMMA_MODE_HW_sRGB);
|
||||||
} else if (tf->public.type == TF_TYPE_PREDEFINED) {
|
} else if (tf->type == TF_TYPE_PREDEFINED) {
|
||||||
switch (tf->public.tf) {
|
switch (tf->tf) {
|
||||||
case TRANSFER_FUNCTION_SRGB:
|
case TRANSFER_FUNCTION_SRGB:
|
||||||
ipp->funcs->ipp_set_degamma(ipp,
|
ipp->funcs->ipp_set_degamma(ipp,
|
||||||
IPP_DEGAMMA_MODE_HW_sRGB);
|
IPP_DEGAMMA_MODE_HW_sRGB);
|
||||||
@ -283,7 +283,7 @@ static bool dce110_set_input_transfer_func(
|
|||||||
result = false;
|
result = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (tf->public.type == TF_TYPE_BYPASS) {
|
} else if (tf->type == TF_TYPE_BYPASS) {
|
||||||
ipp->funcs->ipp_set_degamma(ipp, IPP_DEGAMMA_MODE_BYPASS);
|
ipp->funcs->ipp_set_degamma(ipp, IPP_DEGAMMA_MODE_BYPASS);
|
||||||
} else {
|
} else {
|
||||||
/*TF_TYPE_DISTRIBUTED_POINTS - Not supported in DCE 11*/
|
/*TF_TYPE_DISTRIBUTED_POINTS - Not supported in DCE 11*/
|
||||||
|
@ -602,14 +602,14 @@ static bool dcn10_set_input_transfer_func(
|
|||||||
struct pipe_ctx *pipe_ctx, const struct core_surface *surface)
|
struct pipe_ctx *pipe_ctx, const struct core_surface *surface)
|
||||||
{
|
{
|
||||||
struct input_pixel_processor *ipp = pipe_ctx->ipp;
|
struct input_pixel_processor *ipp = pipe_ctx->ipp;
|
||||||
const struct core_transfer_func *tf = NULL;
|
const struct dc_transfer_func *tf = NULL;
|
||||||
bool result = true;
|
bool result = true;
|
||||||
|
|
||||||
if (ipp == NULL)
|
if (ipp == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (surface->public.in_transfer_func)
|
if (surface->public.in_transfer_func)
|
||||||
tf = DC_TRANSFER_FUNC_TO_CORE(surface->public.in_transfer_func);
|
tf = surface->public.in_transfer_func;
|
||||||
|
|
||||||
if (surface->public.gamma_correction && dce_use_lut(surface))
|
if (surface->public.gamma_correction && dce_use_lut(surface))
|
||||||
ipp->funcs->ipp_program_input_lut(ipp,
|
ipp->funcs->ipp_program_input_lut(ipp,
|
||||||
@ -617,8 +617,8 @@ static bool dcn10_set_input_transfer_func(
|
|||||||
|
|
||||||
if (tf == NULL)
|
if (tf == NULL)
|
||||||
ipp->funcs->ipp_set_degamma(ipp, IPP_DEGAMMA_MODE_BYPASS);
|
ipp->funcs->ipp_set_degamma(ipp, IPP_DEGAMMA_MODE_BYPASS);
|
||||||
else if (tf->public.type == TF_TYPE_PREDEFINED) {
|
else if (tf->type == TF_TYPE_PREDEFINED) {
|
||||||
switch (tf->public.tf) {
|
switch (tf->tf) {
|
||||||
case TRANSFER_FUNCTION_SRGB:
|
case TRANSFER_FUNCTION_SRGB:
|
||||||
ipp->funcs->ipp_set_degamma(ipp,
|
ipp->funcs->ipp_set_degamma(ipp,
|
||||||
IPP_DEGAMMA_MODE_HW_sRGB);
|
IPP_DEGAMMA_MODE_HW_sRGB);
|
||||||
@ -638,7 +638,7 @@ static bool dcn10_set_input_transfer_func(
|
|||||||
result = false;
|
result = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (tf->public.type == TF_TYPE_BYPASS) {
|
} else if (tf->type == TF_TYPE_BYPASS) {
|
||||||
ipp->funcs->ipp_set_degamma(ipp, IPP_DEGAMMA_MODE_BYPASS);
|
ipp->funcs->ipp_set_degamma(ipp, IPP_DEGAMMA_MODE_BYPASS);
|
||||||
} else {
|
} else {
|
||||||
/*TF_TYPE_DISTRIBUTED_POINTS*/
|
/*TF_TYPE_DISTRIBUTED_POINTS*/
|
||||||
|
@ -49,9 +49,6 @@ struct core_stream;
|
|||||||
#define DC_GAMMA_TO_CORE(dc_gamma) \
|
#define DC_GAMMA_TO_CORE(dc_gamma) \
|
||||||
container_of(dc_gamma, struct core_gamma, public)
|
container_of(dc_gamma, struct core_gamma, public)
|
||||||
|
|
||||||
#define DC_TRANSFER_FUNC_TO_CORE(dc_transfer_func) \
|
|
||||||
container_of(dc_transfer_func, struct core_transfer_func, public)
|
|
||||||
|
|
||||||
struct core_surface {
|
struct core_surface {
|
||||||
struct dc_surface public;
|
struct dc_surface public;
|
||||||
struct dc_surface_status status;
|
struct dc_surface_status status;
|
||||||
@ -63,11 +60,6 @@ struct core_gamma {
|
|||||||
struct dc_context *ctx;
|
struct dc_context *ctx;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct core_transfer_func {
|
|
||||||
struct dc_transfer_func public;
|
|
||||||
struct dc_context *ctx;
|
|
||||||
};
|
|
||||||
|
|
||||||
void enable_surface_flip_reporting(struct dc_surface *dc_surface,
|
void enable_surface_flip_reporting(struct dc_surface *dc_surface,
|
||||||
uint32_t controller_id);
|
uint32_t controller_id);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user