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"