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 CRs-fixed: 888733 Change-Id: Icae4cfb92ceae5e593fd6c5658999fc90ef97ea1
This commit is contained in:
committed by
Kaushik Kanetkar
parent
57265ee8cc
commit
cffc5bd986
@@ -170,13 +170,38 @@ void AdrenoMemInfo::getAlignedWidthAndHeight(const private_handle_t *hnd, int& a
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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,
|
void AdrenoMemInfo::getAlignedWidthAndHeight(int width, int height, int format,
|
||||||
int usage, int& aligned_w, int& aligned_h)
|
int usage, int& aligned_w, int& aligned_h)
|
||||||
{
|
{
|
||||||
bool ubwc_enabled = isUBwcEnabled(format, usage);
|
bool ubwc_enabled = isUBwcEnabled(format, usage);
|
||||||
|
|
||||||
// Currently surface padding is only computed for RGB* surfaces.
|
// Currently surface padding is only computed for RGB* surfaces.
|
||||||
if (format <= HAL_PIXEL_FORMAT_BGRA_8888) {
|
if (isUncompressedRgbFormat(format) == true) {
|
||||||
int tileEnabled = ubwc_enabled || isMacroTileEnabled(format, usage);
|
int tileEnabled = ubwc_enabled || isMacroTileEnabled(format, usage);
|
||||||
getGpuAlignedWidthHeight(width, height, format, tileEnabled, aligned_w, aligned_h);
|
getGpuAlignedWidthHeight(width, height, format, tileEnabled, aligned_w, aligned_h);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -188,12 +188,9 @@ void gpu_context_t::getGrallocInformationFromFormat(int inputFormat,
|
|||||||
{
|
{
|
||||||
*bufferType = BUFFER_TYPE_VIDEO;
|
*bufferType = BUFFER_TYPE_VIDEO;
|
||||||
|
|
||||||
if (inputFormat <= HAL_PIXEL_FORMAT_BGRA_8888) {
|
if (isUncompressedRgbFormat(inputFormat) == TRUE) {
|
||||||
// RGB formats
|
// RGB formats
|
||||||
*bufferType = BUFFER_TYPE_UI;
|
*bufferType = BUFFER_TYPE_UI;
|
||||||
} else if ((inputFormat == HAL_PIXEL_FORMAT_R_8) ||
|
|
||||||
(inputFormat == HAL_PIXEL_FORMAT_RG_88)) {
|
|
||||||
*bufferType = BUFFER_TYPE_UI;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,9 @@ int getRgbDataAddress(private_handle_t* pHnd, void** rgb_data);
|
|||||||
// To query if UBWC is enabled, based on format and usage flags
|
// To query if UBWC is enabled, based on format and usage flags
|
||||||
bool isUBwcEnabled(int format, int usage);
|
bool isUBwcEnabled(int format, int usage);
|
||||||
|
|
||||||
|
// Function to check if the format is an uncompressed RGB format
|
||||||
|
bool isUncompressedRgbFormat(int format);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
class Locker {
|
class Locker {
|
||||||
|
|||||||
Reference in New Issue
Block a user