summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyebin Jeong <hyebin.jeong@samsung.com>2021-03-16 19:03:42 +0900
committerMidas Chien <midaschieh@google.com>2021-06-01 17:51:12 +0800
commit460713279e28060f0cf321940f5965c176c64a09 (patch)
tree4ad7c71e9e04ae205dc96b7146935daac527633b
parentaeb860eedfe433b780491d23112167e50292c2cb (diff)
libacryl: make sbwc classified into G2D_PERF_LAYER_SBWC
sbwc format is classified into G2D_PERF_LAYER_SBWC because its ppc is different from that of yuv2p. Also 8+2 format related code is removed as it is deprecated. Bug: 177310644 Test: check check g2d path for yuv, sbwc and afbc av1 Signed-off-by: Hyebin Jeong <hyebin.jeong@samsung.com> Change-Id: I49eb4bdbbdc5ffc50a2ebb24c7d1429719f6dc1c
-rw-r--r--libacryl/acrylic_formats.cpp28
-rw-r--r--libacryl/acrylic_g2d.cpp38
-rw-r--r--libacryl/local_include/uapi/g2d.h11
3 files changed, 24 insertions, 53 deletions
diff --git a/libacryl/acrylic_formats.cpp b/libacryl/acrylic_formats.cpp
index 9e449f0..d5094af 100644
--- a/libacryl/acrylic_formats.cpp
+++ b/libacryl/acrylic_formats.cpp
@@ -170,8 +170,6 @@ static struct {
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M, 2, 0x22, { 8, 4, 0, 0}, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP, 2},
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_PRIV, 2, 0x22, { 8, 4, 0, 0}, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP, 2},
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_TILED, 2, 0x22, { 8, 4, 0, 0}, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP, 2},
- {HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B, 1, 0x22, {15, 0, 0, 0}, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B, 4},
- {HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_S10B, 2, 0x22, {10, 5, 0, 0}, HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B, 4},
{HAL_PIXEL_FORMAT_YCBCR_P010, 1, 0x22, {24, 0, 0, 0}, HAL_PIXEL_FORMAT_YCBCR_P010, 2},
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_P010_M, 2, 0x22, {16, 8, 0, 0}, HAL_PIXEL_FORMAT_YCBCR_P010, 2},
{HAL_PIXEL_FORMAT_GOOGLE_NV12_SP_10B, 1, 0x22, {24, 0, 0, 0}, HAL_PIXEL_FORMAT_YCBCR_P010, 2},
@@ -188,27 +186,17 @@ static struct {
#define NV12_MFC_Y_PAYLOAD(w, h) (MFC_ALIGN(w) * MFC_ALIGN(h))
#define NV12_MFC_C_PAYLOAD(w, h) (MFC_ALIGN(w) * MFC_ALIGN(h) / 2)
#define NV12_MFC_PAYLOAD(w, h) (NV12_MFC_Y_PAYLOAD(w, h) + MFC_PAD_SIZE + (MFC_ALIGN(w) * (h) / 2))
-#define NV12_82_MFC_Y_PAYLOAD(w, h) (NV12_MFC_Y_PAYLOAD(w, h) + MFC_PAD_SIZE + MFC_ALIGN((w) / 4) * (h))
-#define NV12_82_MFC_C_PAYLOAD(w, h) (NV12_MFC_C_PAYLOAD(w, h) + MFC_PAD_SIZE + MFC_ALIGN((w) / 4) * (h) / 2)
-#define NV12_82_MFC_PAYLOAD(w, h) (NV12_MFC_Y_PAYLOAD(w, h) + MFC_PAD_SIZE + MFC_ALIGN((w) / 4) * MFC_ALIGN(h) + MFC_2B_PAD_SIZE + NV12_82_MFC_C_PAYLOAD(w, h))
size_t halfmt_plane_length(uint32_t fmt, unsigned int plane, uint32_t width, uint32_t height)
{
- switch (fmt) {
- case HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B:
- return NV12_82_MFC_PAYLOAD(width, height);
- case HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_S10B:
- return (plane == 0) ? NV12_82_MFC_Y_PAYLOAD(width, height) : NV12_82_MFC_C_PAYLOAD(width, height);
- default:
- for (size_t i = 0 ; i < ARRSIZE(__halfmt_plane_bpp); i++) {
- if (__halfmt_plane_bpp[i].fmt == fmt) {
- LOGASSERT(plane < __halfmt_plane_bpp[i].bufcnt,
- "Plane count of HAL format %#x is %u but %d plane is requested",
- fmt, __halfmt_plane_bpp[i].bufcnt, plane);
- if (plane < __halfmt_plane_bpp[i].bufcnt)
- return (__halfmt_plane_bpp[i].bpp[plane] * width * height) / 8;
- }
- }
+ for (size_t i = 0; i < ARRSIZE(__halfmt_plane_bpp); i++) {
+ if (__halfmt_plane_bpp[i].fmt == fmt) {
+ LOGASSERT(plane < __halfmt_plane_bpp[i].bufcnt,
+ "Plane count of HAL format %#x is %u but %d plane is requested", fmt,
+ __halfmt_plane_bpp[i].bufcnt, plane);
+ if (plane < __halfmt_plane_bpp[i].bufcnt)
+ return (__halfmt_plane_bpp[i].bpp[plane] * width * height) / 8;
+ }
}
LOGASSERT(1, "Unable to find HAL format %#x with plane %d", fmt, plane);
diff --git a/libacryl/acrylic_g2d.cpp b/libacryl/acrylic_g2d.cpp
index 2de452a..6e3a184 100644
--- a/libacryl/acrylic_g2d.cpp
+++ b/libacryl/acrylic_g2d.cpp
@@ -136,9 +136,6 @@ public:
mMatrixIndex[mMatrixCount] = spcidx;
*command |= mMatrixCount++;
- // 8-bit part data are always dithered by MFC
- if ((g2dfmt & G2D_DATAFMT_YUV420SP82_LGCY) != 0)
- *command |= G2D_YCBCRMODE_DITHER;
return true;
}
@@ -477,8 +474,6 @@ static g2d_fmt __halfmt_to_g2dfmt_legacy[] = {
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP, G2D_FMT_NV12, 1, 0},
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M, G2D_FMT_NV12, 2, 0},
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN, G2D_FMT_NV12, 1, 0},
- {HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B, G2D_FMT_NV12_82_LGCY, 1, 0},
- {HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_S10B, G2D_FMT_NV12_82_LGCY, 2, 0},
{HAL_PIXEL_FORMAT_YCBCR_P010, G2D_FMT_NV12_P010_LGCY, 1, 0},
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_P010_M, G2D_FMT_NV12_P010_LGCY, 2, 0},
{HAL_PIXEL_FORMAT_YCbCr_422_I, G2D_FMT_YUYV, 1, 0},
@@ -507,8 +502,6 @@ static g2d_fmt __halfmt_to_g2dfmt[] = {
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M, G2D_FMT_NV12, 2, 0},
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN, G2D_FMT_NV12, 1, 0},
{HAL_PIXEL_FORMAT_GOOGLE_NV12_SP, G2D_FMT_NV12, 1, 0},
- {HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B, G2D_FMT_NV12_82, 1, 0},
- {HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_S10B, G2D_FMT_NV12_82, 2, 0},
{HAL_PIXEL_FORMAT_YCBCR_P010, G2D_FMT_NV12_P010, 1, 0},
{HAL_PIXEL_FORMAT_GOOGLE_NV12_SP_10B, G2D_FMT_NV12_P010, 1, 0},
{HAL_PIXEL_FORMAT_EXYNOS_YCbCr_P010_M, G2D_FMT_NV12_P010, 2, 0},
@@ -602,8 +595,6 @@ unsigned int AcrylicCompositorG2D::updateFilterCoefficients(unsigned int layerco
static uint32_t mfc_stride_formats[] = {
HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN,
- HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B,
- HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_S10B,
HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_SBWC,
HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_SBWC,
HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_10B_SBWC,
@@ -1240,7 +1231,8 @@ bool AcrylicCompositorG2D::requestPerformanceQoS(AcrylicPerformanceRequest *requ
src_yuv420_8b = false;
unsigned int bpp;
- uint8_t planecnt;
+ uint8_t planecount;
+ uint32_t equiv_fmt;
for (int idx = 0; idx < frame->getLayerCount(); idx++) {
AcrylicPerformanceRequestLayer *layer = &(frame->mLayers[idx]);
uint64_t layer_bw, pixelcount;
@@ -1261,18 +1253,19 @@ bool AcrylicCompositorG2D::requestPerformanceQoS(AcrylicPerformanceRequest *requ
(ALIGN(layer->mSourceRect.pos.vert + src_vert, 16) -
ALIGN_DOWN(layer->mSourceRect.pos.vert, 16));
- planecnt = halfmt_plane_count(layer->mPixFormat);
- if (layer->mAttribute & AcrylicCanvas::ATTR_COMPRESSED)
+ bpp = halfmt_bpp(layer->mPixFormat);
+ planecount = halfmt_plane_count(layer->mPixFormat);
+ equiv_fmt = find_format_equivalent(layer->mPixFormat);
+
+ if (equiv_fmt == HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_SBWC ||
+ equiv_fmt == HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_10B_SBWC)
+ data.frame[i].layer[idx].layer_attr |= G2D_PERF_LAYER_SBWC;
+ else if (layer->mAttribute & AcrylicCanvas::ATTR_COMPRESSED)
data.frame[i].layer[idx].layer_attr |= G2D_PERF_LAYER_COMPRESSED;
- else if (planecnt == 2)
+ else if (planecount == 2)
data.frame[i].layer[idx].layer_attr |= G2D_PERF_LAYER_YUV2P;
- else if (planecnt == 4)
- data.frame[i].layer[idx].layer_attr |= G2D_PERF_LAYER_YUV2P_82;
- // src_yuv420_8b is used when calculating write bandwidth.
- bpp = halfmt_bpp(layer->mPixFormat);
- if (bpp == 12)
- src_yuv420_8b = true;
+ if (bpp == 12) src_yuv420_8b = true;
layer_bw = pixelcount * bpp;
// Below is checking if scaling is involved.
@@ -1294,8 +1287,6 @@ bool AcrylicCompositorG2D::requestPerformanceQoS(AcrylicPerformanceRequest *requ
layer_bw <<= 4; // layer_bw * 16
} else {
layer_bw = (layer_bw << 4) + (layer_bw << 1); // layer_bw * 18
-
- data.frame[i].layer[idx].layer_attr |= G2D_PERF_LAYER_SCALING;
}
bandwidth += layer_bw;
@@ -1314,12 +1305,11 @@ bool AcrylicCompositorG2D::requestPerformanceQoS(AcrylicPerformanceRequest *requ
data.frame[i].bandwidth_read = static_cast<uint32_t>(bandwidth);
bpp = halfmt_bpp(frame->mTargetPixFormat);
- if (bpp == 12)
- data.frame[i].frame_attr |= G2D_PERF_FRAME_YUV2P;
-
bandwidth = frame->mTargetDimension.hori * frame->mTargetDimension.vert;
bandwidth *= frame->mFrameRate * bpp;
+ // When src rotation is involved, src format includes yuv420(8bit-depth)
+ // and dst format is yuv420(8bit-depth), weight to the write bandwidth is 2.
// RSH 12 : bw * 2 / (bits_per_byte * kilobyte)
// RHS 13 : bw * 1 / (bits_per_byte * kilobyte)
bandwidth >>= ((bpp == 12) && src_yuv420_8b && src_rotate) ? 12 : 13;
diff --git a/libacryl/local_include/uapi/g2d.h b/libacryl/local_include/uapi/g2d.h
index 7364fe4..77aa957 100644
--- a/libacryl/local_include/uapi/g2d.h
+++ b/libacryl/local_include/uapi/g2d.h
@@ -61,15 +61,13 @@ extern "C" {
#define G2D_DATAFMT_YUV422I (10 << G2D_DATAFMT_SHIFT)
#define G2D_DATAFMT_YUV422SP (11 << G2D_DATAFMT_SHIFT)
#define G2D_DATAFMT_P010_LGCY (12 << G2D_DATAFMT_SHIFT)
-#define G2D_DATAFMT_YUV420SP82_LGCY (13 << G2D_DATAFMT_SHIFT)
-#define G2D_DATAFMT_YUV_MAX (13 << G2D_DATAFMT_SHIFT)
+#define G2D_DATAFMT_YUV_MAX (12 << G2D_DATAFMT_SHIFT)
#define G2D_DATAFMT_ABGR2101010 (14 << G2D_DATAFMT_SHIFT)
#define G2D_FMT_YCBCR_BITDEPTH_SHIFT 28
#define G2D_FMT_YCBCR_BITDEPTH_MASK (0x3 << G2D_FMT_YCBCR_BITDEPTH_SHIFT)
#define G2D_FMT_YCBCR_8BIT (0 << G2D_FMT_YCBCR_BITDEPTH_SHIFT)
#define G2D_FMT_YCBCR_10BIT (1 << G2D_FMT_YCBCR_BITDEPTH_SHIFT)
-#define G2D_FMT_YCBCR_82BIT (2 << G2D_FMT_YCBCR_BITDEPTH_SHIFT)
#define G2D_FMT_ARGB8888 (G2D_DATAFMT_8888 | G2D_SWZ_ARGB)
#define G2D_FMT_ABGR8888 (G2D_DATAFMT_8888 | G2D_SWZ_ABGR)
@@ -87,10 +85,6 @@ extern "C" {
#define G2D_FMT_VYUY (G2D_DATAFMT_YUV422I | G2D_YUV_CY | G2D_YUV_VU)
#define G2D_FMT_NV16 (G2D_DATAFMT_YUV422SP | G2D_YUV_UV)
#define G2D_FMT_NV61 (G2D_DATAFMT_YUV422SP | G2D_YUV_VU)
-#define G2D_FMT_NV12_82_LGCY (G2D_DATAFMT_YUV420SP82_LGCY | G2D_YUV_UV)
-#define G2D_FMT_NV21_82_LGCY (G2D_DATAFMT_YUV420SP82_LGCY | G2D_YUV_VU)
-#define G2D_FMT_NV12_82 (G2D_DATAFMT_YUV420SP | G2D_FMT_YCBCR_82BIT | G2D_YUV_UV)
-#define G2D_FMT_NV21_82 (G2D_DATAFMT_YUV420SP | G2D_FMT_YCBCR_82BIT | G2D_YUV_VU)
#define G2D_FMT_NV12_P010_LGCY (G2D_DATAFMT_P010_LGCY | G2D_YUV_UV)
#define G2D_FMT_NV21_P010_LGCY (G2D_DATAFMT_P010_LGCY | G2D_YUV_VU)
#define G2D_FMT_NV12_P010 (G2D_DATAFMT_YUV420SP | G2D_FMT_YCBCR_10BIT | G2D_YUV_UV)
@@ -296,7 +290,7 @@ struct g2d_task {
#define G2D_PERF_LAYER_ROTATE (1 << 0)
#define G2D_PERF_LAYER_SCALING (1 << 1)
#define G2D_PERF_LAYER_YUV2P (1 << 4)
-#define G2D_PERF_LAYER_YUV2P_82 (1 << 5)
+#define G2D_PERF_LAYER_SBWC (1 << 5)
#define G2D_PERF_LAYER_COMPRESSED (1 << 6)
struct g2d_performance_layer {
@@ -308,7 +302,6 @@ struct g2d_performance_layer {
};
#define G2D_PERF_FRAME_SOLIDCOLORFILL (1 << 0)
-#define G2D_PERF_FRAME_YUV2P (1 << 1)
struct g2d_performance_frame {
struct g2d_performance_layer layer[G2D_MAX_IMAGES];