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 @@ -84,6 +84,37 @@ extern "C" GMM_LIB_API GMM_STATUS GMM_STDCALL OpenGmm(GmmExportEntries *pm_GmmFu return Status; } +///////////////////////////////////////////////////////////////////////////////////// +/// 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 @@ -106,10 +137,20 @@ extern "C" GMM_LIB_API GMM_STATUS GMM_STDCALL InitializeGmm(GMM_INIT_IN_ARGS *pI return Status; } +///////////////////////////////////////////////////////////////////////////////////// +/// 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 @@ void CommonULT::SetUpTestCase() { 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 @@ void CommonULT::SetUpTestCase() 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 @@ void CommonULT::TearDownTestCase() { printf("%s\n", __FUNCTION__); - GMM_INIT_OUT_ARGS OutArgs; - OutArgs.pGmmClientContext = static_cast(pGmmULTClientContext); - - pfnGmmDestroy(&OutArgs); + pfnGmmDestroy(static_cast(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 @@ OTHER DEALINGS IN THE SOFTWARE. #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 @@ extern "C" { ///////////////////////////////////////////////////////////////////////////////////// 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 @@ OTHER DEALINGS IN THE SOFTWARE. #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"