};
static void get_dsc_bandwidth_range(
- const struct dc_dsc_policy *policy,
+ const uint32_t min_bpp,
+ const uint32_t max_bpp,
const struct dsc_enc_caps *dsc_caps,
const struct dc_crtc_timing *timing,
struct dc_dsc_bw_range *range)
range->stream_kbps = dc_bandwidth_in_kbps_from_timing(timing);
/* max dsc target bpp */
- range->max_kbps = dsc_round_up(policy->max_target_bpp * timing->pix_clk_100hz);
- range->max_target_bpp_x16 = policy->max_target_bpp * 16;
+ range->max_kbps = dsc_round_up(max_bpp * timing->pix_clk_100hz);
+ range->max_target_bpp_x16 = max_bpp * 16;
if (range->max_kbps > range->stream_kbps) {
/* max dsc target bpp is capped to native bandwidth */
range->max_kbps = range->stream_kbps;
}
/* min dsc target bpp */
- range->min_kbps = dsc_round_up(policy->min_target_bpp * timing->pix_clk_100hz);
- range->min_target_bpp_x16 = policy->min_target_bpp * 16;
+ range->min_kbps = dsc_round_up(min_bpp * timing->pix_clk_100hz);
+ range->min_target_bpp_x16 = min_bpp * 16;
if (range->min_kbps > range->max_kbps) {
/* min dsc target bpp is capped to max dsc bandwidth*/
range->min_kbps = range->max_kbps;
memset(&range, 0, sizeof(range));
- get_dsc_bandwidth_range(policy, dsc_common_caps, timing, &range);
+ get_dsc_bandwidth_range(policy->min_target_bpp, policy->max_target_bpp,
+ dsc_common_caps, timing, &range);
if (target_bandwidth_kbps >= range.stream_kbps) {
/* enough bandwidth without dsc */
*target_bpp_x16 = 0;
bool dc_dsc_compute_bandwidth_range(
const struct dc *dc,
+ const uint32_t min_bpp,
+ const uint32_t max_bpp,
const struct dsc_dec_dpcd_caps *dsc_sink_caps,
const struct dc_crtc_timing *timing,
struct dc_dsc_bw_range *range)
bool is_dsc_possible = false;
struct dsc_enc_caps dsc_enc_caps;
struct dsc_enc_caps dsc_common_caps;
+ struct dc_dsc_config config;
+
get_dsc_enc_caps(dc, &dsc_enc_caps, timing->pix_clk_100hz);
- is_dsc_possible = dc_intersect_dsc_caps(dsc_sink_caps, &dsc_enc_caps, timing->pixel_encoding, &dsc_common_caps);
+ is_dsc_possible = setup_dsc_config(dsc_sink_caps,
+ &dsc_enc_caps,
+ 0,
+ timing, &config);
if (is_dsc_possible)
- get_dsc_bandwidth_range(&dsc_policy, &dsc_common_caps, timing, range);
+ get_dsc_bandwidth_range(min_bpp, max_bpp, &dsc_common_caps, timing, range);
+
return is_dsc_possible;
}