gralloc: Modify check for uncompressed RGB buffers

The previous check for RGB formats skipped certain formats and hence
the alignment was incorrect.
Add a check for all non-compressed RGB formats before calling
getGpuAlignedWidthHeight

Acked by: Naomi Luis<nluis@codeaurora.org>

CRs-fixed: 888733
Bug: 23967172
Change-Id: Icae4cfb92ceae5e593fd6c5658999fc90ef97ea1
This commit is contained in:
Arun Kumar K.R 2015-08-28 14:57:31 -07:00 committed by Vineeta Srivastava
parent 0e28139946
commit ba008b62da
3 changed files with 30 additions and 5 deletions

27
msm8994/libgralloc/alloc_controller.cpp Normal file → Executable file
View File

@ -137,12 +137,37 @@ int AdrenoMemInfo::isMacroTilingSupportedByGPU()
}
bool isUncompressedRgbFormat(int format)
{
bool is_rgb_format = false;
switch (format)
{
case HAL_PIXEL_FORMAT_RGBA_8888:
case HAL_PIXEL_FORMAT_RGBX_8888:
case HAL_PIXEL_FORMAT_RGB_888:
case HAL_PIXEL_FORMAT_RGB_565:
case HAL_PIXEL_FORMAT_BGRA_8888:
case HAL_PIXEL_FORMAT_RGBA_5551:
case HAL_PIXEL_FORMAT_RGBA_4444:
case HAL_PIXEL_FORMAT_R_8:
case HAL_PIXEL_FORMAT_RG_88:
case HAL_PIXEL_FORMAT_BGRX_8888: // Intentional fallthrough
is_rgb_format = true;
break;
default:
break;
}
return is_rgb_format;
}
void AdrenoMemInfo::getAlignedWidthAndHeight(int width, int height, int format,
int usage, int& aligned_w, int& aligned_h)
{
// Currently surface padding is only computed for RGB* surfaces.
if (format <= HAL_PIXEL_FORMAT_BGRA_8888) {
if (isUncompressedRgbFormat(format) == true) {
int tileEnabled = isMacroTileEnabled(format, usage);
AdrenoMemInfo::getInstance().getGpuAlignedWidthHeight(width,
height, format, tileEnabled, aligned_w, aligned_h);

View File

@ -192,12 +192,9 @@ void gpu_context_t::getGrallocInformationFromFormat(int inputFormat,
{
*bufferType = BUFFER_TYPE_VIDEO;
if (inputFormat <= HAL_PIXEL_FORMAT_BGRA_8888) {
if (isUncompressedRgbFormat(inputFormat) == TRUE) {
// RGB formats
*bufferType = BUFFER_TYPE_UI;
} else if ((inputFormat == HAL_PIXEL_FORMAT_R_8) ||
(inputFormat == HAL_PIXEL_FORMAT_RG_88)) {
*bufferType = BUFFER_TYPE_UI;
}
}

View File

@ -75,6 +75,9 @@ int getYUVPlaneInfo(private_handle_t* pHnd, struct android_ycbcr* ycbcr);
// To query if UBWC is enabled, based on format and usage flags
bool isUBwcEnabled(int format, int usage);
// Function to check if the format is an uncompressed RGB format
bool isUncompressedRgbFormat(int format);
/*****************************************************************************/
class Locker {