From 33b1e3d7bf88edfafa0580bcc41b7c0f02970f9b Mon Sep 17 00:00:00 2001 From: Han_Longfei Date: Tue, 17 Mar 2020 22:09:55 +0800 Subject: [PATCH] Revert "Fix the performance issue on APL. Perf will drop from 25fps to 10fps for 1080p decode + vp(nv12tileY -> i420linear) if only mos_gem_bo_map_gtt(surface->bo) on AtomSOC(APL)." This reverts commit cb0c3139737570ec214fca799c3488d8d20e8d60. Change-Id: I3f3b10bd82de76fedab6696c64b14883df8459de --- .../linux/common/ddi/media_libva_util.cpp | 52 +++++++++++++------ .../os/mos_graphicsresource_specific.cpp | 14 +++-- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/media_driver/linux/common/ddi/media_libva_util.cpp b/media_driver/linux/common/ddi/media_libva_util.cpp index 4d5197b9be..0621036b01 100755 --- a/media_driver/linux/common/ddi/media_libva_util.cpp +++ b/media_driver/linux/common/ddi/media_libva_util.cpp @@ -738,8 +738,11 @@ void* DdiMediaUtil_LockSurface(DDI_MEDIA_SURFACE *surface, uint32_t flag) DDI_CHK_NULL(surface->bo, "nullptr surface->bo", nullptr); if((false == surface->bMapped) && (0 == surface->iRefCount)) { - // remove the differentiation from AtomSOC(surface->pMediaCtx->bIsAtomSOC). - // perf will drop from 25fps to 10fps for 1080p decode + vp(nv12tileY -> i420linear) if only mos_gem_bo_map_gtt(surface->bo) on AtomSOC(APL). + if (surface->pMediaCtx->bIsAtomSOC) + { + mos_gem_bo_map_gtt(surface->bo); + } + else { if (surface->TileType == I915_TILING_NONE) { @@ -765,6 +768,7 @@ void* DdiMediaUtil_LockSurface(DDI_MEDIA_SURFACE *surface, uint32_t flag) (uint8_t *)surface->pSystemShadow, false); DDI_CHK_CONDITION((vaStatus != VA_STATUS_SUCCESS), "SwizzleSurface failed", nullptr); + } else if (flag & MOS_LOCKFLAG_NO_SWIZZLE) { @@ -803,8 +807,11 @@ void DdiMediaUtil_UnlockSurface(DDI_MEDIA_SURFACE *surface) if((true == surface->bMapped) && (1 == surface->iRefCount)) { - // remove the differentiation from AtomSOC(surface->pMediaCtx->bIsAtomSOC). - // perf will drop from 25fps to 10fps for 1080p decode + vp(nv12tileY -> i420linear) if only mos_gem_bo_map_gtt(surface->bo) on AtomSOC(APL). + if (surface->pMediaCtx->bIsAtomSOC) + { + mos_gem_bo_unmap_gtt(surface->bo); + } + else { if (surface->TileType == I915_TILING_NONE) { @@ -861,14 +868,22 @@ void* DdiMediaUtil_LockBuffer(DDI_MEDIA_BUFFER *buf, uint32_t flag) } else { - if (buf->TileType == I915_TILING_NONE) + if (buf->pMediaCtx->bIsAtomSOC) { - mos_bo_map(buf->bo, ((MOS_LOCKFLAG_READONLY | MOS_LOCKFLAG_WRITEONLY) & flag)); + mos_gem_bo_map_gtt(buf->bo); } else { - mos_gem_bo_map_gtt(buf->bo); - } + if (buf->TileType == I915_TILING_NONE) + { + mos_bo_map(buf->bo, ((MOS_LOCKFLAG_READONLY | MOS_LOCKFLAG_WRITEONLY) & flag)); + } + else + { + mos_gem_bo_map_gtt(buf->bo); + } + } + buf->pData = (uint8_t*)(buf->bo->virt); } @@ -901,13 +916,20 @@ void DdiMediaUtil_UnlockBuffer(DDI_MEDIA_BUFFER *buf) } else { - if (buf->TileType == I915_TILING_NONE) - { - mos_bo_unmap(buf->bo); - } - else - { - mos_gem_bo_unmap_gtt(buf->bo); + if (buf->pMediaCtx->bIsAtomSOC) + { + mos_gem_bo_unmap_gtt(buf->bo); + } + else + { + if (buf->TileType == I915_TILING_NONE) + { + mos_bo_unmap(buf->bo); + } + else + { + mos_gem_bo_unmap_gtt(buf->bo); + } } buf->bo->virt = nullptr; } diff --git a/media_driver/linux/common/os/mos_graphicsresource_specific.cpp b/media_driver/linux/common/os/mos_graphicsresource_specific.cpp index d995f90035..666fa97ddb 100755 --- a/media_driver/linux/common/os/mos_graphicsresource_specific.cpp +++ b/media_driver/linux/common/os/mos_graphicsresource_specific.cpp @@ -464,8 +464,11 @@ void* GraphicsResourceSpecific::Lock(OsContext* osContextPtr, LockParams& params if(false == m_mapped) { - // remove the differentiation from AtomSOC(surface->pMediaCtx->bIsAtomSOC). - // perf will drop from 25fps to 10fps for 1080p decode + vp(nv12tileY -> i420linear) if only mos_gem_bo_map_gtt(surface->bo) on AtomSOC(APL). + if (pOsContextSpecific->IsAtomSoc()) + { + mos_gem_bo_map_gtt(boPtr); + } + else { if (m_tileType != MOS_TILE_LINEAR && !params.m_tileAsTiled) { @@ -540,8 +543,11 @@ MOS_STATUS GraphicsResourceSpecific::Unlock(OsContext* osContextPtr) { if (m_mapped) { - // remove the differentiation from AtomSOC(surface->pMediaCtx->bIsAtomSOC). - // perf will drop from 25fps to 10fps for 1080p decode + vp(nv12tileY -> i420linear) if only mos_gem_bo_map_gtt(surface->bo) on AtomSOC(APL). + if (pOsContextSpecific->IsAtomSoc()) + { + mos_gem_bo_unmap_gtt(boPtr); + } + else { if (m_systemShadow) {