22
22
#include " shared/test/common/mocks/mock_csr.h"
23
23
#include " shared/test/common/mocks/mock_execution_environment.h"
24
24
#include " shared/test/common/mocks/mock_memory_manager.h"
25
+ #include " shared/test/common/mocks/mock_os_context.h"
25
26
#include " shared/test/common/mocks/ult_device_factory.h"
26
27
#include " shared/test/common/test_macros/matchers.h"
27
28
#include " shared/test/common/test_macros/test.h"
@@ -391,6 +392,7 @@ HWTEST_F(CommandStreamReceiverTest, givenUpdateTaskCountFromWaitWhenCheckTaskCou
391
392
struct InitDirectSubmissionFixture {
392
393
void SetUp () {
393
394
DebugManager.flags .EnableDirectSubmission .set (1 );
395
+ DebugManager.flags .EnableGemCloseWorker .set (0 );
394
396
executionEnvironment = new MockExecutionEnvironment ();
395
397
DeviceFactory::prepareDeviceEnvironments (*executionEnvironment);
396
398
VariableBackup<UltHwConfig> backup (&ultHwConfig);
@@ -423,6 +425,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerEnabledWhenIni
423
425
424
426
osContext->ensureContextInitialized ();
425
427
osContext->setDefaultContext (true );
428
+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
426
429
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
427
430
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
428
431
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -450,6 +453,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerDisabledWhenIn
450
453
451
454
osContext->ensureContextInitialized ();
452
455
osContext->setDefaultContext (true );
456
+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
453
457
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
454
458
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
455
459
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -469,6 +473,7 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFea
469
473
PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
470
474
osContext->ensureContextInitialized ();
471
475
osContext->setDefaultContext (true );
476
+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
472
477
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
473
478
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
474
479
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -481,6 +486,26 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFea
481
486
csr.reset ();
482
487
}
483
488
489
+ HWTEST_F (InitDirectSubmissionTest, givenCheckIfDirectSubmissionEnableWhenCallItMultipleTimesThenCheckDirectSubmissionEnablingConditionsOnce) {
490
+ std::unique_ptr<OsContext> osContext (OsContext::create (device->getExecutionEnvironment ()->rootDeviceEnvironments [0 ]->osInterface .get (), 0 ,
491
+ EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_RCS, EngineUsage::Regular},
492
+ PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
493
+ osContext->ensureContextInitialized ();
494
+ osContext->setDefaultContext (true );
495
+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
496
+ auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
497
+ hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
498
+ hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
499
+ bool submitOnInit = false ;
500
+
501
+ auto ret = osContext->isDirectSubmissionAvailable (*hwInfo, submitOnInit);
502
+ EXPECT_TRUE (ret);
503
+
504
+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionActive = false ;
505
+ ret = osContext->isDirectSubmissionAvailable (*hwInfo, submitOnInit);
506
+ EXPECT_FALSE (ret);
507
+ }
508
+
484
509
template <class Type >
485
510
class CommandStreamReceiverHwDirectSubmissionMock : public CommandStreamReceiverHw <Type> {
486
511
public:
@@ -501,6 +526,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionAgainThenItIsNotR
501
526
PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
502
527
osContext->ensureContextInitialized ();
503
528
osContext->setDefaultContext (true );
529
+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
504
530
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
505
531
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
506
532
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -527,6 +553,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionThenObtainLock) {
527
553
PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
528
554
osContext->ensureContextInitialized ();
529
555
osContext->setDefaultContext (true );
556
+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
530
557
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
531
558
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
532
559
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -542,6 +569,8 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu
542
569
PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
543
570
osContext->ensureContextInitialized ();
544
571
osContext->setDefaultContext (true );
572
+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionAvailableChecked = false ;
573
+ static_cast <MockOsContext *>(osContext.get ())->directSubmissionActive = false ;
545
574
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
546
575
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = false ;
547
576
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].submitOnInit = false ;
@@ -560,7 +589,7 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnBcsThenExpectFea
560
589
PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
561
590
osContext->ensureContextInitialized ();
562
591
osContext->setDefaultContext (true );
563
-
592
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
564
593
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
565
594
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].engineSupported = true ;
566
595
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].submitOnInit = false ;
@@ -580,7 +609,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu
580
609
PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
581
610
osContext->ensureContextInitialized ();
582
611
osContext->setDefaultContext (true );
583
-
612
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
584
613
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
585
614
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].engineSupported = false ;
586
615
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].submitOnInit = false ;
@@ -600,7 +629,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionDi
600
629
PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
601
630
osContext->ensureContextInitialized ();
602
631
osContext->setDefaultContext (true );
603
-
632
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
604
633
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
605
634
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
606
635
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useLowPriority = false ;
@@ -619,7 +648,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionEn
619
648
EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_RCS, EngineUsage::LowPriority},
620
649
PreemptionMode::ThreadGroup, device->getDeviceBitfield ())));
621
650
osContext->ensureContextInitialized ();
622
-
651
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
623
652
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
624
653
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
625
654
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useLowPriority = true ;
@@ -638,7 +667,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionDisab
638
667
device->getDeviceBitfield ())));
639
668
osContext->ensureContextInitialized ();
640
669
osContext->setDefaultContext (true );
641
-
670
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
642
671
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
643
672
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
644
673
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useInternal = false ;
@@ -657,7 +686,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionEnabl
657
686
EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup,
658
687
device->getDeviceBitfield ())));
659
688
osContext->ensureContextInitialized ();
660
-
689
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
661
690
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
662
691
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
663
692
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useInternal = true ;
@@ -677,7 +706,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionDis
677
706
device->getDeviceBitfield (), true )));
678
707
osContext->ensureContextInitialized ();
679
708
osContext->setDefaultContext (true );
680
-
709
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
681
710
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
682
711
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
683
712
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useRootDevice = false ;
@@ -696,7 +725,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionEna
696
725
EngineDescriptorHelper::getDefaultDescriptor ({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup,
697
726
device->getDeviceBitfield (), true )));
698
727
osContext->ensureContextInitialized ();
699
-
728
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
700
729
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
701
730
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
702
731
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useRootDevice = true ;
@@ -716,7 +745,7 @@ HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextWhenDirectSubmissionDis
716
745
device->getDeviceBitfield ())));
717
746
osContext->ensureContextInitialized ();
718
747
osContext->setDefaultContext (false );
719
-
748
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
720
749
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
721
750
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
722
751
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useNonDefault = false ;
@@ -736,7 +765,7 @@ HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextContextWhenDirectSubmis
736
765
device->getDeviceBitfield ())));
737
766
osContext->ensureContextInitialized ();
738
767
osContext->setDefaultContext (false );
739
-
768
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
740
769
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
741
770
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].engineSupported = true ;
742
771
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_RCS].useNonDefault = true ;
@@ -759,7 +788,7 @@ HWTEST_F(InitDirectSubmissionTest, GivenBlitterOverrideEnabledWhenBlitterIsNonDe
759
788
device->getDeviceBitfield ())));
760
789
osContext->ensureContextInitialized ();
761
790
osContext->setDefaultContext (false );
762
-
791
+ static_cast <MockOsContext *>(osContext. get ())-> directSubmissionAvailableChecked = false ;
763
792
auto hwInfo = device->getRootDeviceEnvironment ().getMutableHardwareInfo ();
764
793
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].engineSupported = false ;
765
794
hwInfo->capabilityTable .directSubmissionEngines .data [aub_stream::ENGINE_BCS].useNonDefault = false ;
0 commit comments