12ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* 2deb4b3808eef2b2dd0e58595f7a8b57f1a23edd6Thierry Strudel * Copyright (c) 2011-2017, The Linux Foundation. All rights reserved. 32ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 42ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Redistribution and use in source and binary forms, with or without 52ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * modification, are permitted provided that the following conditions are 62ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * met: 72ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * * Redistributions of source code must retain the above copyright 82ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * notice, this list of conditions and the following disclaimer. 92ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * * Redistributions in binary form must reproduce the above 102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * copyright notice, this list of conditions and the following 112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * disclaimer in the documentation and/or other materials provided 122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * with the distribution. 132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * * Neither the name of The Linux Foundation nor the names of its 142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * contributors may be used to endorse or promote products derived 152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * from this software without specific prior written permission. 162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * 172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel */ 292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include "gr_utils.h" 312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelnamespace gralloc1 { 332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelbool IsUncompressedRGBFormat(int format) { 352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel switch (format) { 362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBA_8888: 372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBX_8888: 382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGB_888: 392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGB_565: 402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_BGR_565: 412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_BGRA_8888: 422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBA_5551: 432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBA_4444: 442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_R_8: 452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RG_88: 462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_BGRX_8888: 472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBA_1010102: 482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_ARGB_2101010: 492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBX_1010102: 502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_XRGB_2101010: 512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_BGRA_1010102: 522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_ABGR_2101010: 532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_BGRX_1010102: 542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_XBGR_2101010: 55cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel case HAL_PIXEL_FORMAT_RGBA_FP16: 562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return true; 572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel default: 582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel break; 592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel } 602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return false; 622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelbool IsCompressedRGBFormat(int format) { 652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel switch (format) { 662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_4x4_KHR: 672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: 682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x4_KHR: 692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR: 702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x5_KHR: 712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR: 722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x5_KHR: 732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR: 742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x6_KHR: 752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR: 762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x5_KHR: 772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR: 782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x6_KHR: 792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR: 802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x8_KHR: 812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: 822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x5_KHR: 832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR: 842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x6_KHR: 852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR: 862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x8_KHR: 872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR: 882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x10_KHR: 892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR: 902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x10_KHR: 912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR: 922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x12_KHR: 932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR: 942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return true; 952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel default: 962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel break; 972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel } 982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return false; 1002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 1012ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudeluint32_t GetBppForUncompressedRGB(int format) { 1032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel uint32_t bpp = 0; 1042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel switch (format) { 105cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel case HAL_PIXEL_FORMAT_RGBA_FP16: 106cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel bpp = 8; 107cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel break; 1082ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBA_8888: 1092ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBX_8888: 1102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_BGRA_8888: 1112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_BGRX_8888: 112deb4b3808eef2b2dd0e58595f7a8b57f1a23edd6Thierry Strudel case HAL_PIXEL_FORMAT_RGBA_1010102: 113deb4b3808eef2b2dd0e58595f7a8b57f1a23edd6Thierry Strudel case HAL_PIXEL_FORMAT_ARGB_2101010: 114deb4b3808eef2b2dd0e58595f7a8b57f1a23edd6Thierry Strudel case HAL_PIXEL_FORMAT_RGBX_1010102: 115deb4b3808eef2b2dd0e58595f7a8b57f1a23edd6Thierry Strudel case HAL_PIXEL_FORMAT_XRGB_2101010: 116deb4b3808eef2b2dd0e58595f7a8b57f1a23edd6Thierry Strudel case HAL_PIXEL_FORMAT_BGRA_1010102: 117deb4b3808eef2b2dd0e58595f7a8b57f1a23edd6Thierry Strudel case HAL_PIXEL_FORMAT_ABGR_2101010: 11886f0be319b163d01870e0cc4c2d6489f5c5f117dNaseer Ahmed case HAL_PIXEL_FORMAT_BGRX_1010102: 119deb4b3808eef2b2dd0e58595f7a8b57f1a23edd6Thierry Strudel case HAL_PIXEL_FORMAT_XBGR_2101010: 1202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel bpp = 4; 1212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel break; 1222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGB_888: 1232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel bpp = 3; 1242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel break; 1252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGB_565: 1262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_BGR_565: 1272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBA_5551: 1282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case HAL_PIXEL_FORMAT_RGBA_4444: 1292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel bpp = 2; 1302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel break; 1312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel default: 132deb4b3808eef2b2dd0e58595f7a8b57f1a23edd6Thierry Strudel ALOGE("Error : %s New format request = 0x%x", __FUNCTION__, format); 1332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel break; 1342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel } 1352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return bpp; 1372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 1382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelbool CpuCanAccess(gralloc1_producer_usage_t prod_usage, gralloc1_consumer_usage_t cons_usage) { 1402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return CpuCanRead(prod_usage, cons_usage) || CpuCanWrite(prod_usage); 1412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 1422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelbool CpuCanRead(gralloc1_producer_usage_t prod_usage, gralloc1_consumer_usage_t cons_usage) { 1442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel if (prod_usage & GRALLOC1_PRODUCER_USAGE_CPU_READ) { 1452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return true; 1462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel } 1472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel if (cons_usage & GRALLOC1_CONSUMER_USAGE_CPU_READ) { 1492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return true; 1502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel } 1512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return false; 1532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 1542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelbool CpuCanWrite(gralloc1_producer_usage_t prod_usage) { 1562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel if (prod_usage & GRALLOC1_PRODUCER_USAGE_CPU_WRITE) { 1572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel // Application intends to use CPU for rendering 1582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return true; 1592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel } 1602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return false; 1622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 1632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 1642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} // namespace gralloc1 165