Fixing the ABI break
Revert of ABI break which was introduced in 19.3.4.
Added two new API to interact with Library without any ABI break.
Fixes:Commit Id 94306f5
Change-Id: I6f76c5c6a4f518d6907016890ee6fc6246cc8491
diff --git a/Source/GmmLib/GlobalInfo/GmmLibDllMain.cpp b/Source/GmmLib/GlobalInfo/GmmLibDllMain.cpp
index 1036f85..ac4bed5 100755
--- a/Source/GmmLib/GlobalInfo/GmmLibDllMain.cpp
+++ b/Source/GmmLib/GlobalInfo/GmmLibDllMain.cpp
@@ -85,6 +85,37 @@
}
/////////////////////////////////////////////////////////////////////////////////////
+/// First Call to GMM Lib DLL/so to initialize singleton global context
+/// and create client context
+///
+/////////////////////////////////////////////////////////////////////////////////////
+#ifdef _WIN32
+extern "C" GMM_LIB_API GMM_CLIENT_CONTEXT *GMM_STDCALL GmmInit(const PLATFORM Platform,
+ const SKU_FEATURE_TABLE *pSkuTable,
+ const WA_TABLE * pWaTable,
+ const GT_SYSTEM_INFO * pGtSysInfo,
+ GMM_CLIENT ClientType)
+#else
+extern "C" GMM_LIB_API GMM_CLIENT_CONTEXT *GMM_STDCALL GmmInit(const PLATFORM Platform,
+ const void * pSkuTable,
+ const void * pWaTable,
+ const void * pGtSysInfo,
+ GMM_CLIENT ClientType)
+#endif
+{
+ GMM_STATUS Status = GMM_SUCCESS;
+ GMM_CLIENT_CONTEXT *pClientContext = NULL;
+
+ Status = GmmCreateSingletonContext(Platform, pSkuTable, pWaTable, pGtSysInfo);
+
+ if(Status == GMM_SUCCESS)
+ {
+ pClientContext = GmmCreateClientContext(ClientType);
+ }
+
+ return pClientContext;
+}
+/////////////////////////////////////////////////////////////////////////////////////
// First Call to GMM Lib DLL/so to initialize singleton global context
// and create client context
/////////////////////////////////////////////////////////////////////////////////////
@@ -107,9 +138,19 @@
}
/////////////////////////////////////////////////////////////////////////////////////
+/// Destroys singleton global context and client context
+///
+/////////////////////////////////////////////////////////////////////////////////////
+extern "C" GMM_LIB_API void GMM_STDCALL GmmDestroy(GMM_CLIENT_CONTEXT *pGmmClientContext)
+{
+ GmmDestroySingletonContext();
+ GmmDeleteClientContext(pGmmClientContext);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
// Destroys singleton global context and client context
/////////////////////////////////////////////////////////////////////////////////////
-extern "C" GMM_LIB_API void GMM_STDCALL GmmDestroy(GMM_INIT_OUT_ARGS *pInArgs)
+extern "C" GMM_LIB_API void GMM_STDCALL GmmAdapterDestroy(GMM_INIT_OUT_ARGS *pInArgs)
{
if(pInArgs && pInArgs->pGmmClientContext)
{
diff --git a/Source/GmmLib/ULT/GmmCommonULT.cpp b/Source/GmmLib/ULT/GmmCommonULT.cpp
index 2fa1172..0498c78 100644
--- a/Source/GmmLib/ULT/GmmCommonULT.cpp
+++ b/Source/GmmLib/ULT/GmmCommonULT.cpp
@@ -57,9 +57,6 @@
{
printf("%s\n", __FUNCTION__);
- GMM_INIT_IN_ARGS InArgs;
- GMM_INIT_OUT_ARGS OutArgs;
-
if(GfxPlatform.eProductFamily == IGFX_UNKNOWN ||
GfxPlatform.eRenderCoreFamily == IGFX_UNKNOWN_CORE)
{
@@ -69,23 +66,20 @@
AllocateAdapterInfo();
- InArgs.ClientType = GMM_EXCITE_VISTA;
- InArgs.pGtSysInfo = &pGfxAdapterInfo->SystemInfo;
- InArgs.pSkuTable = &pGfxAdapterInfo->SkuTable;
- InArgs.pWaTable = &pGfxAdapterInfo->WaTable;
- InArgs.Platform = GfxPlatform;
-
hGmmLib = dlopen(GMM_UMD_DLL, RTLD_LAZY);
ASSERT_TRUE(hGmmLib);
- *(void **)(&pfnGmmInit) = dlsym(hGmmLib, "InitializeGmm");
+ *(void **)(&pfnGmmInit) = dlsym(hGmmLib, "GmmInit");
*(void **)(&pfnGmmDestroy) = dlsym(hGmmLib, "GmmDestroy");
ASSERT_TRUE(pfnGmmInit);
ASSERT_TRUE(pfnGmmDestroy);
- pfnGmmInit(&InArgs, &OutArgs);
- pGmmULTClientContext = OutArgs.pGmmClientContext;
+ pGmmULTClientContext = pfnGmmInit(GfxPlatform,
+ &pGfxAdapterInfo->SkuTable,
+ &pGfxAdapterInfo->WaTable,
+ &pGfxAdapterInfo->SystemInfo,
+ GMM_EXCITE_VISTA);
ASSERT_TRUE(pGmmULTClientContext);
}
@@ -94,10 +88,7 @@
{
printf("%s\n", __FUNCTION__);
- GMM_INIT_OUT_ARGS OutArgs;
- OutArgs.pGmmClientContext = static_cast<GMM_CLIENT_CONTEXT *>(pGmmULTClientContext);
-
- pfnGmmDestroy(&OutArgs);
+ pfnGmmDestroy(static_cast<GMM_CLIENT_CONTEXT *>(pGmmULTClientContext));
if(hGmmLib)
{
diff --git a/Source/GmmLib/ULT/GmmCommonULT.h b/Source/GmmLib/ULT/GmmCommonULT.h
index 2f07252..d62e3d3 100644
--- a/Source/GmmLib/ULT/GmmCommonULT.h
+++ b/Source/GmmLib/ULT/GmmCommonULT.h
@@ -24,8 +24,21 @@
#include "stdafx.h"
-typedef GMM_STATUS (GMM_STDCALL *PFNGMMINIT)(GMM_INIT_IN_ARGS *pInArgs, GMM_INIT_OUT_ARGS *pOutArgs);
-typedef void(GMM_STDCALL *PFNGMMDESTROY)(GMM_INIT_OUT_ARGS *pInArgs);
+typedef GMM_CLIENT_CONTEXT *(GMM_STDCALL * PFNGMMINIT)
+#ifdef _WIN32
+ (const PLATFORM,
+ const SKU_FEATURE_TABLE *,
+ const WA_TABLE *,
+ const GT_SYSTEM_INFO *,
+ GMM_CLIENT);
+#else
+ (const PLATFORM Platform,
+ const void * pSkuTable,
+ const void * pWaTable,
+ const void * pGtSysInfo,
+ GMM_CLIENT ClientType);
+#endif
+typedef void(GMM_STDCALL *PFNGMMDESTROY)(GMM_CLIENT_CONTEXT *);
class CommonULT : public testing::Test
{
diff --git a/Source/GmmLib/inc/External/Common/GmmLibDll.h b/Source/GmmLib/inc/External/Common/GmmLibDll.h
index 0d5cba3..9619020 100755
--- a/Source/GmmLib/inc/External/Common/GmmLibDll.h
+++ b/Source/GmmLib/inc/External/Common/GmmLibDll.h
@@ -70,7 +70,7 @@
/////////////////////////////////////////////////////////////////////////////////////
GMM_LIB_API GMM_STATUS GMM_STDCALL OpenGmm(GmmExportEntries *pm_GmmFuncs);
GMM_LIB_API GMM_STATUS GMM_STDCALL InitializeGmm(GMM_INIT_IN_ARGS *pInArgs, GMM_INIT_OUT_ARGS *pOutArgs);
- GMM_LIB_API void GMM_STDCALL GmmDestroy(GMM_INIT_OUT_ARGS *pInArgs);
+ GMM_LIB_API void GMM_STDCALL GmmAdapterDestroy(GMM_INIT_OUT_ARGS *pInArgs);
#ifdef __cplusplus
}
diff --git a/Source/GmmLib/inc/External/Common/GmmLibDllName.h b/Source/GmmLib/inc/External/Common/GmmLibDllName.h
index 0082dfc..ce20eb8 100755
--- a/Source/GmmLib/inc/External/Common/GmmLibDllName.h
+++ b/Source/GmmLib/inc/External/Common/GmmLibDllName.h
@@ -22,20 +22,23 @@
#pragma once
#if defined(_WIN64 ) || defined(__x86_64__) || defined(__LP64__)
- #define GMM_ENTRY_NAME "OpenGmm"
- #define GMM_INIT_NAME "InitializeGmm"
- #define GMM_DESTROY_NAME "GmmDestroy"
+ #define GMM_ENTRY_NAME "OpenGmm"
+ #define GMM_INIT_NAME "GmmInit"
+ #define GMM_ADAPTER_INIT_NAME "InitializeGmm"
+ #define GMM_DESTROY_NAME "GmmDestroy"
+ #define GMM_ADAPTER_DESTROY_NAME "GmmAdapterDestroy"
#if defined(_WIN64)
- #define GMM_UMD_DLL "igdgmm64.dll"
+ #define GMM_UMD_DLL "igdgmm64.dll"
#else
- #define GMM_UMD_DLL "libigdgmm.so.11"
+ #define GMM_UMD_DLL "libigdgmm.so.11"
#endif
#else
- #define GMM_ENTRY_NAME "_OpenGmm@4"
-
- #define GMM_INIT_NAME "_InitializeGmm@8"
- #define GMM_DESTROY_NAME "_GmmDestroy@4"
+ #define GMM_ENTRY_NAME "_OpenGmm@4"
+ #define GMM_INIT_NAME "_GmmInit@48"
+ #define GMM_ADAPTER_INIT_NAME "_InitializeGmm@8"
+ #define GMM_DESTROY_NAME "_GmmDestroy@4"
+ #define GMM_ADAPTER_DESTROY_NAME "_GmmAdapterDestroy@4"
#if defined(_WIN32)
#define GMM_UMD_DLL "igdgmm32.dll"