blob: ec5348ff4e98fb4696321680eea5097612458a63 [file] [log] [blame]
From 3a53032ebc5eb2c234a6678152590c5f4ca7757f Mon Sep 17 00:00:00 2001
From: ChenJasonK <Jason.k.chen@intel.com>
Date: Thu, 26 Mar 2020 17:16:12 +0800
Subject: [PATCH] [Media Common] Fix tiling issue
For YV12 on Gen9, when driver set tile Y, but Gmm still create it as tile linear, thus driver need to query tiling info from gmm to update the tile type in DDI_MEDIA_SURFACE
Change-Id: Id36ac4eca5fbcec3481477a4a6cac787c8e46a52
---
media_driver/linux/common/ddi/media_libva.cpp | 2 +-
.../linux/common/ddi/media_libva_util.cpp | 16 ++++++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/media_driver/linux/common/ddi/media_libva.cpp b/media_driver/linux/common/ddi/media_libva.cpp
index bd34dbf5..d0329cd8 100755
--- a/media_driver/linux/common/ddi/media_libva.cpp
+++ b/media_driver/linux/common/ddi/media_libva.cpp
@@ -4847,7 +4847,7 @@ VAStatus DdiMedia_GetImage(
DDI_ASSERTMESSAGE("Unsupported surface type.");
return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT;
}
- target_surface = (VASurfaceID)DdiMedia_CreateRenderTarget(mediaCtx, mediaFmt, vaimg->width, vaimg->height, nullptr, VA_SURFACE_ATTRIB_USAGE_HINT_VPP_WRITE);
+ target_surface = (VASurfaceID)DdiMedia_CreateRenderTarget(mediaCtx, mediaFmt, vaimg->width, vaimg->height, nullptr, VA_SURFACE_ATTRIB_USAGE_HINT_GENERIC);
DDI_CHK_RET(vaStatus, "Create temp surface failed.");
VARectangle srcRect, dstRect;
diff --git a/media_driver/linux/common/ddi/media_libva_util.cpp b/media_driver/linux/common/ddi/media_libva_util.cpp
index acdcf4e9..b393cd51 100755
--- a/media_driver/linux/common/ddi/media_libva_util.cpp
+++ b/media_driver/linux/common/ddi/media_libva_util.cpp
@@ -437,6 +437,22 @@ VAStatus DdiMediaUtil_AllocateSurface(
if (!DdiMediaUtil_IsExternalSurface(mediaSurface) ||
mediaSurface->pSurfDesc->uiVaMemType == VA_SURFACE_ATTRIB_MEM_TYPE_VA)
{
+ switch (gmmResourceInfo->GetTileType())
+ {
+ case GMM_TILED_Y:
+ tileformat = I915_TILING_Y;
+ break;
+ case GMM_TILED_X:
+ tileformat = I915_TILING_X;
+ break;
+ case GMM_NOT_TILED:
+ tileformat = I915_TILING_NONE;
+ break;
+ default:
+ tileformat = I915_TILING_NONE;
+ break;
+ }
+
unsigned long ulPitch = 0;
if ( tileformat == I915_TILING_NONE )
{
--
2.26.0.windows.1