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