blob: cd5834049514fbb1aba6f46b1eb893d82f94d08b
1 | /* |
2 | * Copyright (C) 2014 ARM Limited. All rights reserved. |
3 | * |
4 | * Copyright (C) 2008 The Android Open Source Project |
5 | * |
6 | * Licensed under the Apache License, Version 2.0 (the "License"); |
7 | * you may not use this file except in compliance with the License. |
8 | * You may obtain a copy of the License at |
9 | * |
10 | * http://www.apache.org/licenses/LICENSE-2.0 |
11 | * |
12 | * Unless required by applicable law or agreed to in writing, software |
13 | * distributed under the License is distributed on an "AS IS" BASIS, |
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
15 | * See the License for the specific language governing permissions and |
16 | * limitations under the License. |
17 | */ |
18 | #include <hardware/hardware.h> |
19 | #include <hardware/gralloc.h> |
20 | |
21 | /* The extension bits are defined for indexed formats when setting |
22 | * up the definitions. This define exports them before including |
23 | * the block definitions. |
24 | */ |
25 | #include "format_chooser.h" |
26 | |
27 | #include "formatdef_files/gpu_default.defs" |
28 | |
29 | #if MALI_AFBC_GRALLOC == 1 |
30 | #if MALI_SUPPORT_AFBC_WIDEBLK == 1 |
31 | #include "formatdef_files/gpu_afbc_wideblk.defs" |
32 | #else |
33 | #include "formatdef_files/gpu_afbc.defs" |
34 | #endif |
35 | #ifdef MALI_DISPLAY_VERSION |
36 | #include "formatdef_files/display_afbc.defs" |
37 | #endif |
38 | #endif |
39 | |
40 | |
41 | /* Defines a translation list of requested formats that are compatible with the internal indexed format */ |
42 | const internal_fmt_info translate_internal_indexed[GRALLOC_ARM_FORMAT_INTERNAL_INDEXED_LAST] = |
43 | { |
44 | { |
45 | HAL_PIXEL_FORMAT_RGBA_8888, |
46 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBA_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_BGRA_8888} |
47 | }, |
48 | |
49 | { |
50 | HAL_PIXEL_FORMAT_RGBX_8888, |
51 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBX_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_888} |
52 | }, |
53 | |
54 | { |
55 | HAL_PIXEL_FORMAT_RGB_888, |
56 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBX_8888} |
57 | }, |
58 | |
59 | { |
60 | HAL_PIXEL_FORMAT_RGB_565, |
61 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_565} |
62 | }, |
63 | |
64 | { |
65 | HAL_PIXEL_FORMAT_BGRA_8888, |
66 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_BGRA_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBA_8888} |
67 | }, |
68 | |
69 | #if PLATFORM_SDK_VERSION >= 19 && PLATFORM_SDK_VERSION <= 22 |
70 | {HAL_PIXEL_FORMAT_sRGB_A_8888, {GRALLOC_ARM_HAL_FORMAT_INDEXED_sRGB_A_8888} }, |
71 | {HAL_PIXEL_FORMAT_sRGB_X_8888, {GRALLOC_ARM_HAL_FORMAT_INDEXED_sRGB_X_8888} }, |
72 | #else |
73 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_sRGB_A_8888} }, |
74 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_sRGB_X_8888} }, |
75 | #endif |
76 | |
77 | { |
78 | HAL_PIXEL_FORMAT_YV12, |
79 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_YV12} |
80 | }, |
81 | |
82 | #if PLATFORM_SDK_VERSION >= 18 |
83 | {HAL_PIXEL_FORMAT_Y8, {GRALLOC_ARM_HAL_FORMAT_INDEXED_Y8} }, |
84 | {HAL_PIXEL_FORMAT_Y16, {GRALLOC_ARM_HAL_FORMAT_INDEXED_Y16} }, |
85 | #else |
86 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_Y8} }, |
87 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_Y16} }, |
88 | #endif |
89 | |
90 | {HAL_PIXEL_FORMAT_YCbCr_420_888, {GRALLOC_ARM_HAL_FORMAT_INDEXED_YCbCr_420_888} }, |
91 | |
92 | { |
93 | HAL_PIXEL_FORMAT_RGBA_8888 | GRALLOC_ARM_INTFMT_AFBC, |
94 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBA_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_BGRA_8888} |
95 | }, |
96 | |
97 | { |
98 | HAL_PIXEL_FORMAT_RGBX_8888 | GRALLOC_ARM_INTFMT_AFBC, |
99 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBX_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_888} |
100 | }, |
101 | |
102 | { |
103 | HAL_PIXEL_FORMAT_RGB_888 | GRALLOC_ARM_INTFMT_AFBC, |
104 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBX_8888} |
105 | }, |
106 | |
107 | { |
108 | HAL_PIXEL_FORMAT_RGB_565 | GRALLOC_ARM_INTFMT_AFBC, |
109 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_565} |
110 | }, |
111 | |
112 | { |
113 | HAL_PIXEL_FORMAT_BGRA_8888 | GRALLOC_ARM_INTFMT_AFBC, |
114 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_BGRA_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBA_8888} |
115 | }, |
116 | |
117 | { |
118 | HAL_PIXEL_FORMAT_YV12 | GRALLOC_ARM_INTFMT_AFBC, |
119 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_YV12, GRALLOC_ARM_HAL_FORMAT_INDEXED_YUV420_8BIT_AFBC} |
120 | }, |
121 | |
122 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_YUV422_8BIT_AFBC}}, |
123 | |
124 | { |
125 | HAL_PIXEL_FORMAT_RGBA_8888 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK, |
126 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBA_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_BGRA_8888} |
127 | }, |
128 | |
129 | { |
130 | HAL_PIXEL_FORMAT_RGBX_8888 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK, |
131 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBX_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_888} |
132 | }, |
133 | |
134 | { |
135 | HAL_PIXEL_FORMAT_RGB_888 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK, |
136 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBX_8888} |
137 | }, |
138 | |
139 | { |
140 | HAL_PIXEL_FORMAT_RGB_565 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK, |
141 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_565} |
142 | }, |
143 | |
144 | { |
145 | HAL_PIXEL_FORMAT_BGRA_8888 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK, |
146 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_BGRA_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBA_8888} |
147 | }, |
148 | |
149 | { |
150 | HAL_PIXEL_FORMAT_YV12 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK, |
151 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_YV12, GRALLOC_ARM_HAL_FORMAT_INDEXED_YUV420_8BIT_AFBC} |
152 | }, |
153 | |
154 | { |
155 | HAL_PIXEL_FORMAT_RGBA_8888 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK | GRALLOC_ARM_INTFMT_AFBC_WIDEBLK, |
156 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBA_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_BGRA_8888} |
157 | }, |
158 | |
159 | { |
160 | HAL_PIXEL_FORMAT_RGBX_8888 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK | GRALLOC_ARM_INTFMT_AFBC_WIDEBLK, |
161 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBX_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_888} |
162 | }, |
163 | |
164 | { |
165 | HAL_PIXEL_FORMAT_RGB_888 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK | GRALLOC_ARM_INTFMT_AFBC_WIDEBLK, |
166 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBX_8888} |
167 | }, |
168 | |
169 | { |
170 | HAL_PIXEL_FORMAT_RGB_565 | GRALLOC_ARM_INTFMT_AFBC_WIDEBLK, |
171 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_RGB_565} |
172 | }, |
173 | |
174 | { |
175 | HAL_PIXEL_FORMAT_BGRA_8888 | GRALLOC_ARM_INTFMT_AFBC_SPLITBLK | GRALLOC_ARM_INTFMT_AFBC_WIDEBLK, |
176 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_BGRA_8888, GRALLOC_ARM_HAL_FORMAT_INDEXED_RGBA_8888} |
177 | }, |
178 | |
179 | { |
180 | HAL_PIXEL_FORMAT_YV12 | GRALLOC_ARM_INTFMT_AFBC_WIDEBLK, |
181 | {GRALLOC_ARM_HAL_FORMAT_INDEXED_YV12, GRALLOC_ARM_HAL_FORMAT_INDEXED_YUV420_8BIT_AFBC} |
182 | }, |
183 | |
184 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_YUV422_8BIT_AFBC}}, |
185 | |
186 | /* No mapping as there is no corresponding HAL formats */ |
187 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_Y0L2}}, |
188 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_P010}}, |
189 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_P210}}, |
190 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_Y210}}, |
191 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_Y410}}, |
192 | /* Entry at GRALLOC_ARM_FORMAT_INTERNAL_INDEXED_YUV420_10BIT_AFBC */ |
193 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_YUV420_10BIT_AFBC}}, |
194 | /* Entry at GRALLOC_ARM_FORMAT_INTERNAL_INDEXED_YUV422_10BIT_AFBC */ |
195 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_YUV422_10BIT_AFBC}}, |
196 | /* Entry at GRALLOC_ARM_FORMAT_INTERNAL_INDEXED_YUV420_10BIT_AFBC_WIDEBLK */ |
197 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_YUV420_10BIT_AFBC}}, |
198 | /* Entry at GRALLOC_ARM_FORMAT_INTERNAL_INDEXED_YUV422_10BIT_AFBC_WIDEBLK */ |
199 | {0, {GRALLOC_ARM_HAL_FORMAT_INDEXED_YUV422_10BIT_AFBC}}, |
200 | }; |
201 | |
202 | blkinit blklist[] = |
203 | { |
204 | #if MALI_AFBC_GRALLOC == 1 |
205 | #ifdef MALI_DISPLAY_VERSION |
206 | { |
207 | display_afbc_hwc_blkinit,{0,{}} |
208 | }, |
209 | #endif |
210 | { |
211 | gpu_afbc_write_blkinit,{0,{}} |
212 | }, |
213 | { |
214 | gpu_afbc_read_blkinit,{0,{}} |
215 | }, |
216 | #else |
217 | { |
218 | gpu_write_blkinit,{0,{}} |
219 | }, |
220 | { |
221 | gpu_read_blkinit,{0,{}} |
222 | }, |
223 | #endif |
224 | |
225 | /* Empty entry */ |
226 | { |
227 | NULL,{0,{}} |
228 | } |
229 | }; |
230 | |
231 | uint32_t blklist_array_size = sizeof(blklist); |
232 | |
233 | void initialize_blk_conf() |
234 | { |
235 | int i,j,k; |
236 | |
237 | i=0; |
238 | while (blklist[i].blk_init != 0) |
239 | { |
240 | int16_t *array=0; |
241 | |
242 | for (j = 0; j < GRALLOC_ARM_HAL_FORMAT_INDEXED_LAST; j++) |
243 | { |
244 | for (k = 0; k < (int) GRALLOC_ARM_FORMAT_INTERNAL_INDEXED_LAST; k++) |
245 | { |
246 | blklist[i].hwblkconf.weights[j][k] = DEFAULT_WEIGHT_UNSUPPORTED; |
247 | } |
248 | } |
249 | blklist[i].blk_init( &blklist[i].hwblkconf , &array); |
250 | if (*array != 0) |
251 | { |
252 | for (k = GRALLOC_ARM_FORMAT_INTERNAL_INDEXED_FIRST; k < GRALLOC_ARM_FORMAT_INTERNAL_INDEXED_LAST; k++) |
253 | { |
254 | /* Zero weights are not suppose to be used in the preferred array because that usually means |
255 | * uninitialized values. |
256 | */ |
257 | if ( array[k] != DEFAULT_WEIGHT_UNSUPPORTED && array[k] != 0 ) |
258 | { |
259 | int n; |
260 | |
261 | /* For this internal format we will for its base format setup matching weights |
262 | * for itself as well as swizzled versions of the format. When initializing |
263 | * swizzled/compatible formats with same weight, we insert a slight preference |
264 | * on the base format(which is listed first) to choose that when the base is selected. |
265 | * Other blocks' preference might adjust this. |
266 | */ |
267 | for (n=0; n<MAX_COMPATIBLE; n++) |
268 | { |
269 | if ( translate_internal_indexed[k].comp_format_list[n] != GRALLOC_ARM_HAL_FORMAT_INDEXED_INVALID ) |
270 | { |
271 | if (n == 0) |
272 | { |
273 | blklist[i].hwblkconf.weights[translate_internal_indexed[k].comp_format_list[n]][k] = array[k]+1; |
274 | } |
275 | else |
276 | { |
277 | blklist[i].hwblkconf.weights[translate_internal_indexed[k].comp_format_list[n]][k] = array[k]; |
278 | } |
279 | } |
280 | } |
281 | } |
282 | } |
283 | } |
284 | i++; |
285 | } |
286 | } |
287 |