1 /* 2 * Copyright (C) 2017-2019 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 19 #ifndef MALI_GRALLOC_USAGES_H_ 20 #define MALI_GRALLOC_USAGES_H_ 21 22 #ifndef GRALLOC_VERSION_MAJOR 23 #error "GRALLOC_VERSION_MAJOR must be defined." 24 #endif 25 26 #define GRALLOC_USAGE_PRIVATE_MASK (0xffff0000f0000000U) 27 28 /* 29 * Below usage types overlap, this is intentional. 30 * The reason is that for Gralloc 0.3 there are very 31 * few usage flags we have at our disposal. 32 * 33 * The overlapping is handled by processing the definitions 34 * in a specific order. 35 * 36 * MALI_GRALLOC_USAGE_PRIVATE_FORMAT and MALI_GRALLOC_USAGE_NO_AFBC 37 * don't overlap and are processed first. 38 * 39 * MALI_GRALLOC_USAGE_YUV_CONF are only for YUV formats and clients 40 * using MALI_GRALLOC_USAGE_NO_AFBC must never allocate YUV formats. 41 * The latter is strictly enforced and allocations will fail. 42 * 43 * MALI_GRALLOC_USAGE_AFBC_PADDING is only valid if MALI_GRALLOC_USAGE_NO_AFBC 44 * is not present. 45 */ 46 47 /* 48 * Gralloc private usage 0-3 are the same in 0.3 and 1.0. 49 * We defined based our usages based on what is available. 50 */ 51 #if GRALLOC_VERSION_MAJOR == 1 52 #include <hardware/gralloc1.h> 53 54 /* 55 * Most gralloc code is fairly version agnostic, but certain 56 * places still use old usage defines. Make sure it works 57 * ok for usages that are backwards compatible. 58 */ 59 #define GRALLOC_USAGE_PRIVATE_0 GRALLOC1_CONSUMER_USAGE_PRIVATE_0 60 #define GRALLOC_USAGE_PRIVATE_1 GRALLOC1_CONSUMER_USAGE_PRIVATE_1 61 #define GRALLOC_USAGE_PRIVATE_2 GRALLOC1_CONSUMER_USAGE_PRIVATE_2 62 #define GRALLOC_USAGE_PRIVATE_3 GRALLOC1_CONSUMER_USAGE_PRIVATE_3 63 64 #define GRALLOC_USAGE_PRIVATE_4 GRALLOC1_CONSUMER_USAGE_PRIVATE_4 65 #define GRALLOC_USAGE_PRIVATE_5 GRALLOC1_CONSUMER_USAGE_PRIVATE_5 66 #define GRALLOC_USAGE_PRIVATE_6 GRALLOC1_CONSUMER_USAGE_PRIVATE_6 67 #define GRALLOC_USAGE_PRIVATE_7 GRALLOC1_CONSUMER_USAGE_PRIVATE_7 68 #define GRALLOC_USAGE_PRIVATE_8 GRALLOC1_CONSUMER_USAGE_PRIVATE_8 69 #define GRALLOC_USAGE_PRIVATE_9 GRALLOC1_CONSUMER_USAGE_PRIVATE_9 70 71 #define GRALLOC_USAGE_PRIVATE_10 GRALLOC1_PRODUCER_USAGE_PRIVATE_10 72 #define GRALLOC_USAGE_PRIVATE_12 GRALLOC1_PRODUCER_USAGE_PRIVATE_12 73 #define GRALLOC_USAGE_PRIVATE_13 GRALLOC1_PRODUCER_USAGE_PRIVATE_13 74 #define GRALLOC_USAGE_PRIVATE_14 GRALLOC1_PRODUCER_USAGE_PRIVATE_14 75 #define GRALLOC_USAGE_PRIVATE_15 GRALLOC1_PRODUCER_USAGE_PRIVATE_15 76 #define GRALLOC_USAGE_PRIVATE_16 GRALLOC1_PRODUCER_USAGE_PRIVATE_16 77 #define GRALLOC_USAGE_PRIVATE_17 GRALLOC1_PRODUCER_USAGE_PRIVATE_17 78 #define GRALLOC_USAGE_PRIVATE_18 GRALLOC1_PRODUCER_USAGE_PRIVATE_18 79 #define GRALLOC_USAGE_PRIVATE_19 GRALLOC1_PRODUCER_USAGE_PRIVATE_19 80 81 #define GRALLOC_USAGE_SW_WRITE_RARELY GRALLOC1_PRODUCER_USAGE_CPU_WRITE 82 #define GRALLOC_USAGE_SW_WRITE_OFTEN GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN 83 #define GRALLOC_USAGE_SW_READ_RARELY GRALLOC1_CONSUMER_USAGE_CPU_READ 84 #define GRALLOC_USAGE_SW_READ_OFTEN GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN 85 #define GRALLOC_USAGE_HW_FB GRALLOC1_CONSUMER_USAGE_CLIENT_TARGET 86 #define GRALLOC_USAGE_HW_2D 0x00000400U 87 88 #define GRALLOC_USAGE_SW_WRITE_MASK 0x000000F0U 89 #define GRALLOC_USAGE_SW_READ_MASK 0x0000000FU 90 #define GRALLOC_USAGE_PROTECTED GRALLOC1_PRODUCER_USAGE_PROTECTED 91 #define GRALLOC_USAGE_HW_RENDER GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET 92 #define GRALLOC_USAGE_HW_CAMERA_WRITE GRALLOC1_PRODUCER_USAGE_CAMERA 93 #define GRALLOC_USAGE_HW_CAMERA_READ GRALLOC1_CONSUMER_USAGE_CAMERA 94 #define GRALLOC_USAGE_HW_TEXTURE GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE 95 #define GRALLOC_USAGE_HW_VIDEO_ENCODER GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER 96 #define GRALLOC_USAGE_HW_COMPOSER GRALLOC1_CONSUMER_USAGE_HWCOMPOSER 97 #define GRALLOC_USAGE_EXTERNAL_DISP 0x00002000U 98 99 #define GRALLOC_USAGE_SENSOR_DIRECT_DATA GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA 100 #define GRALLOC_USAGE_GPU_DATA_BUFFER GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER 101 #define GRALLOC_USAGE_VIDEO_DECODER GRALLOC1_PRODUCER_USAGE_VIDEO_DECODER 102 103 typedef enum 104 { 105 /* 106 * Allocation will be used as a front-buffer, which 107 * supports concurrent producer-consumer access. 108 * 109 * NOTE: Must not be used with MALI_GRALLOC_USAGE_FORCE_BACKBUFFER 110 */ 111 MALI_GRALLOC_USAGE_FRONTBUFFER = GRALLOC1_PRODUCER_USAGE_PRIVATE_12, 112 113 /* 114 * Allocation will be used as a back-buffer. 115 * Use when switching from front-buffer as a workaround for Android 116 * buffer queue, which does not re-allocate for a sub-set of 117 * existing usage. 118 * 119 * NOTE: Must not be used with MALI_GRALLOC_USAGE_FRONTBUFFER. 120 */ 121 MALI_GRALLOC_USAGE_FORCE_BACKBUFFER = GRALLOC1_PRODUCER_USAGE_PRIVATE_13, 122 123 /* 124 * Buffer will not be allocated with AFBC. 125 * 126 * NOTE: Not compatible with MALI_GRALLOC_USAGE_FORCE_BACKBUFFER so cannot be 127 * used when switching from front-buffer to back-buffer. 128 */ 129 MALI_GRALLOC_USAGE_NO_AFBC = GRALLOC1_PRODUCER_USAGE_PRIVATE_1, 130 131 /* Custom alignment for AFBC headers. 132 * 133 * NOTE: due to usage flag overlap, AFBC_PADDING cannot be used with FORCE_BACKBUFFER. 134 */ 135 MALI_GRALLOC_USAGE_AFBC_PADDING = GRALLOC1_PRODUCER_USAGE_PRIVATE_14, 136 /* Private format usage. 137 * 'format' argument to allocation function will be interpreted in a 138 * private manner and must be constructed via GRALLOC_PRIVATE_FORMAT_WRAPPER_* 139 * macros which pack base format and AFBC format modifiers into 32-bit value. 140 */ 141 MALI_GRALLOC_USAGE_PRIVATE_FORMAT = GRALLOC1_PRODUCER_USAGE_PRIVATE_15, 142 143 /* SLSI specific usages */ 144 GRALLOC1_PRODUCER_USAGE_PRIVATE_NONSECURE = GRALLOC1_PRODUCER_USAGE_PRIVATE_8, 145 GRALLOC1_PRODUCER_USAGE_NOZEROED = GRALLOC1_PRODUCER_USAGE_PRIVATE_9, 146 147 GRALLOC1_CONSUMER_USAGE_VIDEO_PRIVATE_DATA = GRALLOC1_CONSUMER_USAGE_PRIVATE_7, 148 149 /* FaceAuth specific usages */ 150 GS101_GRALLOC_USAGE_TPU_INPUT = GRALLOC1_CONSUMER_USAGE_PRIVATE_5, 151 GS101_GRALLOC_USAGE_TPU_OUTPUT = GRALLOC1_PRODUCER_USAGE_PRIVATE_3, 152 GS101_GRALLOC_USAGE_CAMERA_STATS = GRALLOC1_PRODUCER_USAGE_PRIVATE_2, 153 154 /* YUV only. */ 155 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_DEFAULT = 0, 156 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_BT601 = GRALLOC1_PRODUCER_USAGE_PRIVATE_18, 157 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_BT709 = GRALLOC1_PRODUCER_USAGE_PRIVATE_19, 158 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_BT2020 = (GRALLOC1_PRODUCER_USAGE_PRIVATE_18 | GRALLOC1_PRODUCER_USAGE_PRIVATE_19), 159 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_MASK = MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_BT2020, 160 161 MALI_GRALLOC_USAGE_RANGE_DEFAULT = 0, 162 MALI_GRALLOC_USAGE_RANGE_NARROW = GRALLOC1_PRODUCER_USAGE_PRIVATE_16, 163 MALI_GRALLOC_USAGE_RANGE_WIDE = GRALLOC1_PRODUCER_USAGE_PRIVATE_17, 164 MALI_GRALLOC_USAGE_RANGE_MASK = (GRALLOC1_PRODUCER_USAGE_PRIVATE_16 | GRALLOC1_PRODUCER_USAGE_PRIVATE_17), 165 166 /* Google specific usages */ 167 GRALLOC_USAGE_GOOGLE_IP_BO = GRALLOC_USAGE_PRIVATE_16, 168 GRALLOC_USAGE_GOOGLE_IP_MFC = GRALLOC_USAGE_PRIVATE_17, 169 170 } mali_gralloc_usage_type; 171 172 173 #elif GRALLOC_VERSION_MAJOR == 0 174 #include <hardware/gralloc.h> 175 176 typedef enum 177 { 178 /* See comment for Gralloc 1.0, above. */ 179 MALI_GRALLOC_USAGE_FRONTBUFFER = GRALLOC_USAGE_PRIVATE_0, 180 181 /* See comment for Gralloc 1.0, above. */ 182 MALI_GRALLOC_USAGE_FORCE_BACKBUFFER = GRALLOC_USAGE_PRIVATE_1, 183 184 /* See comment for Gralloc 1.0, above. */ 185 MALI_GRALLOC_USAGE_NO_AFBC = (GRALLOC_USAGE_PRIVATE_1 | GRALLOC_USAGE_PRIVATE_2), 186 187 /* See comment for Gralloc 1.0, above. */ 188 MALI_GRALLOC_USAGE_AFBC_PADDING = GRALLOC_USAGE_PRIVATE_2, 189 190 /* See comment for Gralloc 1.0, above. */ 191 MALI_GRALLOC_USAGE_PRIVATE_FORMAT = GRALLOC_USAGE_PRIVATE_3, 192 193 } mali_gralloc_usage_type; 194 195 #elif GRALLOC_VERSION_MAJOR == 2 196 #if HIDL_COMMON_VERSION_SCALED == 100 197 #include <android/hardware/graphics/common/1.0/types.h> 198 #elif HIDL_COMMON_VERSION_SCALED == 110 199 #include <android/hardware/graphics/common/1.1/types.h> 200 #endif 201 202 /* Local macro definitions to emulate Gralloc 1.0 usage interface */ 203 #define GRALLOC_USAGE_PRIVATE_12 1ULL << 55 204 #define GRALLOC_USAGE_PRIVATE_13 1ULL << 54 205 #define GRALLOC_USAGE_PRIVATE_14 1ULL << 53 206 #define GRALLOC_USAGE_PRIVATE_15 1ULL << 52 207 #define GRALLOC_USAGE_PRIVATE_16 1ULL << 51 208 #define GRALLOC_USAGE_PRIVATE_17 1ULL << 50 209 #define GRALLOC_USAGE_PRIVATE_18 1ULL << 49 210 #define GRALLOC_USAGE_PRIVATE_19 1ULL << 48 211 212 typedef enum 213 { 214 /* See comment for Gralloc 1.0, above. */ 215 MALI_GRALLOC_USAGE_FRONTBUFFER = GRALLOC_USAGE_PRIVATE_12, 216 217 /* See comment for Gralloc 1.0, above. */ 218 MALI_GRALLOC_USAGE_FORCE_BACKBUFFER = GRALLOC_USAGE_PRIVATE_13, 219 220 /* See comment for Gralloc 1.0, above. */ 221 MALI_GRALLOC_USAGE_NO_AFBC = (GRALLOC_USAGE_PRIVATE_13 | GRALLOC_USAGE_PRIVATE_14), 222 223 /* See comment for Gralloc 1.0, above. */ 224 MALI_GRALLOC_USAGE_AFBC_PADDING = GRALLOC_USAGE_PRIVATE_14, 225 226 /* See comment for Gralloc 1.0, above. */ 227 MALI_GRALLOC_USAGE_PRIVATE_FORMAT = GRALLOC_USAGE_PRIVATE_15, 228 229 /* YUV-only. */ 230 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_DEFAULT = 0, 231 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_BT601 = GRALLOC_USAGE_PRIVATE_18, 232 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_BT709 = GRALLOC_USAGE_PRIVATE_19, 233 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_BT2020 = (GRALLOC_USAGE_PRIVATE_18 | GRALLOC_USAGE_PRIVATE_19), 234 MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_MASK = MALI_GRALLOC_USAGE_YUV_COLOR_SPACE_BT2020, 235 236 MALI_GRALLOC_USAGE_RANGE_DEFAULT = 0, 237 MALI_GRALLOC_USAGE_RANGE_NARROW = GRALLOC_USAGE_PRIVATE_16, 238 MALI_GRALLOC_USAGE_RANGE_WIDE = GRALLOC_USAGE_PRIVATE_17, 239 MALI_GRALLOC_USAGE_RANGE_MASK = (GRALLOC_USAGE_PRIVATE_16 | GRALLOC_USAGE_PRIVATE_17), 240 } mali_gralloc_usage_type; 241 242 using android::hardware::graphics::common::HIDL_COMMON_NAMESPACE::BufferUsage; 243 244 #define GRALLOC_USAGE_SW_WRITE_RARELY static_cast<uint64_t>(BufferUsage::CPU_WRITE_RARELY) 245 #define GRALLOC_USAGE_SW_WRITE_OFTEN static_cast<uint64_t>(BufferUsage::CPU_WRITE_OFTEN) 246 #define GRALLOC_USAGE_SW_READ_RARELY static_cast<uint64_t>(BufferUsage::CPU_READ_RARELY) 247 #define GRALLOC_USAGE_SW_READ_OFTEN static_cast<uint64_t>(BufferUsage::CPU_READ_OFTEN) 248 #define GRALLOC_USAGE_HW_FB static_cast<uint64_t>(BufferUsage::COMPOSER_CLIENT_TARGET) 249 250 /* Bit 10 must be zero as per Gralloc 2.x interface specification. Used, however, for backward compatibility */ 251 #define GRALLOC_USAGE_HW_2D static_cast<uint64_t>(0x00000400) 252 253 #define GRALLOC_USAGE_SW_WRITE_MASK static_cast<uint64_t>(BufferUsage::CPU_WRITE_MASK) 254 #define GRALLOC_USAGE_SW_READ_MASK static_cast<uint64_t>(BufferUsage::CPU_READ_MASK) 255 #define GRALLOC_USAGE_PROTECTED static_cast<uint64_t>(BufferUsage::PROTECTED) 256 #define GRALLOC_USAGE_HW_RENDER static_cast<uint64_t>(BufferUsage::GPU_RENDER_TARGET) 257 #define GRALLOC_USAGE_HW_CAMERA_WRITE static_cast<uint64_t>(BufferUsage::CAMERA_OUTPUT) 258 #define GRALLOC_USAGE_HW_CAMERA_READ static_cast<uint64_t>(BufferUsage::CAMERA_INPUT) 259 #define GRALLOC_USAGE_HW_TEXTURE static_cast<uint64_t>(BufferUsage::GPU_TEXTURE) 260 #define GRALLOC_USAGE_HW_VIDEO_ENCODER static_cast<uint64_t>(BufferUsage::VIDEO_ENCODER) 261 #define GRALLOC_USAGE_HW_COMPOSER static_cast<uint64_t>(BufferUsage::COMPOSER_OVERLAY) 262 #define GRALLOC_USAGE_EXTERNAL_DISP static_cast<uint64_t>(0x00002000) 263 264 #define GRALLOC_USAGE_SENSOR_DIRECT_DATA static_cast<uint64_t>(BufferUsage::SENSOR_DIRECT_DATA) 265 #define GRALLOC_USAGE_GPU_DATA_BUFFER static_cast<uint64_t>(BufferUsage::GPU_DATA_BUFFER) 266 #define GRALLOC_USAGE_VIDEO_DECODER static_cast<uint64_t>(BufferUsage::VIDEO_DECODER) 267 268 #endif 269 270 /* Originally (Gralloc 0.x), Android did not provide an explicit DECODER usage. This was rectified in Android N-MR1/7.1 271 * when Gralloc 1.0 defined GRALLOC1_PRODUCER_USAGE_VIDEO_DECODER. However, libstagefright continues 272 * (currently, Android P/9.0) to use this old combination of flags to indicate decoder producer 273 */ 274 #define GRALLOC_USAGE_DECODER (GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_EXTERNAL_DISP) 275 276 static const uint64_t VALID_USAGE = 277 GRALLOC_USAGE_SW_READ_MASK | /* 0x0FU */ 278 GRALLOC_USAGE_SW_WRITE_MASK | /* 0xF0U */ 279 GRALLOC_USAGE_HW_TEXTURE | /* 1U << 8 */ 280 GRALLOC_USAGE_HW_RENDER | /* 1U << 9 */ 281 GRALLOC_USAGE_HW_2D | /* 1U << 10 */ 282 GRALLOC_USAGE_HW_COMPOSER | /* 1U << 11 */ 283 GRALLOC_USAGE_HW_FB | /* 1U << 12 */ 284 GRALLOC_USAGE_EXTERNAL_DISP | /* 1U << 13 */ 285 GRALLOC_USAGE_PROTECTED | /* 1U << 14 */ 286 1ULL << 15 | /* COMPOSER_CURSOR (types1.0) */ 287 GRALLOC_USAGE_HW_VIDEO_ENCODER | /* 1U << 16 */ 288 GRALLOC_USAGE_HW_CAMERA_WRITE | /* 1U << 17 */ 289 GRALLOC_USAGE_HW_CAMERA_READ | /* 1U << 18 */ 290 1ULL << 19 | /* GRALLOC_USAGE_GVR_FRONT_BUFFER_MODE */ 291 1ULL << 20 | /* RENDERSCRIPT */ 292 1ULL << 21 | /* GRALLOC1_CONSUMER_USAGE_FOREIGN_BUFFERS (IGNORED) */ 293 1ULL << 22 | /* VIDEO_DECODER */ 294 1ULL << 23 | /* SENSOR_DIRECT_DATA */ 295 1ULL << 24 | /* GPU_DATA_BUFFER */ 296 1ULL << 25 | /* GPU_CUBE_MAP */ 297 1ULL << 26 | /* GPU_MIPMAP_COMPLETE */ 298 299 #if GRALLOC_VERSION_MAJOR >= 1 300 /* As producer and consumer usage are combined there is no way to differentiate these 301 but they are both listed here to show that the intention is to include both. */ 302 GRALLOC_USAGE_SENSOR_DIRECT_DATA | /* 1U << 23 */ 303 GRALLOC_USAGE_GPU_DATA_BUFFER | /* 1U << 24 */ 304 #endif 305 #if GRALLOC_VERSION_MAJOR >= 1 306 GRALLOC1_PRODUCER_USAGE_PRIVATE_NONSECURE | 307 GRALLOC1_PRODUCER_USAGE_NOZEROED | 308 GRALLOC1_CONSUMER_USAGE_VIDEO_PRIVATE_DATA | 309 310 GS101_GRALLOC_USAGE_TPU_INPUT | 311 GS101_GRALLOC_USAGE_TPU_OUTPUT | 312 GS101_GRALLOC_USAGE_CAMERA_STATS | 313 314 GRALLOC_USAGE_PRIVATE_19 | /* 1U << 48 */ 315 GRALLOC_USAGE_PRIVATE_18 | /* 1U << 49 */ 316 GRALLOC_USAGE_PRIVATE_17 | /* 1U << 50 */ 317 GRALLOC_USAGE_PRIVATE_16 | /* 1U << 51 */ 318 GRALLOC_USAGE_PRIVATE_15 | /* 1U << 52 */ 319 GRALLOC_USAGE_PRIVATE_14 | /* 1U << 53 */ 320 GRALLOC_USAGE_PRIVATE_13 | /* 1U << 54 */ 321 GRALLOC_USAGE_PRIVATE_12 | /* 1U << 55 */ 322 323 GRALLOC_USAGE_PRIVATE_10 | /* 1U << 57 */ 324 GRALLOC_USAGE_PRIVATE_9 | /* 1U << 58 */ 325 GRALLOC_USAGE_PRIVATE_8 | /* 1U << 59 */ 326 GRALLOC_USAGE_PRIVATE_7 | /* 1U << 60 */ 327 GRALLOC_USAGE_PRIVATE_6 | /* 1U << 61 */ 328 GRALLOC_USAGE_PRIVATE_5 | /* 1U << 62 */ 329 GRALLOC_USAGE_PRIVATE_4 | /* 1U << 63 */ 330 #endif 331 GRALLOC_USAGE_PRIVATE_0 | /* 1U << 28 */ 332 GRALLOC_USAGE_PRIVATE_1 | /* 1U << 29 */ 333 GRALLOC_USAGE_PRIVATE_2 | /* 1U << 30 */ 334 GRALLOC_USAGE_PRIVATE_3; /* 1U << 31 */ 335 #endif /*MALI_GRALLOC_USAGES_H_*/ 336