15ca02815Sjsg // SPDX-License-Identifier: MIT
25ca02815Sjsg /*
35ca02815Sjsg  * Copyright © 2021 Intel Corporation
45ca02815Sjsg  */
55ca02815Sjsg 
61bb76ff1Sjsg #include <drm/display/drm_dsc.h>
75ca02815Sjsg 
85ca02815Sjsg #include "i915_utils.h"
95ca02815Sjsg #include "intel_qp_tables.h"
105ca02815Sjsg 
115ca02815Sjsg /* from BPP 6 to 24 in steps of 0.5 */
125ca02815Sjsg #define RC_RANGE_QP444_8BPC_MAX_NUM_BPP		37
135ca02815Sjsg 
145ca02815Sjsg /* from BPP 6 to 30 in steps of 0.5 */
155ca02815Sjsg #define RC_RANGE_QP444_10BPC_MAX_NUM_BPP	49
165ca02815Sjsg 
175ca02815Sjsg /* from BPP 6 to 36 in steps of 0.5 */
185ca02815Sjsg #define RC_RANGE_QP444_12BPC_MAX_NUM_BPP	61
195ca02815Sjsg 
20*f005ef32Sjsg /* For YCbCr420 the bits_per_pixel sent in PPS params
21*f005ef32Sjsg  * is double the target bpp. The below values represent
22*f005ef32Sjsg  * the target bpp.
23*f005ef32Sjsg  */
24*f005ef32Sjsg /* from BPP 4 to 12 in steps of 0.5 */
25*f005ef32Sjsg #define RC_RANGE_QP420_8BPC_MAX_NUM_BPP		17
26*f005ef32Sjsg 
27*f005ef32Sjsg /* from BPP 4 to 15 in steps of 0.5 */
28*f005ef32Sjsg #define RC_RANGE_QP420_10BPC_MAX_NUM_BPP	23
29*f005ef32Sjsg 
30*f005ef32Sjsg /* from BPP 4 to 18 in steps of 0.5 */
31*f005ef32Sjsg #define RC_RANGE_QP420_12BPC_MAX_NUM_BPP	29
32*f005ef32Sjsg 
335ca02815Sjsg /*
345ca02815Sjsg  * These qp tables are as per the C model
355ca02815Sjsg  * and it has the rows pointing to bpps which increment
365ca02815Sjsg  * in steps of 0.5
375ca02815Sjsg  * We do not support fractional bpps as of today,
385ca02815Sjsg  * hence we would skip the fractional bpps during
395ca02815Sjsg  * our references for qp calclulations.
405ca02815Sjsg  */
415ca02815Sjsg static const u8 rc_range_minqp444_8bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_8BPC_MAX_NUM_BPP] = {
425ca02815Sjsg 	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
435ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
445ca02815Sjsg 	{ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
455ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
465ca02815Sjsg 	{ 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
475ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
485ca02815Sjsg 	{ 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
495ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
505ca02815Sjsg 	{ 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1,
515ca02815Sjsg 	  1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
525ca02815Sjsg 	{ 5, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1,
535ca02815Sjsg 	  1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 },
545ca02815Sjsg 	{ 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1,
555ca02815Sjsg 	  1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 },
565ca02815Sjsg 	{ 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
575ca02815Sjsg 	  2, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
585ca02815Sjsg 	{ 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
595ca02815Sjsg 	  2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0 },
605ca02815Sjsg 	{ 6, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
615ca02815Sjsg 	  3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0 },
625ca02815Sjsg 	{ 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3,
635ca02815Sjsg 	  3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
645ca02815Sjsg 	{ 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4,
655ca02815Sjsg 	  4, 4, 4, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0 },
665ca02815Sjsg 	{ 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,
675ca02815Sjsg 	  4, 4, 4, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0 },
685ca02815Sjsg 	{ 9, 9, 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 5,
695ca02815Sjsg 	  5, 5, 5, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1, 1 },
705ca02815Sjsg 	{ 14, 14, 13, 13, 12, 12, 12, 12, 11, 11, 10, 10, 10, 10, 9, 9, 9, 8, 8,
715ca02815Sjsg 	  8, 7, 7, 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3 }
725ca02815Sjsg };
735ca02815Sjsg 
745ca02815Sjsg static const u8 rc_range_maxqp444_8bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_8BPC_MAX_NUM_BPP] = {
755ca02815Sjsg 	{ 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0,
765ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
775ca02815Sjsg 	{ 6, 6, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1,
785ca02815Sjsg 	  1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
795ca02815Sjsg 	{ 8, 7, 7, 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 3, 2, 2, 1, 1, 1, 1, 1,
805ca02815Sjsg 	  1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
815ca02815Sjsg 	{ 8, 8, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 4, 3, 3, 2, 2, 2, 2, 2,
825ca02815Sjsg 	  2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
835ca02815Sjsg 	{ 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 5, 4, 4, 3, 2, 2, 2, 2, 2,
845ca02815Sjsg 	  2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
855ca02815Sjsg 	{ 9, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 4, 4, 3, 3, 3, 3, 3,
865ca02815Sjsg 	  3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 },
875ca02815Sjsg 	{ 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 5, 4, 4, 3, 3, 3, 3, 3,
885ca02815Sjsg 	  3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 },
895ca02815Sjsg 	{ 10, 10, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 6, 5, 5, 4, 4, 4, 4, 3,
905ca02815Sjsg 	  3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1 },
915ca02815Sjsg 	{ 11, 11, 10, 10, 9, 9, 9, 9, 9, 9, 8, 8, 8, 7, 7, 6, 6, 5, 5, 5, 5, 5,
925ca02815Sjsg 	  4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
935ca02815Sjsg 	{ 12, 11, 11, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8, 7, 6, 6, 5, 5, 5,
945ca02815Sjsg 	  5, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1 },
955ca02815Sjsg 	{ 12, 12, 11, 11, 10, 10, 10, 10, 10, 10, 9, 9, 9, 8, 8, 7, 7, 6, 6, 6,
965ca02815Sjsg 	  5, 5, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1 },
975ca02815Sjsg 	{ 12, 12, 12, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 7, 7, 7,
985ca02815Sjsg 	  6, 6, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1 },
995ca02815Sjsg 	{ 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 7,
1005ca02815Sjsg 	  6, 6, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1 },
1015ca02815Sjsg 	{ 13, 13, 13, 13, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 8, 8, 8,
1025ca02815Sjsg 	  8, 7, 7, 6, 6, 6, 6, 5, 5, 4, 4, 4, 4, 3, 3, 2, 2, 2 },
1035ca02815Sjsg 	{ 15, 15, 14, 14, 13, 13, 13, 13, 12, 12, 11, 11, 11, 11, 10, 10, 10, 9,
1045ca02815Sjsg 	  9, 9, 8, 8, 8, 8, 7, 7, 6, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4 }
1055ca02815Sjsg };
1065ca02815Sjsg 
1075ca02815Sjsg static const u8 rc_range_minqp444_10bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_10BPC_MAX_NUM_BPP] = {
1085ca02815Sjsg 	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1095ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1105ca02815Sjsg 	  0, 0, 0 },
1115ca02815Sjsg 	{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
1125ca02815Sjsg 	  1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1135ca02815Sjsg 	  0, 0, 0 },
1145ca02815Sjsg 	{ 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2,
1155ca02815Sjsg 	  2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1165ca02815Sjsg 	  0, 0, 0 },
1175ca02815Sjsg 	{ 7, 7, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3,
1185ca02815Sjsg 	  3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1195ca02815Sjsg 	  0, 0, 0 },
1205ca02815Sjsg 	{ 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3,
1215ca02815Sjsg 	  3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
1225ca02815Sjsg 	  0, 0, 0 },
1235ca02815Sjsg 	{ 9, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4,
1245ca02815Sjsg 	  4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0,
1255ca02815Sjsg 	  0, 0, 0 },
1265ca02815Sjsg 	{ 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5,
1275ca02815Sjsg 	  4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 0, 0,
1285ca02815Sjsg 	  0, 0, 0 },
1295ca02815Sjsg 	{ 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 5,
1305ca02815Sjsg 	  5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 0,
1315ca02815Sjsg 	  0, 0, 0 },
1325ca02815Sjsg 	{ 9, 9, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 5,
1335ca02815Sjsg 	  5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1,
1345ca02815Sjsg 	  1, 0, 0 },
1355ca02815Sjsg 	{ 10, 9, 9, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6,
1365ca02815Sjsg 	  6, 6, 6, 6, 6, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
1375ca02815Sjsg 	  1, 1, 0 },
1385ca02815Sjsg 	{ 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6,
1395ca02815Sjsg 	  6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1,
1405ca02815Sjsg 	  1, 1, 1 },
1415ca02815Sjsg 	{ 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8,
1425ca02815Sjsg 	  7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2,
1435ca02815Sjsg 	  2, 1, 1, 1 },
1445ca02815Sjsg 	{ 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8,
1455ca02815Sjsg 	  8, 8, 8, 8, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2,
1465ca02815Sjsg 	  2, 2, 2, 1 },
1475ca02815Sjsg 	{ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11,
1485ca02815Sjsg 	  11, 11, 11, 10, 10, 9, 9, 9, 9, 8, 8, 7, 7, 7, 7, 6, 6, 5, 5, 5, 5, 4,
1495ca02815Sjsg 	  4, 3, 3, 3, 3, 2, 2, 2, 2, 1 },
1505ca02815Sjsg 	{ 18, 18, 17, 17, 16, 16, 16, 16, 15, 15, 14, 14, 14, 14, 13, 13, 13,
1515ca02815Sjsg 	  12, 12, 12, 11, 11, 11, 11, 10, 10, 9, 9, 9, 9, 9, 8, 8, 7, 7, 7, 7,
1525ca02815Sjsg 	  7, 6, 6, 5, 5, 5, 5, 4, 4, 3, 3, 3 }
1535ca02815Sjsg };
1545ca02815Sjsg 
1555ca02815Sjsg static const u8 rc_range_maxqp444_10bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_10BPC_MAX_NUM_BPP] = {
1565ca02815Sjsg 	{ 8, 8, 8, 8, 8, 8, 7, 7, 7, 6, 5, 5, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2,
1575ca02815Sjsg 	  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1585ca02815Sjsg 	  0, 0, 0 },
1595ca02815Sjsg 	{ 10, 10, 9, 9, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 6, 5, 5, 4, 4, 4, 4, 3, 3,
1605ca02815Sjsg 	  3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
1615ca02815Sjsg 	  0, 0, 0 },
1625ca02815Sjsg 	{ 12, 11, 11, 10, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 7, 6, 6, 5, 5, 5, 4,
1635ca02815Sjsg 	  4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
1645ca02815Sjsg 	  0, 0, 0, 0 },
1655ca02815Sjsg 	{ 12, 12, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 8, 7, 7, 6,
1665ca02815Sjsg 	  6, 6, 5, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1,
1675ca02815Sjsg 	  1, 0, 0, 0, 0, 0, 0 },
1685ca02815Sjsg 	{ 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 9, 8, 8, 7,
1695ca02815Sjsg 	  6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1,
1705ca02815Sjsg 	  1, 1, 1, 0, 0, 0, 0, 0 },
1715ca02815Sjsg 	{ 13, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 9, 8, 8,
1725ca02815Sjsg 	  7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
1735ca02815Sjsg 	  2, 2, 1, 1, 1, 1, 0, 0 },
1745ca02815Sjsg 	{ 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 9, 8, 8,
1755ca02815Sjsg 	  7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 2,
1765ca02815Sjsg 	  2, 2, 2, 1, 1, 1, 1, 1 },
1775ca02815Sjsg 	{ 14, 14, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 10, 9, 9,
1785ca02815Sjsg 	  8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3,
1795ca02815Sjsg 	  3, 2, 2, 2, 1, 1, 1, 1 },
1805ca02815Sjsg 	{ 15, 15, 14, 14, 13, 13, 13, 13, 13, 13, 12, 12, 12, 11, 11, 10, 10, 9,
1815ca02815Sjsg 	  9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3,
1825ca02815Sjsg 	  3, 3, 2, 2, 2, 2, 1, 1 },
1835ca02815Sjsg 	{ 16, 15, 15, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 12, 12, 11, 10,
1845ca02815Sjsg 	  10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4,
1855ca02815Sjsg 	  4, 3, 3, 3, 2, 2, 2, 2, 1 },
1865ca02815Sjsg 	{ 16, 16, 15, 15, 14, 14, 14, 14, 14, 14, 13, 13, 13, 12, 12, 11, 11,
1875ca02815Sjsg 	  10, 10, 10, 9, 9, 8, 8, 8, 8, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5,
1885ca02815Sjsg 	  4, 4, 4, 3, 3, 3, 2, 2, 2, 2 },
1895ca02815Sjsg 	{ 16, 16, 16, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12,
1905ca02815Sjsg 	  11, 11, 11, 10, 10, 9, 9, 9, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5,
1915ca02815Sjsg 	  5, 4, 4, 4, 4, 3, 3, 2, 2, 2 },
1925ca02815Sjsg 	{ 16, 16, 16, 16, 15, 15, 15, 15, 15, 14, 14, 13, 13, 13, 12, 12, 12,
1935ca02815Sjsg 	  11, 11, 11, 10, 10, 9, 9, 9, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5,
1945ca02815Sjsg 	  5, 4, 4, 4, 4, 3, 3, 3, 3, 2 },
1955ca02815Sjsg 	{ 17, 17, 17, 17, 16, 16, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, 12,
1965ca02815Sjsg 	  12, 12, 12, 11, 11, 10, 10, 10, 10, 9, 9, 8, 8, 8, 8, 7, 7, 6, 6, 6,
1975ca02815Sjsg 	  6, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2 },
1985ca02815Sjsg 	{ 19, 19, 18, 18, 17, 17, 17, 17, 16, 16, 15, 15, 15, 15, 14, 14, 14,
1995ca02815Sjsg 	  13, 13, 13, 12, 12, 12, 12, 11, 11, 10, 10, 10, 10, 10, 9, 9, 8, 8, 8,
2005ca02815Sjsg 	  8, 8, 7, 7, 6, 6, 6, 6, 5, 5, 4, 4, 4 }
2015ca02815Sjsg };
2025ca02815Sjsg 
2035ca02815Sjsg static const u8 rc_range_minqp444_12bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_12BPC_MAX_NUM_BPP] = {
2045ca02815Sjsg 	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2055ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2065ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0 },
2075ca02815Sjsg 	{ 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2085ca02815Sjsg 	  1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2095ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0 },
2105ca02815Sjsg 	{ 11, 10, 10, 9, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 6, 5, 5, 4, 4, 4, 3, 3, 3, 3,
2115ca02815Sjsg 	  3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
2125ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
2135ca02815Sjsg 	{ 11, 11, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 7, 6, 6, 6, 6, 6, 5, 5, 5,
2145ca02815Sjsg 	  5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 0,
2155ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
2165ca02815Sjsg 	{ 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 9, 9, 9, 8, 7, 7, 7,
2175ca02815Sjsg 	  7, 5, 5, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1,
2185ca02815Sjsg 	  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
2195ca02815Sjsg 	{ 13, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 9, 9, 8, 8,
2205ca02815Sjsg 	  8, 8, 6, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 2, 2, 2,
2215ca02815Sjsg 	  2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
2225ca02815Sjsg 	{ 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 9, 9, 9, 9,
2235ca02815Sjsg 	  9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3,
2245ca02815Sjsg 	  3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
2255ca02815Sjsg 	{ 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10,
2265ca02815Sjsg 	  10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4,
2275ca02815Sjsg 	  4, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 },
2285ca02815Sjsg 	{ 13, 13, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
2295ca02815Sjsg 	  11, 11, 11, 10, 10, 10, 10, 9, 9, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 5, 5,
2305ca02815Sjsg 	  5, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0 },
2315ca02815Sjsg 	{ 14, 13, 13, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
2325ca02815Sjsg 	  11, 11, 11, 10, 10, 10, 10, 9, 9, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 5,
2335ca02815Sjsg 	  5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 0 },
2345ca02815Sjsg 	{ 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12,
2355ca02815Sjsg 	  12, 11, 11, 11, 11, 11, 11, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 7, 7, 7,
2365ca02815Sjsg 	  6, 6, 6, 5, 5, 5, 5, 4, 4, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1 },
2375ca02815Sjsg 	{ 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
2385ca02815Sjsg 	  13, 12, 12, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8,
2395ca02815Sjsg 	  7, 7, 7, 7, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1, 1 },
2405ca02815Sjsg 	{ 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
2415ca02815Sjsg 	  13, 12, 12, 12, 12, 12, 12, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8,
2425ca02815Sjsg 	  7, 7, 7, 7, 6, 6, 6, 6, 5, 4, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1, 1 },
2435ca02815Sjsg 	{ 17, 17, 17, 17, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
2445ca02815Sjsg 	  15, 14, 14, 13, 13, 13, 13, 12, 12, 11, 11, 11, 11, 10, 10, 9, 9, 9, 9, 8, 8,
2455ca02815Sjsg 	  7, 7, 7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 2, 2, 1 },
2465ca02815Sjsg 	{ 22, 22, 21, 21, 20, 20, 20, 20, 19, 19, 18, 18, 18, 18, 17, 17, 17, 16, 16,
2475ca02815Sjsg 	  16, 15, 15, 15, 15, 14, 14, 13, 13, 13, 13, 13, 12, 12, 11, 11, 11, 11, 11,
2485ca02815Sjsg 	  10, 10, 9, 9, 9, 9, 9, 8, 8, 7, 7, 7, 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 3 }
2495ca02815Sjsg };
2505ca02815Sjsg 
2515ca02815Sjsg static const u8 rc_range_maxqp444_12bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_12BPC_MAX_NUM_BPP] = {
2525ca02815Sjsg 	{ 12, 12, 12, 12, 12, 12, 11, 11, 11, 10, 9, 9, 6, 6, 5, 5, 5, 4, 4, 4, 4, 4,
2535ca02815Sjsg 	  4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
2545ca02815Sjsg 	  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
2555ca02815Sjsg 	{ 14, 14, 13, 13, 12, 12, 12, 12, 12, 12, 11, 11, 9, 9, 9, 8, 8, 7, 7, 7, 7, 5,
2565ca02815Sjsg 	  5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2575ca02815Sjsg 	  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
2585ca02815Sjsg 	{ 16, 15, 15, 14, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 11, 10, 10, 9, 9,
2595ca02815Sjsg 	  9, 7, 7, 7, 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,
2605ca02815Sjsg 	  1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
2615ca02815Sjsg 	{ 16, 16, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 12, 11, 11, 10,
2625ca02815Sjsg 	  10, 10, 8, 8, 8, 8, 8, 7, 7, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 3, 2,
2635ca02815Sjsg 	  2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
2645ca02815Sjsg 	{ 17, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 13, 12, 12, 11, 10,
2655ca02815Sjsg 	  10, 10, 10, 8, 8, 8, 8, 8, 8, 7, 7, 7, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3,
2665ca02815Sjsg 	  2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
2675ca02815Sjsg 	{ 17, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 13, 12, 12, 11,
2685ca02815Sjsg 	  11, 11, 11, 9, 9, 9, 9, 8, 8, 8, 8, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 3,
2695ca02815Sjsg 	  3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0 },
2705ca02815Sjsg 	{ 17, 17, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 13, 12, 12, 11,
2715ca02815Sjsg 	  11, 11, 11, 11, 10, 10, 10, 9, 9, 9, 8, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 5, 5,
2725ca02815Sjsg 	  5, 5, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0 },
2735ca02815Sjsg 	{ 18, 18, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 14, 13, 13, 12,
2745ca02815Sjsg 	  12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6,
2755ca02815Sjsg 	  6, 5, 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1 },
2765ca02815Sjsg 	{ 19, 19, 18, 18, 17, 17, 17, 17, 17, 17, 16, 16, 16, 15, 15, 14, 14, 13, 13,
2775ca02815Sjsg 	  13, 13, 13, 12, 12, 12, 12, 11, 11, 10, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6,
2785ca02815Sjsg 	  6, 6, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1 },
2795ca02815Sjsg 	{ 20, 19, 19, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 16, 16, 15, 14, 14, 13,
2805ca02815Sjsg 	  13, 13, 13, 12, 12, 12, 12, 11, 11, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7,
2815ca02815Sjsg 	  6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 1 },
2825ca02815Sjsg 	{ 20, 20, 19, 19, 18, 18, 18, 18, 18, 18, 17, 17, 17, 16, 16, 15, 15, 14, 14,
2835ca02815Sjsg 	  14, 13, 13, 12, 12, 12, 12, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9,
2845ca02815Sjsg 	  8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 5, 5, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2 },
2855ca02815Sjsg 	{ 20, 20, 20, 19, 19, 19, 18, 18, 18, 18, 17, 17, 17, 17, 16, 16, 16, 15, 15,
2865ca02815Sjsg 	  15, 14, 14, 13, 13, 13, 13, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9,
2875ca02815Sjsg 	  9, 8, 8, 8, 8, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 2, 2, 2 },
2885ca02815Sjsg 	{ 20, 20, 20, 20, 19, 19, 19, 19, 19, 18, 18, 17, 17, 17, 16, 16, 16, 15, 15,
2895ca02815Sjsg 	  15, 14, 14, 13, 13, 13, 13, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9,
2905ca02815Sjsg 	  9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 2, 2, 2 },
2915ca02815Sjsg 	{ 21, 21, 21, 21, 20, 20, 19, 19, 19, 19, 18, 18, 18, 18, 17, 17, 16, 16, 16,
2925ca02815Sjsg 	  16, 15, 15, 14, 14, 14, 14, 13, 13, 12, 12, 12, 12, 11, 11, 10, 10, 10, 10,
2935ca02815Sjsg 	  9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 5, 5, 4, 4, 4, 4, 3, 3, 2 },
2945ca02815Sjsg 	{ 23, 23, 22, 22, 21, 21, 21, 21, 20, 20, 19, 19, 19, 19, 18, 18, 18, 17, 17,
2955ca02815Sjsg 	  17, 16, 16, 16, 16, 15, 15, 14, 14, 14, 14, 14, 13, 13, 12, 12, 12, 12, 12,
2965ca02815Sjsg 	  11, 11, 10, 10, 10, 10, 10, 9, 9, 8, 8, 8, 8, 8, 7, 7, 6, 6, 6, 6, 5, 5, 4 }
2975ca02815Sjsg };
2985ca02815Sjsg 
299*f005ef32Sjsg static const u8 rc_range_minqp420_8bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_8BPC_MAX_NUM_BPP] = {
300*f005ef32Sjsg 	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
301*f005ef32Sjsg 	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
302*f005ef32Sjsg 	{ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
303*f005ef32Sjsg 	{ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
304*f005ef32Sjsg 	{ 3, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 },
305*f005ef32Sjsg 	{ 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 },
306*f005ef32Sjsg 	{ 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
307*f005ef32Sjsg 	{ 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0 },
308*f005ef32Sjsg 	{ 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0 },
309*f005ef32Sjsg 	{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1 },
310*f005ef32Sjsg 	{ 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 2, 1, 1 },
311*f005ef32Sjsg 	{ 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 2, 2, 1 },
312*f005ef32Sjsg 	{ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 3, 3, 2, 1 },
313*f005ef32Sjsg 	{ 9, 8, 8, 7, 7, 7, 7, 7, 7, 6, 5, 5, 4, 3, 3, 3, 2 },
314*f005ef32Sjsg 	{ 13, 12, 12, 11, 10, 10, 9, 8, 8, 7, 6, 6, 5, 5, 4, 4, 3 }
315*f005ef32Sjsg };
316*f005ef32Sjsg 
317*f005ef32Sjsg static const u8 rc_range_maxqp420_8bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_8BPC_MAX_NUM_BPP] = {
318*f005ef32Sjsg 	{ 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
319*f005ef32Sjsg 	{ 4, 4, 4, 4, 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
320*f005ef32Sjsg 	{ 5, 5, 5, 5, 5, 4, 3, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0 },
321*f005ef32Sjsg 	{ 6, 6, 6, 6, 6, 5, 4, 3, 2, 2, 2, 1, 1, 1, 1, 0, 0 },
322*f005ef32Sjsg 	{ 7, 7, 7, 7, 7, 5, 4, 3, 2, 2, 2, 2, 2, 1, 1, 1, 0 },
323*f005ef32Sjsg 	{ 7, 7, 7, 7, 7, 6, 5, 4, 3, 3, 3, 2, 2, 2, 1, 1, 0 },
324*f005ef32Sjsg 	{ 7, 7, 7, 7, 7, 6, 5, 4, 3, 3, 3, 3, 2, 2, 2, 1, 1 },
325*f005ef32Sjsg 	{ 8, 8, 8, 8, 8, 7, 6, 5, 4, 4, 4, 3, 3, 2, 2, 2, 1 },
326*f005ef32Sjsg 	{ 9, 9, 9, 8, 8, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1 },
327*f005ef32Sjsg 	{ 10, 10, 9, 9, 9, 8, 7, 6, 5, 5, 5, 4, 4, 3, 3, 2, 2 },
328*f005ef32Sjsg 	{ 10, 10, 10, 9, 9, 8, 8, 7, 6, 6, 5, 5, 4, 4, 3, 2, 2 },
329*f005ef32Sjsg 	{ 11, 11, 10, 10, 9, 9, 8, 7, 7, 6, 6, 5, 5, 4, 3, 3, 2 },
330*f005ef32Sjsg 	{ 11, 11, 11, 10, 9, 9, 9, 8, 7, 7, 6, 5, 5, 4, 4, 3, 2 },
331*f005ef32Sjsg 	{ 13, 12, 12, 11, 10, 10, 9, 8, 8, 7, 6, 6, 5, 4, 4, 4, 3 },
332*f005ef32Sjsg 	{ 14, 13, 13, 12, 11, 11, 10, 9, 9, 8, 7, 7, 6, 6, 5, 5, 4 }
333*f005ef32Sjsg };
334*f005ef32Sjsg 
335*f005ef32Sjsg static const u8 rc_range_minqp420_10bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_10BPC_MAX_NUM_BPP] = {
336*f005ef32Sjsg 	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
337*f005ef32Sjsg 	{ 4, 4, 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
338*f005ef32Sjsg 	{ 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
339*f005ef32Sjsg 	{ 5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0 },
340*f005ef32Sjsg 	{ 7, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0 },
341*f005ef32Sjsg 	{ 7, 7, 7, 7, 7, 6, 5, 5, 5, 5, 5, 4, 3, 3, 2, 2, 1, 1, 1, 1, 1, 0, 0 },
342*f005ef32Sjsg 	{ 7, 7, 7, 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 3, 2, 2, 2, 2, 1, 1, 1, 0 },
343*f005ef32Sjsg 	{ 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 5, 4, 4, 4, 3, 2, 2, 2, 1, 1, 1, 0 },
344*f005ef32Sjsg 	{ 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 2, 1, 1 },
345*f005ef32Sjsg 	{ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1 },
346*f005ef32Sjsg 	{ 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1 },
347*f005ef32Sjsg 	{ 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 7, 6, 6, 5, 4, 4, 3, 3, 2, 1 },
348*f005ef32Sjsg 	{ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 7, 7, 6, 5, 4, 4, 3, 3, 2, 1 },
349*f005ef32Sjsg 	{ 13, 12, 12, 11, 11, 11, 11, 11, 11, 10, 9, 9, 8, 7, 7, 6, 5, 5, 4, 3, 3,
350*f005ef32Sjsg 	  2, 2 },
351*f005ef32Sjsg 	{ 17, 16, 16, 15, 14, 14, 13, 12, 12, 11, 10, 10, 10, 9, 8, 8, 7, 6, 6, 5,
352*f005ef32Sjsg 	  5, 4, 4 }
353*f005ef32Sjsg };
354*f005ef32Sjsg 
355*f005ef32Sjsg static const u8 rc_range_maxqp420_10bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_10BPC_MAX_NUM_BPP] = {
356*f005ef32Sjsg 	{ 8, 8, 7, 6, 4, 4, 3, 3, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
357*f005ef32Sjsg 	{ 8, 8, 8, 7, 6, 5, 4, 4, 3, 3, 3, 3, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 },
358*f005ef32Sjsg 	{ 9, 9, 9, 8, 8, 7, 6, 5, 4, 3, 3, 3, 3, 3, 2, 1, 1, 1, 0, 0, 0, 0, 0 },
359*f005ef32Sjsg 	{ 10, 10, 10, 9, 9, 8, 7, 6, 5, 4, 4, 3, 3, 3, 3, 2, 1, 1, 1, 1, 1, 0,
360*f005ef32Sjsg 	  0 },
361*f005ef32Sjsg 	{ 11, 11, 11, 10, 10, 8, 7, 6, 5, 4, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1,
362*f005ef32Sjsg 	  0 },
363*f005ef32Sjsg 	{ 11, 11, 11, 10, 10, 9, 8, 7, 6, 6, 6, 5, 4, 4, 3, 3, 2, 2, 2, 2, 2, 1,
364*f005ef32Sjsg 	  1 },
365*f005ef32Sjsg 	{ 11, 11, 11, 11, 11, 10, 9, 8, 7, 7, 7, 6, 5, 5, 4, 3, 3, 3, 3, 2, 2, 2,
366*f005ef32Sjsg 	  1 },
367*f005ef32Sjsg 	{ 12, 12, 12, 12, 12, 11, 10, 9, 8, 8, 8, 7, 6, 5, 5, 4, 3, 3, 3, 2, 2,
368*f005ef32Sjsg 	  2, 1 },
369*f005ef32Sjsg 	{ 13, 13, 13, 12, 12, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 5, 4, 4, 3, 3, 3,
370*f005ef32Sjsg 	  2, 2 },
371*f005ef32Sjsg 	{ 14, 14, 13, 13, 13, 12, 11, 10, 9, 9, 9, 8, 8, 7, 7, 6, 5, 4, 4, 3, 3,
372*f005ef32Sjsg 	  2, 2 },
373*f005ef32Sjsg 	{ 14, 14, 14, 13, 13, 12, 12, 11, 10, 10, 9, 9, 8, 8, 7, 6, 5, 5, 4, 4,
374*f005ef32Sjsg 	  3, 3, 2 },
375*f005ef32Sjsg 	{ 15, 15, 14, 14, 13, 13, 12, 11, 11, 10, 10, 9, 9, 8, 7, 7, 6, 5, 5, 4,
376*f005ef32Sjsg 	  4, 3, 2 },
377*f005ef32Sjsg 	{ 15, 15, 15, 14, 13, 13, 13, 12, 11, 11, 10, 9, 9, 8, 8, 7, 6, 5, 5, 4,
378*f005ef32Sjsg 	  4, 3, 2 },
379*f005ef32Sjsg 	{ 17, 16, 16, 15, 14, 14, 13, 12, 12, 11, 10, 10, 9, 8, 8, 7, 6, 6, 5, 4,
380*f005ef32Sjsg 	  4, 3, 3 },
381*f005ef32Sjsg 	{ 18, 17, 17, 16, 15, 15, 14, 13, 13, 12, 11, 11, 11, 10, 9, 9, 8, 7, 7,
382*f005ef32Sjsg 	  6, 6, 5, 5 }
383*f005ef32Sjsg };
384*f005ef32Sjsg 
385*f005ef32Sjsg static const u8 rc_range_minqp420_12bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_12BPC_MAX_NUM_BPP] = {
386*f005ef32Sjsg 	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
387*f005ef32Sjsg 	  0, 0, 0, 0, 0 },
388*f005ef32Sjsg 	{ 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0,
389*f005ef32Sjsg 	  0, 0, 0, 0, 0 },
390*f005ef32Sjsg 	{ 9, 8, 8, 7, 7, 6, 5, 5, 4, 4, 4, 4, 3, 3, 3, 2, 2, 1, 0, 0, 0, 0, 0, 0,
391*f005ef32Sjsg 	  0, 0, 0, 0, 0 },
392*f005ef32Sjsg 	{ 10, 9, 9, 8, 8, 8, 7, 7, 6, 6, 6, 5, 5, 4, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0,
393*f005ef32Sjsg 	  0, 0, 0, 0, 0 },
394*f005ef32Sjsg 	{ 11, 10, 10, 10, 10, 9, 9, 8, 7, 6, 6, 6, 6, 5, 5, 4, 3, 3, 3, 2, 2, 1,
395*f005ef32Sjsg 	  0, 0, 0, 0, 0, 0, 0 },
396*f005ef32Sjsg 	{ 11, 11, 11, 11, 11, 10, 10, 9, 9, 9, 9, 8, 7, 6, 5, 5, 4, 4, 3, 3, 3, 2,
397*f005ef32Sjsg 	  1, 1, 0, 0, 0, 0, 0 },
398*f005ef32Sjsg 	{ 11, 11, 11, 11, 11, 11, 10, 10, 9, 9, 9, 8, 8, 7, 6, 5, 5, 5, 5, 4, 3, 3,
399*f005ef32Sjsg 	  2, 1, 1, 1, 1, 1, 0 },
400*f005ef32Sjsg 	{ 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 9, 8, 8, 8, 7, 6, 6, 5, 4, 4,
401*f005ef32Sjsg 	  3, 2, 2, 1, 1, 1, 1, 1 },
402*f005ef32Sjsg 	{ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 5,
403*f005ef32Sjsg 	  5, 4, 4, 2, 2, 1, 1, 1, 1 },
404*f005ef32Sjsg 	{ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6,
405*f005ef32Sjsg 	  5, 4, 4, 3, 2, 2, 1, 1, 1 },
406*f005ef32Sjsg 	{ 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7,
407*f005ef32Sjsg 	  6, 5, 4, 3, 3, 2, 2, 1, 1 },
408*f005ef32Sjsg 	{ 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 11, 10, 10, 9, 8, 8,
409*f005ef32Sjsg 	  7, 7, 6, 5, 4, 3, 3, 2, 2, 1 },
410*f005ef32Sjsg 	{ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 11, 11, 10, 9, 8, 8,
411*f005ef32Sjsg 	  7, 7, 6, 5, 4, 4, 3, 2, 2, 1 },
412*f005ef32Sjsg 	{ 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 13, 13, 12, 11, 11, 10, 9, 9, 8,
413*f005ef32Sjsg 	  8, 7, 6, 6, 5, 4, 4, 3, 3, 2 },
414*f005ef32Sjsg 	{ 21, 20, 20, 19, 18, 18, 17, 16, 16, 15, 14, 14, 14, 13, 12, 12, 11, 10,
415*f005ef32Sjsg 	  10, 10, 9, 8, 8, 7, 6, 6, 5, 5, 4 }
416*f005ef32Sjsg };
417*f005ef32Sjsg 
418*f005ef32Sjsg static const u8 rc_range_maxqp420_12bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_12BPC_MAX_NUM_BPP] = {
419*f005ef32Sjsg 	{ 11, 10, 9, 8, 6, 6, 5, 5, 4, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0,
420*f005ef32Sjsg 	  0, 0, 0, 0, 0, 0 },
421*f005ef32Sjsg 	{ 12, 11, 11, 10, 9, 8, 7, 7, 6, 6, 5, 5, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1,
422*f005ef32Sjsg 	  1, 0, 0, 0, 0, 0, 0 },
423*f005ef32Sjsg 	{ 13, 12, 12, 11, 11, 10, 9, 8, 7, 6, 6, 6, 5, 5, 4, 3, 3, 2, 1, 1, 1, 1,
424*f005ef32Sjsg 	  1, 0, 0, 0, 0, 0, 0 },
425*f005ef32Sjsg 	{ 14, 13, 13, 12, 12, 11, 10, 9, 8, 7, 7, 6, 6, 5, 5, 4, 3, 3, 2, 2, 2, 1,
426*f005ef32Sjsg 	  1, 1, 0, 0, 0, 0, 0 },
427*f005ef32Sjsg 	{ 15, 14, 14, 13, 13, 11, 10, 9, 8, 7, 7, 7, 7, 6, 6, 5, 4, 4, 4, 3, 3, 2,
428*f005ef32Sjsg 	  1, 1, 1, 0, 0, 0, 0 },
429*f005ef32Sjsg 	{ 15, 15, 15, 14, 14, 13, 12, 11, 10, 10, 10, 9, 8, 7, 6, 6, 5, 5, 4, 4,
430*f005ef32Sjsg 	  4, 3, 2, 2, 1, 1, 0, 0, 0 },
431*f005ef32Sjsg 	{ 15, 15, 15, 15, 15, 14, 13, 12, 11, 11, 11, 10, 9, 8, 7, 6, 6, 6, 6, 5,
432*f005ef32Sjsg 	  4, 4, 3, 2, 2, 2, 1, 1, 0 },
433*f005ef32Sjsg 	{ 16, 16, 16, 16, 16, 15, 14, 13, 12, 12, 12, 11, 10, 9, 9, 8, 7, 7, 6, 5,
434*f005ef32Sjsg 	  5, 4, 3, 3, 2, 2, 2, 1, 1 },
435*f005ef32Sjsg 	{ 17, 17, 17, 16, 16, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 9, 8, 8, 7,
436*f005ef32Sjsg 	  6, 6, 5, 5, 3, 3, 2, 2, 1, 1 },
437*f005ef32Sjsg 	{ 18, 18, 17, 17, 17, 16, 15, 14, 13, 13, 13, 12, 12, 11, 11, 10, 9, 8, 8,
438*f005ef32Sjsg 	  7, 6, 5, 5, 4, 3, 3, 2, 2, 1 },
439*f005ef32Sjsg 	{ 18, 18, 18, 17, 17, 16, 16, 15, 14, 14, 13, 13, 12, 12, 11, 10, 9, 9, 8,
440*f005ef32Sjsg 	  8, 7, 6, 5, 4, 4, 3, 3, 2, 2 },
441*f005ef32Sjsg 	{ 19, 19, 18, 18, 17, 17, 16, 15, 15, 14, 14, 13, 13, 12, 11, 11, 10, 9,
442*f005ef32Sjsg 	  9, 8, 8, 7, 6, 5, 4, 4, 3, 3, 2 },
443*f005ef32Sjsg 	{ 19, 19, 19, 18, 17, 17, 17, 16, 15, 15, 14, 13, 13, 12, 12, 11, 10, 9,
444*f005ef32Sjsg 	  9, 8, 8, 7, 6, 5, 5, 4, 3, 3, 2 },
445*f005ef32Sjsg 	{ 21, 20, 20, 19, 18, 18, 17, 16, 16, 15, 14, 14, 13, 12, 12, 11, 10, 10,
446*f005ef32Sjsg 	  9, 9, 8, 7, 7, 6, 5, 5, 4, 4, 3 },
447*f005ef32Sjsg 	{ 22, 21, 21, 20, 19, 19, 18, 17, 17, 16, 15, 15, 15, 14, 13, 13, 12, 11,
448*f005ef32Sjsg 	  11, 11, 10, 9, 9, 8, 7, 7, 6, 6, 5 }
449*f005ef32Sjsg };
450*f005ef32Sjsg 
451*f005ef32Sjsg #define PARAM_TABLE(_minmax, _bpc, _row, _col, _is_420)  do { \
452*f005ef32Sjsg 	if (bpc == (_bpc)) {	\
453*f005ef32Sjsg 		if (_is_420)	\
454*f005ef32Sjsg 			return rc_range_##_minmax##qp420_##_bpc##bpc[_row][_col]; \
455*f005ef32Sjsg 		else	\
4565ca02815Sjsg 			return rc_range_##_minmax##qp444_##_bpc##bpc[_row][_col]; \
457*f005ef32Sjsg 	}	\
4585ca02815Sjsg } while (0)
4595ca02815Sjsg 
intel_lookup_range_min_qp(int bpc,int buf_i,int bpp_i,bool is_420)460*f005ef32Sjsg u8 intel_lookup_range_min_qp(int bpc, int buf_i, int bpp_i, bool is_420)
4615ca02815Sjsg {
462*f005ef32Sjsg 	PARAM_TABLE(min, 8, buf_i, bpp_i, is_420);
463*f005ef32Sjsg 	PARAM_TABLE(min, 10, buf_i, bpp_i, is_420);
464*f005ef32Sjsg 	PARAM_TABLE(min, 12, buf_i, bpp_i, is_420);
4655ca02815Sjsg 
4665ca02815Sjsg 	MISSING_CASE(bpc);
4675ca02815Sjsg 	return 0;
4685ca02815Sjsg }
4695ca02815Sjsg 
intel_lookup_range_max_qp(int bpc,int buf_i,int bpp_i,bool is_420)470*f005ef32Sjsg u8 intel_lookup_range_max_qp(int bpc, int buf_i, int bpp_i, bool is_420)
4715ca02815Sjsg {
472*f005ef32Sjsg 	PARAM_TABLE(max, 8, buf_i, bpp_i, is_420);
473*f005ef32Sjsg 	PARAM_TABLE(max, 10, buf_i, bpp_i, is_420);
474*f005ef32Sjsg 	PARAM_TABLE(max, 12, buf_i, bpp_i, is_420);
4755ca02815Sjsg 
4765ca02815Sjsg 	MISSING_CASE(bpc);
4775ca02815Sjsg 	return 0;
4785ca02815Sjsg }
479