Planar Surface Redescription and pitch adjustment. (#31)
diff --git a/Source/GmmLib/Resource/GmmResourceInfoCommon.cpp b/Source/GmmLib/Resource/GmmResourceInfoCommon.cpp
index 741e523..3005386 100644
--- a/Source/GmmLib/Resource/GmmResourceInfoCommon.cpp
+++ b/Source/GmmLib/Resource/GmmResourceInfoCommon.cpp
@@ -1231,6 +1231,12 @@
/////////////////////////////////////////////////////////////////////////////////////
GMM_STATUS GMM_STDCALL GmmLib::GmmResourceInfoCommon::GetOffset(GMM_REQ_OFFSET_INFO &ReqInfo)
{
+ GMM_TEXTURE_CALC *pTextureCalc;
+
+ pTextureCalc = GMM_OVERRIDE_TEXTURE_CALC(&Surf);
+
+ __GMM_ASSERT((pTextureCalc != NULL))
+
if(Surf.Flags.Info.RedecribedPlanes)
{
uint8_t RestoreReqStdLayout = ReqInfo.ReqStdLayout ? 1 : 0;
@@ -1246,6 +1252,7 @@
if(ReqInfo.ReqStdLayout)
{
GMM_REQ_OFFSET_INFO TempReqInfo[GMM_MAX_PLANE] = {0};
+ GMM_TEXTURE_INFO TexInfo[GMM_MAX_PLANE];
uint32_t Plane, TotalPlanes = GmmLib::Utility::GmmGetNumPlanes(Surf.Format);
// Caller must specify which plane they need the offset into if not
@@ -1262,11 +1269,15 @@
TempReqInfo[GMM_PLANE_Y].ReqLock = TempReqInfo[GMM_PLANE_Y].ReqRender = 0;
TempReqInfo[GMM_PLANE_V] = TempReqInfo[GMM_PLANE_U] = TempReqInfo[GMM_PLANE_Y];
+
+ pTextureCalc->GetRedescribedPlaneParams(&Surf, GMM_PLANE_Y, &TexInfo[GMM_PLANE_Y]);
+ pTextureCalc->GetRedescribedPlaneParams(&Surf, GMM_PLANE_U, &TexInfo[GMM_PLANE_U]);
+ pTextureCalc->GetRedescribedPlaneParams(&Surf, GMM_PLANE_V, &TexInfo[GMM_PLANE_V]);
- if(GMM_SUCCESS != GmmTexGetMipMapOffset(&PlaneSurf[GMM_PLANE_Y], &TempReqInfo[GMM_PLANE_Y]) ||
- GMM_SUCCESS != GmmTexGetMipMapOffset(&PlaneSurf[GMM_PLANE_U], &TempReqInfo[GMM_PLANE_U]) ||
- GMM_SUCCESS != GmmTexGetMipMapOffset(&PlaneSurf[GMM_PLANE_V], &TempReqInfo[GMM_PLANE_V]))
- {
+ if(GMM_SUCCESS != GmmTexGetMipMapOffset(&TexInfo[GMM_PLANE_Y], &TempReqInfo[GMM_PLANE_Y]) ||
+ GMM_SUCCESS != GmmTexGetMipMapOffset(&TexInfo[GMM_PLANE_U], &TempReqInfo[GMM_PLANE_U]) ||
+ GMM_SUCCESS != GmmTexGetMipMapOffset(&TexInfo[GMM_PLANE_V], &TempReqInfo[GMM_PLANE_V]))
+ {
__GMM_ASSERT(0);
return GMM_ERROR;
}
@@ -1295,9 +1306,10 @@
{
// Find the size of the previous planes and add it to the offset
TempReqInfo[Plane].StdLayout.Offset = -1;
-
- if(GMM_SUCCESS != GmmTexGetMipMapOffset(&PlaneSurf[Plane], &TempReqInfo[Plane]))
+
+ if(GMM_SUCCESS != GmmTexGetMipMapOffset(&TexInfo[Plane], &TempReqInfo[Plane]))
{
+
__GMM_ASSERT(0);
return GMM_ERROR;
}
@@ -1336,6 +1348,7 @@
uint8_t Success = 1;
GMM_TEXTURE_INFO * pTexInfo;
GMM_TEXTURE_CALC * pTextureCalc;
+ GMM_TEXTURE_INFO RedescribedPlaneInfo;
__GMM_ASSERTPTR(pBlt, 0);
@@ -1468,13 +1481,15 @@
if(pBlt->Gpu.OffsetY < pTexInfo->OffsetInfo.Plane.Y[GMM_PLANE_U])
{
+ pTextureCalc->GetRedescribedPlaneParams(pTexInfo, GMM_PLANE_Y, &RedescribedPlaneInfo);
// Y Plane
- pTexInfo = &(PlaneSurf[GMM_PLANE_Y]);
+ pTexInfo = &RedescribedPlaneInfo;
}
else
{
// UV Plane
- pTexInfo = &(PlaneSurf[GMM_PLANE_U]);
+ pTextureCalc->GetRedescribedPlaneParams(pTexInfo, GMM_PLANE_U, &RedescribedPlaneInfo);
+ pTexInfo = &RedescribedPlaneInfo;
}
}
@@ -1869,12 +1884,14 @@
uint8_t WasFinalSpan = 0;
GMM_TEXTURE_INFO * pTexInfo;
GMM_TEXTURE_CALC * pTextureCalc;
+ GMM_TEXTURE_INFO RedescribedPlaneInfo;
__GMM_ASSERT(Surf.Flags.Info.StdSwizzle);
pPlatform = GMM_OVERRIDE_PLATFORM_INFO(&Surf);
pTextureCalc = GMM_OVERRIDE_TEXTURE_CALC(&Surf);
+ __GMM_ASSERT(pTextureCalc != NULL);
pTexInfo = &Surf;
if(pMapping->Type == GMM_MAPPING_GEN9_YS_TO_STDSWIZZLE)
@@ -1933,7 +1950,9 @@
pMapping->__NextSpan.VirtualOffset = ReqInfo.Render.Offset64;
}
- pTexInfo = &PlaneSurf[pMapping->Scratch.Plane];
+ pTextureCalc->GetRedescribedPlaneParams(pTexInfo, GMM_PLANE_Y, &RedescribedPlaneInfo);
+ pTexInfo = &RedescribedPlaneInfo;
+
}
// Initialization of Mapping Params...
diff --git a/Source/GmmLib/Texture/GmmGen10Texture.cpp b/Source/GmmLib/Texture/GmmGen10Texture.cpp
index e8dbb5c..402e412 100644
--- a/Source/GmmLib/Texture/GmmGen10Texture.cpp
+++ b/Source/GmmLib/Texture/GmmGen10Texture.cpp
@@ -898,6 +898,14 @@
pTexInfo->Flags.Gpu.MMC = 0;
}
}
+
+ if(pTexInfo->Flags.Info.RedecribedPlanes)
+ {
+ if(false == RedescribeTexturePlanes(pTexInfo, &WidthBytesPhysical))
+ {
+ __GMM_ASSERT(FALSE);
+ }
+ }
if((Status = // <-- Note assignment.
FillTexPitchAndSize(
diff --git a/Source/GmmLib/Texture/GmmGen11Texture.cpp b/Source/GmmLib/Texture/GmmGen11Texture.cpp
index cd1bbdb..474dfd7 100644
--- a/Source/GmmLib/Texture/GmmGen11Texture.cpp
+++ b/Source/GmmLib/Texture/GmmGen11Texture.cpp
@@ -1086,6 +1086,14 @@
}
}
+ if(pTexInfo->Flags.Info.RedecribedPlanes)
+ {
+ if(false == RedescribeTexturePlanes(pTexInfo, &WidthBytesPhysical))
+ {
+ __GMM_ASSERT(FALSE);
+ }
+ }
+
if((Status = // <-- Note assignment.
FillTexPitchAndSize(
pTexInfo, WidthBytesPhysical, Height, pRestrictions)) == GMM_SUCCESS)
diff --git a/Source/GmmLib/Texture/GmmGen12Texture.cpp b/Source/GmmLib/Texture/GmmGen12Texture.cpp
index f9c444d..65fc7e5 100644
--- a/Source/GmmLib/Texture/GmmGen12Texture.cpp
+++ b/Source/GmmLib/Texture/GmmGen12Texture.cpp
@@ -923,7 +923,15 @@
Height = YHeight + VHeight;
}
-
+
+ if(pTexInfo->Flags.Info.RedecribedPlanes)
+ {
+ if(false == RedescribeTexturePlanes(pTexInfo, &WidthBytesPhysical))
+ {
+ __GMM_ASSERT(FALSE);
+ }
+ }
+
if((Status = // <-- Note assignment.
FillTexPitchAndSize(
pTexInfo, WidthBytesPhysical, Height, pRestrictions)) == GMM_SUCCESS)
diff --git a/Source/GmmLib/Texture/GmmTexture.cpp b/Source/GmmLib/Texture/GmmTexture.cpp
index a421766..c7143b5 100644
--- a/Source/GmmLib/Texture/GmmTexture.cpp
+++ b/Source/GmmLib/Texture/GmmTexture.cpp
@@ -629,3 +629,200 @@
*pRowFactor = 0;
return false;
}
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// This function redescribes WidthBytesPhysical of main surface as per UV plane bpp and tilemode
+///
+/// @return ::bool
+/////////////////////////////////////////////////////////////////////////////////////
+bool GmmLib::GmmTextureCalc::RedescribeTexturePlanes(GMM_TEXTURE_INFO *pTexInfo, uint32_t *pWidthBytesPhysical)
+{
+ GMM_STATUS Status = GMM_SUCCESS;
+ GMM_TEXTURE_INFO TexInfoUVPlane;
+ const GMM_PLATFORM_INFO *pPlatform = GMM_OVERRIDE_PLATFORM_INFO(pTexInfo);
+
+ __GMM_ASSERT(pTexInfo);
+ __GMM_ASSERT(pTexInfo->Flags.Info.RedecribedPlanes);
+ __GMM_ASSERT(pWidthBytesPhysical);
+
+ TexInfoUVPlane = *pTexInfo;
+#ifdef _WIN32
+ memcpy_s(&TexInfoUVPlane, sizeof(GMM_TEXTURE_INFO), pTexInfo, sizeof(GMM_TEXTURE_INFO));
+#else
+ memcpy(&TexInfoUVPlane, pTexInfo, sizeof(GMM_TEXTURE_INFO));
+#endif // _WIN32
+
+
+ if(GmmIsUVPacked(pTexInfo->Format))
+ {
+ // UV packed resources must have two seperate
+ // tiling modes per plane, due to the packed
+ // UV plane having twice the bits per pixel
+ // as the Y plane.
+ switch(pTexInfo->Format)
+ {
+ case GMM_FORMAT_NV12:
+ case GMM_FORMAT_NV21:
+ case GMM_FORMAT_P208:
+ TexInfoUVPlane.BitsPerPixel = 16; // Redescribe bpp to 16 from 8
+ break;
+ case GMM_FORMAT_P010:
+ case GMM_FORMAT_P012:
+ case GMM_FORMAT_P016:
+ case GMM_FORMAT_P216:
+ TexInfoUVPlane.BitsPerPixel = 32;
+ break;
+ default:
+ GMM_ASSERTDPF(0, "Unsupported format/pixel size combo!");
+ Status = GMM_INVALIDPARAM;
+ goto ERROR_CASE;
+ break;
+ }
+ }
+ else
+ {
+ // Non-UV packed surfaces, TileMode and bpp of each plane is same as that of pTexInfo
+ }
+
+ SetTileMode(&TexInfoUVPlane);
+ *pWidthBytesPhysical = GFX_ALIGN(*pWidthBytesPhysical, pPlatform->TileInfo[TexInfoUVPlane.TileMode].LogicalTileWidth);
+
+ERROR_CASE:
+ return (Status == GMM_SUCCESS) ? true : false;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// This function returns per plane redescribed parameters (pRedescribedTexInfo: fmt, tilemode,bpp, width, height, size) when main surface pTexInfo is passed
+///
+/// @return ::bool
+/////////////////////////////////////////////////////////////////////////////////////
+bool GmmLib::GmmTextureCalc::GetRedescribedPlaneParams(GMM_TEXTURE_INFO *pTexInfo, GMM_YUV_PLANE PlaneType, GMM_TEXTURE_INFO *pRedescribedTexInfo)
+{
+ GMM_STATUS Status = GMM_SUCCESS;
+ GMM_TEXTURE_INFO TexInfoUVPlane;
+ const GMM_PLATFORM_INFO *pPlatform = GMM_OVERRIDE_PLATFORM_INFO(pTexInfo);
+
+ __GMM_ASSERT(pTexInfo);
+ __GMM_ASSERT(pTexInfo->Flags.Info.RedecribedPlanes);
+ __GMM_ASSERT(pRedescribedTexInfo);
+
+ *pRedescribedTexInfo = *pTexInfo;
+ pRedescribedTexInfo->Flags.Info.RedecribedPlanes = 0;
+#ifdef _WIN32
+ memcpy_s(&TexInfoUVPlane, sizeof(GMM_TEXTURE_INFO), pTexInfo, sizeof(GMM_TEXTURE_INFO));
+#else
+ memcpy(&TexInfoUVPlane, pTexInfo, sizeof(GMM_TEXTURE_INFO));
+#endif // _WIN32
+
+ if(GmmIsUVPacked(pTexInfo->Format))
+ {
+ // UV packed resources must have two seperate
+ // tiling modes per plane, due to the packed
+ // UV plane having twice the bits per pixel
+ // as the Y plane.
+ if((PlaneType == GMM_PLANE_U) || (PlaneType == GMM_PLANE_V))
+ {
+ switch(pTexInfo->Format)
+ {
+ // GMM_FORMAT_NV11 : linear format, no tiling supported, hence no redescription supported
+ case GMM_FORMAT_NV12:
+ case GMM_FORMAT_NV21:
+ pRedescribedTexInfo->BitsPerPixel = 16;
+ pRedescribedTexInfo->BaseWidth = GFX_CEIL_DIV(pTexInfo->BaseWidth, 2);
+ pRedescribedTexInfo->BaseHeight = GFX_CEIL_DIV(pTexInfo->BaseHeight, 2);
+ break;
+ case GMM_FORMAT_P208:
+ pRedescribedTexInfo->BitsPerPixel = 16;
+ pRedescribedTexInfo->BaseWidth = GFX_CEIL_DIV(pTexInfo->BaseWidth, 2);
+ // same base height as main surface
+ break;
+ case GMM_FORMAT_P010:
+ case GMM_FORMAT_P012:
+ case GMM_FORMAT_P016:
+ pRedescribedTexInfo->BitsPerPixel = 32;
+ pRedescribedTexInfo->BaseWidth = GFX_CEIL_DIV(pTexInfo->BaseWidth, 2);
+ pRedescribedTexInfo->BaseHeight = GFX_CEIL_DIV(pTexInfo->BaseHeight, 2);
+ break;
+ case GMM_FORMAT_P216:
+ pRedescribedTexInfo->BitsPerPixel = 32;
+ pRedescribedTexInfo->BaseWidth = GFX_CEIL_DIV(pTexInfo->BaseWidth, 2);
+ // same base height as main surface
+ break;
+ default:
+ GMM_ASSERTDPF(0, "Unsupported format/pixel size combo!");
+ Status = GMM_INVALIDPARAM;
+ goto ERROR_CASE;
+ break;
+ }
+ }
+ }
+ else
+ {
+ // Non-UV packed surfaces TileMode of each plane is same as that of pTexInfo
+ if((PlaneType == GMM_PLANE_U) || (PlaneType == GMM_PLANE_V))
+ { // Non-UV packed surfaces only require the plane descriptors have proper height and width for each plane
+ switch(pTexInfo->Format)
+ {
+ case GMM_FORMAT_IMC1:
+ case GMM_FORMAT_IMC2:
+ case GMM_FORMAT_IMC3:
+ case GMM_FORMAT_IMC4:
+ case GMM_FORMAT_MFX_JPEG_YUV420:
+ pRedescribedTexInfo->BaseWidth = GFX_CEIL_DIV(pTexInfo->BaseWidth, 2);
+ pRedescribedTexInfo->BaseHeight = GFX_CEIL_DIV(pTexInfo->BaseHeight, 2);
+ break;
+ case GMM_FORMAT_MFX_JPEG_YUV422V:
+ pRedescribedTexInfo->BaseHeight = GFX_CEIL_DIV(pTexInfo->BaseHeight, 2);
+ break;
+ case GMM_FORMAT_MFX_JPEG_YUV411R_TYPE:
+ pRedescribedTexInfo->BaseHeight = GFX_CEIL_DIV(pTexInfo->BaseHeight, 4);
+ break;
+ case GMM_FORMAT_MFX_JPEG_YUV411:
+ pRedescribedTexInfo->BaseWidth = GFX_CEIL_DIV(pTexInfo->BaseWidth, 4);
+ break;
+ case GMM_FORMAT_MFX_JPEG_YUV422H:
+ pRedescribedTexInfo->BaseWidth = GFX_CEIL_DIV(pTexInfo->BaseWidth, 2);
+ break;
+ default:
+ GMM_ASSERTDPF(0, "Unsupported format/pixel size combo!");
+ Status = GMM_INVALIDPARAM;
+ goto ERROR_CASE;
+ break;
+ }
+ }
+ }
+
+ SetTileMode(pRedescribedTexInfo);
+ switch(pRedescribedTexInfo->BitsPerPixel)
+ {
+ case 8:
+ pRedescribedTexInfo->Format = GMM_FORMAT_R8_UINT;
+ break;
+ case 16:
+ pRedescribedTexInfo->Format = GMM_FORMAT_R16_UINT;
+ break;
+ case 32:
+ pRedescribedTexInfo->Format = GMM_FORMAT_R32_UINT;
+ break;
+ default:
+ GMM_ASSERTDPF(0, "Unsupported format/pixel size combo!");
+ Status = GMM_INVALIDPARAM;
+ goto ERROR_CASE;
+ break;
+ }
+ if(pTexInfo->ArraySize > 1)
+ {
+ pRedescribedTexInfo->OffsetInfo.Plane.ArrayQPitch = 0; // no longer a planar format on redescription
+ pRedescribedTexInfo->Alignment.QPitch = GFX_ALIGN(pRedescribedTexInfo->BaseHeight, pTexInfo->Alignment.VAlign);
+ pRedescribedTexInfo->OffsetInfo.Texture2DOffsetInfo.ArrayQPitchRender =
+ pRedescribedTexInfo->OffsetInfo.Texture2DOffsetInfo.ArrayQPitchLock = pRedescribedTexInfo->Alignment.QPitch * pTexInfo->Pitch;
+ pRedescribedTexInfo->Size = pRedescribedTexInfo->Alignment.QPitch * pTexInfo->Pitch * pTexInfo->ArraySize;
+ }
+ else
+ {
+ pRedescribedTexInfo->Size = (GFX_ALIGN(pRedescribedTexInfo->BaseHeight, pTexInfo->Alignment.VAlign)) * pTexInfo->Pitch;
+ }
+
+ERROR_CASE:
+ return (Status == GMM_SUCCESS) ? true : false;
+}
diff --git a/Source/GmmLib/Texture/GmmTextureAlloc.cpp b/Source/GmmLib/Texture/GmmTextureAlloc.cpp
index a836b02..2e3e128 100644
--- a/Source/GmmLib/Texture/GmmTextureAlloc.cpp
+++ b/Source/GmmLib/Texture/GmmTextureAlloc.cpp
@@ -1366,6 +1366,14 @@
}
}
+ if(pTexInfo->Flags.Info.RedecribedPlanes)
+ {
+ if(false == RedescribeTexturePlanes(pTexInfo, &WidthBytesPhysical))
+ {
+ __GMM_ASSERT(FALSE);
+ }
+ }
+
if((Status = // <-- Note assignment.
FillTexPitchAndSize(
pTexInfo, WidthBytesPhysical, Height, pRestrictions)) == GMM_SUCCESS)
diff --git a/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp b/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp
index 7e9242a..213a164 100644
--- a/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen12dGPUResourceULT.cpp
@@ -971,7 +971,7 @@
}
/// @brief ULT for Planar Ys Compressed resource
-TEST_F(CTestGen12dGPUResource, DISABLED_TestPlanarYsCompressedResource)
+TEST_F(CTestGen12dGPUResource, TestPlanarTile64CompressedResource)
{
const TEST_TILE_TYPE TileTypeSupported = {TEST_TILEYS};
@@ -986,10 +986,10 @@
//gmmParams.Flags.Gpu.CCS = 1;
gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
gmmParams.Flags.Info.MediaCompressed = 1;
- gmmParams.BaseWidth64 = 0x100;
- gmmParams.BaseHeight = 0x50;
+ gmmParams.BaseWidth64 = 0x64;
+ gmmParams.BaseHeight = 0x64;
gmmParams.Depth = 0x1;
- SetTileFlag(gmmParams, TEST_TILEYS); // TileYS only
+ gmmParams.ArraySize = 2;
GMM_RESOURCE_FORMAT Format[4] = {GMM_FORMAT_NV12, GMM_FORMAT_NV21, GMM_FORMAT_P010, GMM_FORMAT_P016};
for(auto fmt : Format)
@@ -997,7 +997,7 @@
gmmParams.Format = fmt; // 8bpp(NV12) , P016 (16bpp), P010 (16bpp), NV21(8bpp)
TEST_BPP Ybpp, UVbpp;
- //Yf/Ys could be accessed on CPU/app where UV plane bpp is double
+ //could be accessed on CPU/app where UV plane bpp is double
switch(pGmmULTClientContext->GetPlatformInfo().FormatTable[gmmParams.Format].Element.BitsPer)
{
case 8:
@@ -1013,63 +1013,26 @@
}
gmmParams.Flags.Gpu.UnifiedAuxSurface = 1;
- GMM_TILE_MODE TileMode = DEFINE_TILE(YS_2D, Ybpp);
GMM_RESOURCE_INFO *ResourceInfo;
ResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
-
- //Redescribed Pitch isn't modified unless Y, UV pitch differ
- //But, original Pitch is padded to have even Tile, hence use Ybpp ExpectedPitch
- //to verify Pitch, but redescribed pitch to verify size
- uint32_t ExpectedPitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64 * (int)pow(2.0, Ybpp), TileSize[Ybpp][0]);
- uint32_t RedescribedPitch = GMM_ULT_ALIGN(gmmParams.BaseWidth64 / 2 * (int)pow(2.0, UVbpp), TileSize[UVbpp][0]);
-
- if(ExpectedPitch != RedescribedPitch)
- {
- ExpectedPitch = RedescribedPitch;
- }
- else
- {
- //ExpectedPitch = GMM_ULT_ALIGN(ExpectedPitch, 2 * TileSize[Ybpp][0]); //pad to even tile
- //ExpectedPitch = GMM_ULT_ALIGN(ExpectedPitch, (2 * TileSize[UVbpp][0]/ (int)pow(2.0, UVbpp))); //pad to even tile
- }
-
- VerifyResourcePitch<true>(ResourceInfo, ExpectedPitch);
- VerifyResourcePitchInTiles<true>(ResourceInfo, ExpectedPitch / TileSize[Ybpp][0]);
-
- int YSizeInTiles = (GMM_ULT_ALIGN(gmmParams.BaseHeight, TileSize[Ybpp][1]) / TileSize[Ybpp][1]) *
- RedescribedPitch / TileSize[Ybpp][0];
- int UVSizeInTiles = (GMM_ULT_ALIGN(gmmParams.BaseHeight / 2, TileSize[UVbpp][1]) / TileSize[UVbpp][1]) *
- RedescribedPitch / TileSize[UVbpp][0];
- VerifyResourceSize<true>(ResourceInfo, GMM_KBYTE(64) * (YSizeInTiles + UVSizeInTiles));
- VerifyResourceHAlign<true>(ResourceInfo, TileSize[UVbpp][0] / pow(2.0, UVbpp)); // For Yf/Ys planar redescription causes UV width, Y height alignment
- VerifyResourceVAlign<true>(ResourceInfo, TileSize[Ybpp][1]);
- VerifyResourceQPitch<false>(ResourceInfo, 0); // N/A for non-mipped surface
-
- //test main surface base alignment is 16KB
- //For Yf test main surface pitch is 4-tileYF aligned
- EXPECT_EQ(GMM_KBYTE(64), ResourceInfo->GetBaseAlignment());
- //EXPECT_EQ(0, ResourceInfo->GetRenderPitchTiles() % 4); // Check on YF only
-
- if(const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrLinearCCS)
- {
- EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_CCS) % PAGE_SIZE);
- EXPECT_EQ(0, ResourceInfo->GetUnifiedAuxSurfaceOffset(GMM_AUX_UV_CCS) % PAGE_SIZE);
- EXPECT_GE(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), ResourceInfo->GetSizeMainSurface() >> 8);
- }
-
- EXPECT_EQ(GMM_KBYTE(4) * 2, ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS)); // Y and UV Aux are on separate tiles
-
- { //separate Aux
- gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
-
- GMM_RESOURCE_INFO *AuxResourceInfo;
- AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
-
- EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
-
- pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
- }
+
+ GMM_REQ_OFFSET_INFO OffsetInfo = {};
+ OffsetInfo.ReqLock = 1;
+ OffsetInfo.ReqRender = 1;
+ OffsetInfo.Plane = GMM_PLANE_Y;
+ OffsetInfo.ArrayIndex = 1;
+ OffsetInfo.ReqStdLayout = 0;
+ ResourceInfo->GetOffset(OffsetInfo);
+
+ // ToDo: add verification
+ //{ //separate Aux
+ // gmmParams.Flags.Gpu.UnifiedAuxSurface = 0;
+ // GMM_RESOURCE_INFO *AuxResourceInfo;
+ // AuxResourceInfo = pGmmULTClientContext->CreateResInfoObject(&gmmParams);
+ // EXPECT_EQ(ResourceInfo->GetSizeAuxSurface(GMM_AUX_CCS), AuxResourceInfo->GetSizeSurface());
+ // pGmmULTClientContext->DestroyResInfoObject(AuxResourceInfo);
+ //}
pGmmULTClientContext->DestroyResInfoObject(ResourceInfo);
}
}
diff --git a/Source/GmmLib/inc/Internal/Common/Texture/GmmTextureCalc.h b/Source/GmmLib/inc/Internal/Common/Texture/GmmTextureCalc.h
index b31a065..46c8583 100644
--- a/Source/GmmLib/inc/Internal/Common/Texture/GmmTextureCalc.h
+++ b/Source/GmmLib/inc/Internal/Common/Texture/GmmTextureCalc.h
@@ -369,8 +369,12 @@
GMM_GFX_SIZE_T &WidthBytesPhysical,
GMM_GFX_SIZE_T &WidthBytesLock);
GMM_STATUS MSAACompression(GMM_TEXTURE_INFO *pTexInfo);
+
+ bool RedescribeTexturePlanes(GMM_TEXTURE_INFO *pTexInfo, uint32_t *pWidthBytesPhysical);
+
+ bool GetRedescribedPlaneParams(GMM_TEXTURE_INFO *pTexInfo, GMM_YUV_PLANE PlaneType, GMM_TEXTURE_INFO *pRedescribedTexInfo);
- /* inline functions */
+ /* inline functions */
};
}