[PATCH] drm/i915/dsc: Use helper to calculate range_bpg_offset

Ankit Nautiyal ankit.k.nautiyal at intel.com
Mon Jul 10 14:33:01 UTC 2023


We get range_bpg_offset for different bpps based on linear interpolation
from values given for nearby bpps.
Use a helper to get these values.

Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
---
 drivers/gpu/drm/i915/display/intel_vdsc.c | 31 ++++++++++++++---------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_vdsc.c b/drivers/gpu/drm/i915/display/intel_vdsc.c
index bd9116d2cd76..fe293e3a1867 100644
--- a/drivers/gpu/drm/i915/display/intel_vdsc.c
+++ b/drivers/gpu/drm/i915/display/intel_vdsc.c
@@ -52,6 +52,13 @@ static bool is_pipe_dsc(struct intel_crtc *crtc, enum transcoder cpu_transcoder)
 	return true;
 }
 
+static int
+get_range_bpg_offset(int bpp_low, int offset_low, int bpp_high, int offset_high, int bpp)
+{
+	return offset_low + DIV_ROUND_UP((offset_high - offset_low) * (bpp - bpp_low),
+					 (bpp_low - bpp_high));
+}
+
 static void
 calculate_rc_params(struct drm_dsc_config *vdsc_cfg)
 {
@@ -70,7 +77,7 @@ calculate_rc_params(struct drm_dsc_config *vdsc_cfg)
 		10, 8, 6, 4, 2, 0, -2, -4, -6, -8, -10, -10, -12, -12, -12
 	};
 	int qp_bpc_modifier = (bpc - 8) * 2;
-	u32 res, buf_i, bpp_i;
+	u32 buf_i, bpp_i;
 
 	if (vdsc_cfg->slice_height >= 8)
 		vdsc_cfg->first_line_bpg_offset =
@@ -108,19 +115,19 @@ calculate_rc_params(struct drm_dsc_config *vdsc_cfg)
 			intel_lookup_range_max_qp(bpc, buf_i, bpp_i, vdsc_cfg->native_420);
 
 		/* Calculate range_bpg_offset */
-		if (bpp <= 6) {
+		if (bpp <= 6)
 			range_bpg_offset = ofs_und6[buf_i];
-		} else if (bpp <= 8) {
-			res = DIV_ROUND_UP(((bpp - 6) * (ofs_und8[buf_i] - ofs_und6[buf_i])), 2);
-			range_bpg_offset = ofs_und6[buf_i] + res;
-		} else if (bpp <= 12) {
-			range_bpg_offset = ofs_und8[buf_i];
-		} else if (bpp <= 15) {
-			res = DIV_ROUND_UP(((bpp - 12) * (ofs_und15[buf_i] - ofs_und12[buf_i])), 3);
-			range_bpg_offset = ofs_und12[buf_i] + res;
-		} else {
+		else if (bpp <= 8)
+			range_bpg_offset = get_range_bpg_offset(6, ofs_und6[buf_i],
+								8, ofs_und8[buf_i], bpp);
+		else if (bpp <= 12)
+			range_bpg_offset = get_range_bpg_offset(8, ofs_und8[buf_i],
+								12, ofs_und12[buf_i], bpp);
+		else if (bpp <= 15)
+			range_bpg_offset = get_range_bpg_offset(12, ofs_und12[buf_i],
+								15, ofs_und15[buf_i], bpp);
+		else
 			range_bpg_offset = ofs_und15[buf_i];
-		}
 
 		vdsc_cfg->rc_range_params[buf_i].range_bpg_offset =
 			range_bpg_offset & DSC_RANGE_BPG_OFFSET_MASK;
-- 
2.40.1



More information about the Intel-gfx-trybot mailing list