gralloc: Add support for ASTC formats
This change adds support for Khronos standard ASTC formats. Change-Id: I6963f2ed82b5f179ed8627022746deec02ff826a
This commit is contained in:
committed by
Jeykumar Sankaran
parent
40524ac29a
commit
63326f4b22
@@ -46,6 +46,9 @@
|
|||||||
#define VENUS_BUFFER_SIZE(args...) 0
|
#define VENUS_BUFFER_SIZE(args...) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define ASTC_BLOCK_SIZE 16
|
||||||
|
#define ASTC_IN_UNITS(n, unit_size) (((n) + (unit_size) -1) / (unit_size))
|
||||||
|
|
||||||
using namespace gralloc;
|
using namespace gralloc;
|
||||||
using namespace qdutils;
|
using namespace qdutils;
|
||||||
|
|
||||||
@@ -199,6 +202,76 @@ void AdrenoMemInfo::getAlignedWidthAndHeight(int width, int height, int format,
|
|||||||
case HAL_PIXEL_FORMAT_NV21_ZSL:
|
case HAL_PIXEL_FORMAT_NV21_ZSL:
|
||||||
aligned_w = ALIGN(width, 64);
|
aligned_w = ALIGN(width, 64);
|
||||||
break;
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_4x4_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 4);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 4);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x4_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 5);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 4);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 5);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 5);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 6);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 5);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x6_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 6);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 6);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 8);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 5);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x6_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 8);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 6);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x8_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 8);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 8);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 10);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 5);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x6_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 10);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 6);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x8_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 10);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 8);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x10_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 10);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 10);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x10_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 12);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 10);
|
||||||
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x12_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
|
||||||
|
aligned_w = ASTC_IN_UNITS(width, 12);
|
||||||
|
aligned_h = ASTC_IN_UNITS(height, 12);
|
||||||
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -412,6 +485,35 @@ size_t getSize(int format, int width, int height, int alignedw, int alignedh)
|
|||||||
alignedh = ALIGN(height, 64);
|
alignedh = ALIGN(height, 64);
|
||||||
size = ALIGN((alignedw*alignedh) + (alignedw* alignedh)/2, 4096);
|
size = ALIGN((alignedw*alignedh) + (alignedw* alignedh)/2, 4096);
|
||||||
break;
|
break;
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_4x4_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x4_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x6_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x6_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x8_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x6_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x8_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x10_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x10_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x12_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
|
||||||
|
case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
|
||||||
|
size = alignedw * alignedh * ASTC_BLOCK_SIZE;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ALOGE("unrecognized pixel format: 0x%x", format);
|
ALOGE("unrecognized pixel format: 0x%x", format);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|||||||
@@ -117,6 +117,36 @@ enum {
|
|||||||
//v4l2_fourcc('Y', 'B', 'W', 'C'). 10 bit per component. This compressed
|
//v4l2_fourcc('Y', 'B', 'W', 'C'). 10 bit per component. This compressed
|
||||||
//format reduces the memory access bandwidth
|
//format reduces the memory access bandwidth
|
||||||
HAL_PIXEL_FORMAT_YCbCr_422_I_10BIT_COMPRESSED = 0x43574259,
|
HAL_PIXEL_FORMAT_YCbCr_422_I_10BIT_COMPRESSED = 0x43574259,
|
||||||
|
|
||||||
|
//Khronos ASTC formats
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x4_KHR = 0x93B1,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x5_KHR = 0x93B2,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x5_KHR = 0x93B3,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x6_KHR = 0x93B4,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x5_KHR = 0x93B5,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x6_KHR = 0x93B6,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x8_KHR = 0x93B7,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x5_KHR = 0x93B8,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x6_KHR = 0x93B9,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x8_KHR = 0x93BA,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x10_KHR = 0x93BB,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x10_KHR = 0x93BC,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x12_KHR = 0x93BD,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x93D0,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 0x93D1,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 0x93D2,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 0x93D3,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 0x93D4,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 0x93D5,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 0x93D6,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 0x93D7,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 0x93D8,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 0x93D9,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 0x93DA,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 0x93DB,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 0x93DC,
|
||||||
|
HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 0x93DD,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* possible formats for 3D content*/
|
/* possible formats for 3D content*/
|
||||||
|
|||||||
Reference in New Issue
Block a user