mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
drm/amd/display: DSC policy override when ODM combine is forced
[why] When we force ODM combine with DSC, we lose several 8 bit and 10 bit modes in validation and thus not able to use HDR. This is due to the number of horizontal slices used in DSC not properly being accounted for currently when 2:1 ODM Combine is forced. [how] Enforce at least two horizontal slices are used for DSC when ODM combine is forced. Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com> Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com> Signed-off-by: Nasir Osman <nasir.osman@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
4d5f872dbc
commit
6bfe9a23a8
|
|
@ -58,6 +58,7 @@ struct dc_dsc_config_options {
|
|||
uint32_t dsc_min_slice_height_override;
|
||||
uint32_t max_target_bpp_limit_override_x16;
|
||||
uint32_t slice_height_granularity;
|
||||
uint32_t dsc_force_odm_hslice_override;
|
||||
};
|
||||
|
||||
bool dc_dsc_parse_dsc_dpcd(const struct dc *dc,
|
||||
|
|
|
|||
|
|
@ -700,7 +700,7 @@ static int inc_num_slices(union dsc_enc_slice_caps slice_caps, int num_slices)
|
|||
}
|
||||
}
|
||||
|
||||
if (new_num_slices == num_slices) // No biger number of slices found
|
||||
if (new_num_slices == num_slices) // No bigger number of slices found
|
||||
new_num_slices++;
|
||||
|
||||
return new_num_slices;
|
||||
|
|
@ -952,6 +952,13 @@ static bool setup_dsc_config(
|
|||
else
|
||||
is_dsc_possible = false;
|
||||
}
|
||||
// When we force 2:1 ODM, we can't have 1 slice to divide amongst 2 separate DSC instances
|
||||
// need to enforce at minimum 2 horizontal slices
|
||||
if (options->dsc_force_odm_hslice_override) {
|
||||
num_slices_h = fit_num_slices_up(dsc_common_caps.slice_caps, 2);
|
||||
if (num_slices_h == 0)
|
||||
is_dsc_possible = false;
|
||||
}
|
||||
|
||||
if (!is_dsc_possible)
|
||||
goto done;
|
||||
|
|
@ -1163,6 +1170,7 @@ void dc_dsc_policy_set_disable_dsc_stream_overhead(bool disable)
|
|||
void dc_dsc_get_default_config_option(const struct dc *dc, struct dc_dsc_config_options *options)
|
||||
{
|
||||
options->dsc_min_slice_height_override = dc->debug.dsc_min_slice_height_override;
|
||||
options->dsc_force_odm_hslice_override = dc->debug.force_odm_combine;
|
||||
options->max_target_bpp_limit_override_x16 = 0;
|
||||
options->slice_height_granularity = 1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user