@@ -63,6 +63,31 @@ MediaContext::MediaContext(uint8_t componentType, void *hwInterface, PMOS_INTERF
63
63
m_streamId = m_osInterface->streamIndex ;
64
64
m_gpuContextAttributeTable.clear ();
65
65
66
+ MEDIA_SYSTEM_INFO *gtSystemInfo = nullptr ;
67
+ MEDIA_ENGINE_INFO mediaEngineInfo = {};
68
+
69
+ auto skuTable = m_osInterface->pfnGetSkuTable (m_osInterface);
70
+ if (!skuTable)
71
+ {
72
+ MOS_OS_ASSERTMESSAGE (" Failed to get skuTable" );
73
+ return ;
74
+ }
75
+ if (MEDIA_IS_SKU (skuTable,FtrMediaIPSeparation))
76
+ {
77
+ if (m_osInterface->pfnGetMediaEngineInfo (m_osInterface, mediaEngineInfo) == MOS_STATUS_SUCCESS)
78
+ {
79
+ m_numVdbox = (uint8_t )mediaEngineInfo.VDBoxInfo .NumberOfVDBoxEnabled ;
80
+ }
81
+ }
82
+ else
83
+ {
84
+ gtSystemInfo = m_osInterface->pfnGetGtSystemInfo (m_osInterface);
85
+ if (gtSystemInfo)
86
+ {
87
+ m_numVdbox = (uint8_t )(gtSystemInfo->VDBoxInfo .NumberOfVDBoxEnabled );
88
+ }
89
+ }
90
+
66
91
if (m_numVdbox > 1
67
92
&& m_osInterface != nullptr
68
93
&& m_osInterface->bHcpDecScalabilityMode )
@@ -500,6 +525,7 @@ MOS_STATUS MediaContext::CheckScalabilityOverrideValidity()
500
525
bool scalableDecMode = false ;
501
526
bool useVD1 = false ;
502
527
bool useVD2 = false ;
528
+ bool useVD3 = false ;
503
529
504
530
MHW_MI_CHK_NULL (m_osInterface);
505
531
scalableDecMode = m_osInterface->bHcpDecScalabilityMode ? true : false ;
@@ -519,6 +545,7 @@ MOS_STATUS MediaContext::CheckScalabilityOverrideValidity()
519
545
if (forceVdbox != MOS_FORCE_VDBOX_NONE &&
520
546
forceVdbox != MOS_FORCE_VDBOX_1 &&
521
547
forceVdbox != MOS_FORCE_VDBOX_2 &&
548
+ forceVdbox != MOS_FORCE_VDBOX_3 &&
522
549
// 2 pipes, VDBOX1-BE1, VDBOX2-BE2
523
550
forceVdbox != MOS_FORCE_VDBOX_1_1_2 &&
524
551
forceVdbox != MOS_FORCE_VDBOX_2_1_2)
@@ -551,13 +578,16 @@ MOS_STATUS MediaContext::CheckScalabilityOverrideValidity()
551
578
{
552
579
MHW_VDBOX_IS_VDBOX_SPECIFIED (forceVdbox, MOS_FORCE_VDBOX_1, MOS_FORCEVDBOX_VDBOXID_BITSNUM, MOS_FORCEVDBOX_MASK, useVD1);
553
580
MHW_VDBOX_IS_VDBOX_SPECIFIED (forceVdbox, MOS_FORCE_VDBOX_2, MOS_FORCEVDBOX_VDBOXID_BITSNUM, MOS_FORCEVDBOX_MASK, useVD2);
581
+ MHW_VDBOX_IS_VDBOX_SPECIFIED (forceVdbox, MOS_FORCE_VDBOX_3, MOS_FORCEVDBOX_VDBOXID_BITSNUM, MOS_FORCEVDBOX_MASK, useVD3);
554
582
}
555
583
if (MEDIA_IS_SKU (skuTable,FtrMediaIPSeparation))
556
584
{
557
585
if (!mediaEngineInfo.VDBoxInfo .IsValid ||
558
586
(useVD1 && !mediaEngineInfo.VDBoxInfo .Instances .Bits .VDBox0Enabled ) ||
559
- (useVD2 && !mediaEngineInfo.VDBoxInfo .Instances .Bits .VDBox2Enabled ))
587
+ (useVD2 && !mediaEngineInfo.VDBoxInfo .Instances .Bits .VDBox2Enabled ) ||
588
+ (useVD3 && !mediaEngineInfo.VDBoxInfo .Instances .Bits .VDBox1Enabled ))
560
589
{
590
+ // 1:VD0 2:VD2 3:VD1
561
591
eStatus = MOS_STATUS_INVALID_PARAMETER;
562
592
MHW_ASSERTMESSAGE (" the forced VDBOX is not enabled in current platform." );
563
593
return eStatus;
@@ -567,7 +597,8 @@ MOS_STATUS MediaContext::CheckScalabilityOverrideValidity()
567
597
{
568
598
if (!gtSystemInfo->VDBoxInfo .IsValid ||
569
599
(useVD1 && !gtSystemInfo->VDBoxInfo .Instances .Bits .VDBox0Enabled ) ||
570
- (useVD2 && !gtSystemInfo->VDBoxInfo .Instances .Bits .VDBox2Enabled ))
600
+ (useVD2 && !gtSystemInfo->VDBoxInfo .Instances .Bits .VDBox2Enabled ) ||
601
+ (useVD3 && !gtSystemInfo->VDBoxInfo .Instances .Bits .VDBox1Enabled ))
571
602
{
572
603
eStatus = MOS_STATUS_INVALID_PARAMETER;
573
604
MHW_ASSERTMESSAGE (" the forced VDBOX is not enabled in current platform." );
0 commit comments