Skip to content

Commit 1f12f13

Browse files
yangning1368dvrogozh
authored andcommitted
switch to dynamic gmmlib
Fixes: intel#246, intel#35 Change-Id: I6d48c72d86e26a2f8db06891dccb22dc66afa004 Signed-off-by: Yang, Ning <[email protected]> Signed-off-by: Dmitry Rogozhkin <[email protected]>
1 parent 18762eb commit 1f12f13

File tree

10 files changed

+95
-53
lines changed

10 files changed

+95
-53
lines changed

media_driver/linux/common/cm/cm_hal_os.cpp

100644100755
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ MOS_STATUS HalCm_GetSurfaceAndRegister(
335335
//| Returns: Result of the operation.
336336
//*-----------------------------------------------------------------------------
337337
MOS_STATUS HalCm_GetSurfPitchSize(
338-
uint32_t width, uint32_t height, MOS_FORMAT format, uint32_t *pitch, uint32_t *physicalSize)
338+
uint32_t width, uint32_t height, MOS_FORMAT format, uint32_t *pitch, uint32_t *physicalSize, PCM_HAL_STATE state)
339339
{
340340

341341
MOS_STATUS hr = MOS_STATUS_SUCCESS;
@@ -367,12 +367,18 @@ MOS_STATUS HalCm_GetSurfPitchSize(
367367
gmmParams.NoGfxMemory = true;
368368

369369
// get pitch and size
370-
gmmResInfo = GmmResCreate( &gmmParams );
370+
if (nullptr == state ||
371+
nullptr == state->osInterface)
372+
{
373+
hr = MOS_STATUS_NULL_POINTER;
374+
goto finish;
375+
}
376+
gmmResInfo = state->osInterface->pfnGetGmmClientContext(state->osInterface)->CreateResInfoObject(&gmmParams);
371377
if (gmmResInfo != nullptr)
372378
{
373379
*pitch = static_cast<uint32_t>( gmmResInfo->GetRenderPitch() );
374380
*physicalSize = static_cast<uint32_t>( gmmResInfo->GetSizeSurface() );
375-
GmmResFree( gmmResInfo );
381+
state->osInterface->pfnGetGmmClientContext(state->osInterface)->DestroyResInfoObject(gmmResInfo);
376382
}
377383
else
378384
{
@@ -395,7 +401,7 @@ MOS_STATUS HalCm_GetSurface2DPitchAndSize_Linux(
395401
{
396402
UNUSED(state);
397403
return HalCm_GetSurfPitchSize(param->width, param->height, param->format,
398-
&param->pitch, &param->physicalSize);
404+
&param->pitch, &param->physicalSize, state);
399405
}
400406

401407
//*-----------------------------------------------------------------------------

media_driver/linux/common/cp/shared/cplib.cpp

100644100755
Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ class MosCpInterface;
3636
typedef struct _MOS_INTERFACE* PMOS_INTERFACE;
3737
typedef struct _MOS_OS_CONTEXT MOS_CONTEXT;
3838

39-
typedef GmmLib::Context GMM_GLOBAL_CONTEXT;
40-
41-
extern GMM_GLOBAL_CONTEXT *pGmmGlobalContext;
42-
4339
extern "C" CPLIB_EXPORT MediaLibvaCapsCpInterface* Create_MediaLibvaCapsCp();
4440
extern "C" CPLIB_EXPORT void Delete_MediaLibvaCapsCp(MediaLibvaCapsCpInterface* pMediaLibvaCapsCpInterface);
4541
extern "C" CPLIB_EXPORT DdiCpInterface* Create_DdiCp(MOS_CONTEXT* pMosCtx);
@@ -69,7 +65,4 @@ extern "C" CPLIB_EXPORT void Init_CPLib_Symbols()
6965
CPLibUtils::m_symbols[CPLibUtils::FUNC_DELETE_MEDIALIBVACAPSCP] = reinterpret_cast<void*>(Delete_MediaLibvaCapsCp);
7066
}
7167

72-
extern "C" CPLIB_EXPORT void Init_CPLib_Gmm(GMM_GLOBAL_CONTEXT* pCtx)
73-
{
74-
pGmmGlobalContext = pCtx;
75-
}
68+

media_driver/linux/common/ddi/media_libva.cpp

100644100755
Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1398,12 +1398,19 @@ VAStatus DdiMedia__Initialize (
13981398
output_dri_init(ctx);
13991399
#endif
14001400

1401+
GMM_STATUS gmmStatus = OpenGmm(&mediaCtx->GmmFuncs);
1402+
if(gmmStatus != GMM_SUCCESS)
1403+
{
1404+
DDI_ASSERTMESSAGE("failed to open gmm.");
1405+
FreeForMediaContext(mediaCtx);
1406+
return VA_STATUS_ERROR_OPERATION_FAILED;
1407+
}
1408+
14011409
// init GMM context
1402-
GMM_STATUS gmmStatus = GmmInitGlobalContext(mediaCtx->platform,
1410+
gmmStatus = mediaCtx->GmmFuncs.pfnCreateSingletonContext(mediaCtx->platform,
14031411
&gmmSkuTable,
14041412
&gmmWaTable,
1405-
&gmmGtInfo,
1406-
(GMM_CLIENT)GMM_LIBVA_LINUX);
1413+
&gmmGtInfo);
14071414

14081415
if(gmmStatus != GMM_SUCCESS)
14091416
{
@@ -1412,6 +1419,9 @@ VAStatus DdiMedia__Initialize (
14121419
return VA_STATUS_ERROR_OPERATION_FAILED;
14131420
}
14141421

1422+
// Create GMM Client Context
1423+
mediaCtx->pGmmClientContext = mediaCtx->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX);
1424+
14151425
// Create GMM page table manager
14161426
mediaCtx->m_auxTableMgr = AuxTableMgr::CreateAuxTableMgr(mediaCtx->pDrmBufMgr,
14171427
&mediaCtx->SkuTable, &mediaCtx->WaTable);
@@ -1472,12 +1482,6 @@ VAStatus DdiMedia__Initialize (
14721482
}
14731483
}
14741484

1475-
if(CPLibUtils::IsCPLibLoaded())
1476-
{
1477-
using InitCPLibGmmFuncType = void (*)(GMM_GLOBAL_CONTEXT* pCtx);
1478-
CPLibUtils::InvokeCpFunc<InitCPLibGmmFuncType>(CPLibUtils::FUNC_INIT_CPLIB_GMM, pGmmGlobalContext);
1479-
}
1480-
14811485
DdiMediaUtil_UnLockMutex(&GlobalMutex);
14821486

14831487
return VA_STATUS_SUCCESS;
@@ -1627,15 +1631,16 @@ static VAStatus DdiMedia_Terminate (
16271631
mediaCtx->m_caps = nullptr;
16281632
}
16291633

1634+
// Free GMM memory.
1635+
mediaCtx->GmmFuncs.pfnDeleteClientContext(mediaCtx->pGmmClientContext);
1636+
mediaCtx->GmmFuncs.pfnDestroySingletonContext();
1637+
16301638
// release media driver context
16311639
MOS_FreeMemory(mediaCtx);
16321640

16331641
ctx->pDriverData = nullptr;
16341642
MOS_utilities_close();
16351643

1636-
// Free GMM memory.
1637-
GmmDestroyGlobalContext();
1638-
16391644
DdiMediaUtil_UnLockMutex(&GlobalMutex);
16401645

16411646
return VA_STATUS_SUCCESS;
@@ -3748,6 +3753,7 @@ VAStatus DdiMedia_CreateImage(
37483753

37493754
PDDI_MEDIA_CONTEXT mediaCtx = DdiMedia_GetMediaContext(ctx);
37503755
DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx.", VA_STATUS_ERROR_INVALID_PARAMETER);
3756+
DDI_CHK_NULL(mediaCtx->pGmmClientContext, "nullptr mediaCtx->pGmmClientContext.", VA_STATUS_ERROR_INVALID_PARAMETER);
37513757

37523758
VAImage *vaimg = (VAImage*)MOS_AllocAndZeroMemory(sizeof(VAImage));
37533759
DDI_CHK_NULL(vaimg, "Insufficient to allocate an VAImage.", VA_STATUS_ERROR_ALLOCATION_FAILED);
@@ -3830,7 +3836,7 @@ VAStatus DdiMedia_CreateImage(
38303836
return VA_STATUS_ERROR_UNIMPLEMENTED;
38313837
}
38323838

3833-
gmmResourceInfo = GmmResCreate(&gmmParams);
3839+
gmmResourceInfo = mediaCtx->pGmmClientContext->CreateResInfoObject(&gmmParams);
38343840
if(nullptr == gmmResourceInfo)
38353841
{
38363842
DDI_ASSERTMESSAGE("Gmm Create Resource Failed.");
@@ -3895,7 +3901,7 @@ VAStatus DdiMedia_CreateImage(
38953901
break;
38963902
}
38973903

3898-
GmmResFree(gmmResourceInfo);
3904+
mediaCtx->pGmmClientContext->DestroyResInfoObject(gmmResourceInfo);
38993905

39003906
DDI_MEDIA_BUFFER *buf = (DDI_MEDIA_BUFFER *)MOS_AllocAndZeroMemory(sizeof(DDI_MEDIA_BUFFER));
39013907
if (nullptr == buf)
@@ -5720,8 +5726,9 @@ VAStatus DdiMedia_ExportSurfaceHandle(
57205726
DDI_CHK_LESS((uint32_t)(surface_id), mediaCtx->pSurfaceHeap->uiAllocatedHeapElements, "Invalid surfaces", VA_STATUS_ERROR_INVALID_SURFACE);
57215727

57225728
DDI_MEDIA_SURFACE *mediaSurface = DdiMedia_GetSurfaceFromVASurfaceID(mediaCtx, surface_id);
5723-
DDI_CHK_NULL(mediaSurface, "nullptr mediaSurface", VA_STATUS_ERROR_INVALID_SURFACE);
5724-
DDI_CHK_NULL(mediaSurface->bo, "nullptr mediaSurface bo", VA_STATUS_ERROR_INVALID_SURFACE);
5729+
DDI_CHK_NULL(mediaSurface, "nullptr mediaSurface", VA_STATUS_ERROR_INVALID_SURFACE);
5730+
DDI_CHK_NULL(mediaSurface->bo, "nullptr mediaSurface->bo", VA_STATUS_ERROR_INVALID_SURFACE);
5731+
DDI_CHK_NULL(mediaSurface->pGmmResourceInfo, "nullptr mediaSurface->pGmmResourceInfo", VA_STATUS_ERROR_INVALID_SURFACE);
57255732

57265733
int32_t ret = mos_bo_gem_export_to_prime(mediaSurface->bo, (int32_t*)&mediaSurface->name);
57275734
if (ret)
@@ -5745,7 +5752,7 @@ VAStatus DdiMedia_ExportSurfaceHandle(
57455752

57465753
desc->num_objects = 1;
57475754
desc->objects[0].fd = mediaSurface->name;
5748-
desc->objects[0].size = GmmResGetSizeSurface(mediaSurface->pGmmResourceInfo);
5755+
desc->objects[0].size = mediaSurface->pGmmResourceInfo->GetSizeSurface();
57495756
switch (tiling) {
57505757
case I915_TILING_X:
57515758
desc->objects[0].drm_format_modifier = I915_FORMAT_MOD_X_TILED;

media_driver/linux/common/ddi/media_libva_common.h

100644100755
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,8 @@ struct DDI_MEDIA_CONTEXT
437437

438438
GMM_CLIENT_CONTEXT *pGmmClientContext;
439439

440+
GmmExportEntries GmmFuncs;
441+
440442
// Aux Table Manager
441443
AuxTableMgr *m_auxTableMgr;
442444

media_driver/linux/common/ddi/media_libva_putsurface_linux.cpp

100644100755
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ VAStatus DdiCodec_PutSurfaceLinuxHW(
374374
DDI_CHK_NULL(mediaCtx, "Null mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
375375
DDI_CHK_NULL(mediaCtx->dri_output, "Null mediaDrvCtx->dri_output", VA_STATUS_ERROR_INVALID_PARAMETER);
376376
DDI_CHK_NULL(mediaCtx->pSurfaceHeap, "Null mediaDrvCtx->pSurfaceHeap", VA_STATUS_ERROR_INVALID_PARAMETER);
377+
DDI_CHK_NULL(mediaCtx->pGmmClientContext, "Null mediaCtx->pGmmClientContext", VA_STATUS_ERROR_INVALID_PARAMETER);
377378
DDI_CHK_LESS((uint32_t)surface, mediaCtx->pSurfaceHeap->uiAllocatedHeapElements, "Invalid surfaceId", VA_STATUS_ERROR_INVALID_SURFACE);
378379

379380
struct dri_vtable * const dri_vtable = &mediaCtx->dri_output->vtable;
@@ -485,7 +486,7 @@ VAStatus DdiCodec_PutSurfaceLinuxHW(
485486
gmmParams.Type = RESOURCE_2D;
486487
gmmParams.Format = GMM_FORMAT_R8G8B8A8_UNORM_TYPE;
487488
//gmmParams.Format = GMM_FORMAT_B8G8R8A8_UNORM_TYPE;
488-
target.OsResource.pGmmResInfo = GmmResCreate(&gmmParams);
489+
target.OsResource.pGmmResInfo = mediaCtx->pGmmClientContext->CreateResInfoObject(&gmmParams);
489490
if (nullptr == target.OsResource.pGmmResInfo)
490491
{
491492
mos_bo_unreference(drawable_bo);
@@ -529,7 +530,7 @@ VAStatus DdiCodec_PutSurfaceLinuxHW(
529530
dri_vtable->swap_buffer(ctx, dri_drawable);
530531
DdiMediaUtil_UnLockMutex(&mediaCtx->PutSurfaceSwapBufferMutex);
531532

532-
GmmResFree(target.OsResource.pGmmResInfo);
533+
mediaCtx->pGmmClientContext->DestroyResInfoObject(target.OsResource.pGmmResInfo);
533534
target.OsResource.pGmmResInfo = nullptr;
534535

535536
return VA_STATUS_SUCCESS;

media_driver/linux/common/ddi/media_libva_util.cpp

100644100755
Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ VAStatus DdiMediaUtil_AllocateSurface(
297297

298298
DDI_CHK_NULL(mediaSurface, "mediaSurface is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
299299
DDI_CHK_NULL(mediaDrvCtx, "mediaDrvCtx is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
300+
DDI_CHK_NULL(mediaDrvCtx->pGmmClientContext, "mediaDrvCtx->pGmmClientContext is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
300301

301302
int32_t size = 0;
302303
uint32_t tileformat = I915_TILING_NONE;
@@ -497,7 +498,7 @@ VAStatus DdiMediaUtil_AllocateSurface(
497498

498499
gmmParams.Flags.Gpu.Video = true;
499500

500-
mediaSurface->pGmmResourceInfo = gmmResourceInfo = GmmResCreate(&gmmParams);
501+
mediaSurface->pGmmResourceInfo = gmmResourceInfo = mediaDrvCtx->pGmmClientContext->CreateResInfoObject(&gmmParams);
501502

502503
if(nullptr == gmmResourceInfo)
503504
{
@@ -638,6 +639,8 @@ VAStatus DdiMediaUtil_AllocateBuffer(
638639
{
639640

640641
DDI_CHK_NULL(mediaBuffer, "mediaBuffer is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
642+
DDI_CHK_NULL(mediaBuffer->pMediaCtx, "mediaBuffer->pMediaCtx is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
643+
DDI_CHK_NULL(mediaBuffer->pMediaCtx->pGmmClientContext, "mediaBuffer->pMediaCtx->pGmmClientContext is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
641644
if(format >= Media_Format_Count)
642645
return VA_STATUS_ERROR_INVALID_PARAMETER;
643646

@@ -673,12 +676,12 @@ VAStatus DdiMediaUtil_AllocateBuffer(
673676
gmmParams.Flags.Gpu.Video = true;
674677
gmmParams.Flags.Info.Linear = true;
675678

676-
mediaBuffer->pGmmResourceInfo = GmmResCreate(&gmmParams);
679+
mediaBuffer->pGmmResourceInfo = mediaBuffer->pMediaCtx->pGmmClientContext->CreateResInfoObject(&gmmParams);
677680

678681
DDI_CHK_NULL(mediaBuffer->pGmmResourceInfo, "pGmmResourceInfo is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
679-
GmmResOverrideAllocationSize(mediaBuffer->pGmmResourceInfo, mediaBuffer->iSize);
680-
GmmResOverrideAllocationBaseWidth(mediaBuffer->pGmmResourceInfo, mediaBuffer->iSize);
681-
GmmResOverrideAllocationPitch(mediaBuffer->pGmmResourceInfo, mediaBuffer->iSize);
682+
mediaBuffer->pGmmResourceInfo->OverrideSize(mediaBuffer->iSize);
683+
mediaBuffer->pGmmResourceInfo->OverrideBaseWidth(mediaBuffer->iSize);
684+
mediaBuffer->pGmmResourceInfo->OverridePitch(mediaBuffer->iSize);
682685
finish:
683686
return hRes;
684687
}
@@ -705,6 +708,8 @@ VAStatus DdiMediaUtil_Allocate2DBuffer(
705708
MOS_BUFMGR *bufmgr)
706709
{
707710
DDI_CHK_NULL(mediaBuffer, "mediaBuffer is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
711+
DDI_CHK_NULL(mediaBuffer->pMediaCtx, "mediaBuffer->pMediaCtx is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
712+
DDI_CHK_NULL(mediaBuffer->pMediaCtx->pGmmClientContext, "mediaBuffer->pMediaCtx->pGmmClientContext is nullptr", VA_STATUS_ERROR_INVALID_BUFFER);
708713

709714
int32_t size = 0;
710715
uint32_t tileformat = I915_TILING_NONE;
@@ -726,7 +731,7 @@ VAStatus DdiMediaUtil_Allocate2DBuffer(
726731
gmmParams.Flags.Info.Linear = true;
727732
gmmParams.Flags.Gpu.Video = true;
728733
GMM_RESOURCE_INFO *gmmResourceInfo;
729-
mediaBuffer->pGmmResourceInfo = gmmResourceInfo = GmmResCreate(&gmmParams);
734+
mediaBuffer->pGmmResourceInfo = gmmResourceInfo = mediaBuffer->pMediaCtx->pGmmClientContext->CreateResInfoObject(&gmmParams);
730735

731736
if(nullptr == gmmResourceInfo)
732737
{
@@ -1034,6 +1039,8 @@ void DdiMediaUtil_FreeSurface(DDI_MEDIA_SURFACE *surface)
10341039
{
10351040
DDI_CHK_NULL(surface, "nullptr surface", );
10361041
DDI_CHK_NULL(surface->bo, "nullptr surface->bo", );
1042+
DDI_CHK_NULL(surface->pMediaCtx, "nullptr surface->pMediaCtx", );
1043+
DDI_CHK_NULL(surface->pMediaCtx->pGmmClientContext, "nullptr surface->pMediaCtx->pGmmClientContext", );
10371044

10381045
// Unmap Aux mapping if the surface was mapped
10391046
if (surface->pMediaCtx->m_auxTableMgr)
@@ -1064,7 +1071,7 @@ void DdiMediaUtil_FreeSurface(DDI_MEDIA_SURFACE *surface)
10641071

10651072
if (nullptr != surface->pGmmResourceInfo)
10661073
{
1067-
GmmResFree(surface->pGmmResourceInfo);
1074+
surface->pMediaCtx->pGmmClientContext->DestroyResInfoObject(surface->pGmmResourceInfo);
10681075
surface->pGmmResourceInfo = nullptr;
10691076
}
10701077
}
@@ -1074,6 +1081,8 @@ void DdiMediaUtil_FreeSurface(DDI_MEDIA_SURFACE *surface)
10741081
void DdiMediaUtil_FreeBuffer(DDI_MEDIA_BUFFER *buf)
10751082
{
10761083
DDI_CHK_NULL(buf, "nullptr", );
1084+
DDI_CHK_NULL(buf->pMediaCtx, "nullptr", );
1085+
DDI_CHK_NULL(buf->pMediaCtx->pGmmClientContext, "nullptr", );
10771086
// calling sequence checking
10781087
if (buf->bMapped)
10791088
{
@@ -1093,7 +1102,7 @@ void DdiMediaUtil_FreeBuffer(DDI_MEDIA_BUFFER *buf)
10931102

10941103
if (nullptr != buf->pGmmResourceInfo)
10951104
{
1096-
GmmResFree(buf->pGmmResourceInfo);
1105+
buf->pMediaCtx->pGmmClientContext->DestroyResInfoObject(buf->pGmmResourceInfo);
10971106
buf->pGmmResourceInfo = nullptr;
10981107
}
10991108
}
@@ -1406,7 +1415,7 @@ VAStatus DdiMediaUtil_UnRegisterRTSurfaces(
14061415
PDDI_MEDIA_CONTEXT mediaCtx = DdiMedia_GetMediaContext(ctx);
14071416
DDI_CHK_NULL(mediaCtx,"nullptr mediaCtx!", VA_STATUS_ERROR_INVALID_CONTEXT);
14081417
DDI_CHK_NULL(surface, "nullptr surface!", VA_STATUS_ERROR_INVALID_PARAMETER);
1409-
1418+
14101419
//Look through all decode contexts to unregister the surface in each decode context's RTtable.
14111420
if (mediaCtx->pDecoderCtxHeap != nullptr)
14121421
{

media_driver/linux/common/os/mos_context_specific.cpp

100644100755
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ MOS_STATUS OsContextSpecific::Init(PMOS_CONTEXT pOsDriverContext)
505505
MOS_SecureMemcpy(&m_perfData, sizeof(PERF_DATA), pOsDriverContext->pPerfData, sizeof(PERF_DATA));
506506
mos_bufmgr_gem_enable_reuse(pOsDriverContext->bufmgr);
507507
m_cpContext = pOsDriverContext->pCpContext;
508-
m_pGmmClientContext = GmmCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX);
508+
m_pGmmClientContext = pOsDriverContext->pGmmClientContext;
509509
m_auxTableMgr = pOsDriverContext->m_auxTableMgr;
510510

511511
// DDI layer can pass over the DeviceID.
@@ -656,7 +656,6 @@ void OsContextSpecific::Destroy()
656656
{
657657
mos_gem_context_destroy(m_intelContext);
658658
}
659-
GmmDeleteClientContext(m_pGmmClientContext);
660659
SetOsContextValid(false);
661660
}
662661

media_driver/linux/common/os/mos_os_specific.c

100644100755
Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,7 +1001,7 @@ void Linux_Destroy(
10011001
mos_gem_context_destroy(pOsContext->intel_context);
10021002
}
10031003

1004-
GmmDeleteClientContext(pOsContext->pGmmClientContext);
1004+
pOsContext->GmmFuncs.pfnDeleteClientContext(pOsContext->pGmmClientContext);
10051005

10061006
MOS_FreeMemAndSetNull(pOsContext);
10071007
}
@@ -5701,6 +5701,7 @@ MOS_STATUS Mos_Specific_InitInterface(
57015701
uint32_t dwResetCount;
57025702
int32_t ret;
57035703
bool modularizedGpuCtxEnabled;
5704+
void *gmm_handle;
57045705

57055706
MOS_OS_FUNCTION_ENTER;
57065707

@@ -5725,6 +5726,13 @@ MOS_STATUS Mos_Specific_InitInterface(
57255726
goto finish;
57265727
}
57275728

5729+
if (GMM_SUCCESS != OpenGmm(&pOsContext->GmmFuncs))
5730+
{
5731+
MOS_OS_ASSERTMESSAGE("Unable to open gmm.");
5732+
eStatus = MOS_STATUS_INVALID_PARAMETER;
5733+
goto finish;
5734+
}
5735+
57285736
pOsContext->intel_context = nullptr;
57295737
if (pOsInterface->modulizedMosEnabled && !Mos_Solo_IsEnabled())
57305738
{
@@ -5755,7 +5763,7 @@ MOS_STATUS Mos_Specific_InitInterface(
57555763
}
57565764
else
57575765
{
5758-
pOsContext->pGmmClientContext = GmmCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX);
5766+
pOsContext->pGmmClientContext = pOsContext->GmmFuncs.pfnCreateClientContext((GMM_CLIENT)GMM_LIBVA_LINUX);
57595767
}
57605768

57615769
// Initialize

media_driver/linux/common/os/mos_os_specific.h

100644100755
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,7 @@ struct _MOS_OS_CONTEXT
518518
void *pLibdrmHandle;
519519

520520
GMM_CLIENT_CONTEXT *pGmmClientContext; //UMD specific ClientContext object in GMM
521+
GmmExportEntries GmmFuncs;
521522
AuxTableMgr *m_auxTableMgr;
522523

523524
// GPU Status Buffer

0 commit comments

Comments
 (0)