diff options
author | Hyebin Jeong <hyebin.jeong@samsung.com> | 2021-03-16 19:03:42 +0900 |
---|---|---|
committer | Midas Chien <midaschieh@google.com> | 2021-06-01 17:51:12 +0800 |
commit | 460713279e28060f0cf321940f5965c176c64a09 (patch) | |
tree | 4ad7c71e9e04ae205dc96b7146935daac527633b | |
parent | aeb860eedfe433b780491d23112167e50292c2cb (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.cpp | 28 | ||||
-rw-r--r-- | libacryl/acrylic_g2d.cpp | 38 | ||||
-rw-r--r-- | libacryl/local_include/uapi/g2d.h | 11 |
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]; |