• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef EXYNOS_RESOURCE_RESTRICTION_ZUMAPRO_H_
18 #define EXYNOS_RESOURCE_RESTRICTION_ZUMAPRO_H_
19 
20 #include "../../zuma/libhwc2.1/ExynosResourceRestriction.h"
21 
22 namespace zumapro {
23 
24 static feature_support_t feature_table[] = {
25     {MPP_DPP_GFS, MPP_ATTR_AFBC | MPP_ATTR_BLOCK_MODE | MPP_ATTR_WINDOW_UPDATE |
26                       MPP_ATTR_SCALE | MPP_ATTR_ROT_90 | MPP_ATTR_FLIP_H |
27                       MPP_ATTR_FLIP_V | MPP_ATTR_DIM | MPP_ATTR_WCG |
28                       MPP_ATTR_HDR10 | MPP_ATTR_HDR10PLUS |
29                       MPP_ATTR_LAYER_TRANSFORM},
30 
31     {MPP_DPP_VGRFS, MPP_ATTR_AFBC | MPP_ATTR_BLOCK_MODE |
32                         MPP_ATTR_WINDOW_UPDATE | MPP_ATTR_SCALE |
33                         MPP_ATTR_FLIP_H | MPP_ATTR_FLIP_V | MPP_ATTR_ROT_90 |
34                         MPP_ATTR_DIM | MPP_ATTR_WCG | MPP_ATTR_HDR10 |
35                         MPP_ATTR_HDR10PLUS | MPP_ATTR_LAYER_TRANSFORM},
36 
37     {MPP_G2D, MPP_ATTR_AFBC | MPP_ATTR_SCALE | MPP_ATTR_FLIP_H |
38                   MPP_ATTR_FLIP_V | MPP_ATTR_ROT_90 | MPP_ATTR_WCG |
39                   MPP_ATTR_HDR10 | MPP_ATTR_HDR10PLUS | MPP_ATTR_USE_CAPA |
40                   MPP_ATTR_LAYER_TRANSFORM}};
41 
42 static const restriction_key_t restriction_format_table[] = {
43     {MPP_DPP_GFS, NODE_NONE, HAL_PIXEL_FORMAT_RGB_565, 0},
44     {MPP_DPP_GFS, NODE_NONE, HAL_PIXEL_FORMAT_RGBA_8888, 0},
45     {MPP_DPP_GFS, NODE_NONE, HAL_PIXEL_FORMAT_RGBX_8888, 0},
46     {MPP_DPP_GFS, NODE_NONE, HAL_PIXEL_FORMAT_BGRA_8888, 0},
47     {MPP_DPP_GFS, NODE_NONE, HAL_PIXEL_FORMAT_RGBA_1010102, 0},
48     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_RGB_565, 0},
49     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_RGBA_8888, 0},
50     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_RGBX_8888, 0},
51     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_BGRA_8888, 0},
52     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_RGBA_1010102, 0},
53     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M, 0},
54     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_PRIV, 0},
55     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M, 0},
56     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M_FULL, 0},
57     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN, 0},
58     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_S10B, 0},
59     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B, 0},
60     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_P010_M, 0},
61     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_P010_SPN, 0},
62     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_YCBCR_P010, 0},
63     {MPP_DPP_VGRFS, NODE_NONE, MALI_GRALLOC_FORMAT_INTERNAL_P010, 0},
64     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_GOOGLE_NV12_SP, 0},
65     {MPP_DPP_VGRFS, NODE_NONE, HAL_PIXEL_FORMAT_GOOGLE_NV12_SP_10B, 0},
66     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_RGB_565, 0},
67     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_RGB_888, 0},
68     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_RGBA_8888, 0},
69     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_RGBX_8888, 0},
70     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_BGRA_8888, 0},
71     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_RGBA_1010102, 0},
72     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M, 0},
73     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_PRIV, 0},
74     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_TILED, 0},
75     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M, 0},
76     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M_FULL, 0},
77     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN, 0},
78     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_S10B, 0},
79     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B, 0},
80     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_P010_M, 0},
81     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_P010_SPN, 0},
82     {MPP_G2D, NODE_NONE, MALI_GRALLOC_FORMAT_INTERNAL_P010, 0},
83     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_YCrCb_420_SP, 0},
84     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_TILED, 0},
85     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_GOOGLE_NV12_SP, 0},
86     {MPP_G2D, NODE_NONE, HAL_PIXEL_FORMAT_GOOGLE_NV12_SP_10B, 0},
87 };
88 
89 static ppc_table ppc_table_map = {
90     /* G2D support only 2 plane YUV, so all YUV format should use YUV2P PPC
91        table */
92     /* In case of Scale-Up, G2D should use same PPC table */
93     {PPC_IDX(MPP_G2D, PPC_FORMAT_YUV420, PPC_ROT_NO),
94      {3.5, 4.1, 5.1, 5.2, 4.7, 3.6, 3.6}},
95     {PPC_IDX(MPP_G2D, PPC_FORMAT_YUV420, PPC_ROT),
96      {2.2, 4.0, 4.6, 5.1, 4.5, 2.1, 2.1}},
97 
98     {PPC_IDX(MPP_G2D, PPC_FORMAT_YUV422, PPC_ROT_NO),
99      {3.5, 4.1, 5.1, 5.2, 4.7, 3.6, 3.6}},
100     {PPC_IDX(MPP_G2D, PPC_FORMAT_YUV422, PPC_ROT),
101      {2.2, 4.0, 4.6, 5.1, 4.5, 2.1, 2.1}},
102 
103     {PPC_IDX(MPP_G2D, PPC_FORMAT_P010, PPC_ROT_NO),
104      {3.5, 4.1, 5.1, 5.2, 4.7, 3.6, 3.6}},
105     {PPC_IDX(MPP_G2D, PPC_FORMAT_P010, PPC_ROT),
106      {2.2, 4.0, 4.6, 5.1, 4.5, 2.1, 2.1}},
107 
108     {PPC_IDX(MPP_G2D, PPC_FORMAT_RGB32, PPC_ROT_NO),
109      {3.7, 3.3, 3.3, 3.4, 3.6, 3.9, 3.9}},
110     {PPC_IDX(MPP_G2D, PPC_FORMAT_RGB32, PPC_ROT),
111      {3.2, 3.0, 3.1, 3.4, 3.6, 3.9, 3.9}},
112 
113     {PPC_IDX(MPP_G2D, PPC_FORMAT_SBWC, PPC_ROT_NO),
114      {3.3, 3.2, 3.3, 3.8, 3.1, 3.4, 3.4}},
115     {PPC_IDX(MPP_G2D, PPC_FORMAT_SBWC, PPC_ROT),
116      {2.4, 3.2, 3.4, 3.9, 3.1, 2.1, 2.1}},
117 
118     {PPC_IDX(MPP_G2D, PPC_FORMAT_AFBC_RGB, PPC_ROT_NO),
119      {3.4, 2.9, 2.8, 3.2, 3.8, 3.1, 3.1}},
120     {PPC_IDX(MPP_G2D, PPC_FORMAT_AFBC_RGB, PPC_ROT),
121      {3.9, 2.9, 2.9, 3.3, 3.2, 3.8, 3.8}},
122 
123     {PPC_IDX(MPP_G2D, PPC_FORMAT_AFBC_YUV, PPC_ROT_NO),
124      {3.3, 3.4, 3.4, 3.8, 3.8, 3.2, 3.2}},
125     {PPC_IDX(MPP_G2D, PPC_FORMAT_AFBC_YUV, PPC_ROT),
126      {3.3, 3.3, 3.7, 3.8, 3.9, 2.1, 2.1}},
127 };
128 
129 } // namespace zumapro
130 
131 #endif // EXYNOS_RESOURCE_RESTRICTION_ZUMAPRO_H_
132