@@ -80,6 +80,7 @@ struct MockDrmDirectSubmission : public DrmDirectSubmission<GfxFamily, Dispatche
80
80
using BaseClass::getTagAddressValue;
81
81
using BaseClass::handleNewResourcesSubmission;
82
82
using BaseClass::handleResidency;
83
+ using BaseClass::handleSwitchRingBuffers;
83
84
using BaseClass::isCompleted;
84
85
using BaseClass::isNewResourceHandleNeeded;
85
86
using BaseClass::miMemFenceRequired;
@@ -882,3 +883,57 @@ HWTEST_F(DrmDirectSubmissionTest, givenBlitterDispatcherAndMultiTileDeviceWhenCr
882
883
bool ret = directSubmission.allocateResources ();
883
884
EXPECT_TRUE (ret);
884
885
}
886
+ HWTEST_F (DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenHandleSwitchRingBufferCalledThenPrevRingBufferHasUpdatedFenceValue) {
887
+ MockDrmDirectSubmission<FamilyType, RenderDispatcher<FamilyType>> drmDirectSubmission (*device->getDefaultEngine ().commandStreamReceiver );
888
+ auto prevCompletionFenceVal = 1u ;
889
+ auto prevRingBufferIndex = 0u ;
890
+ auto newCompletionFenceValue = 10u ;
891
+ drmDirectSubmission.currentTagData .tagValue = newCompletionFenceValue;
892
+ drmDirectSubmission.ringBuffers [prevRingBufferIndex].completionFence = prevCompletionFenceVal;
893
+ drmDirectSubmission.handleSwitchRingBuffers ();
894
+ EXPECT_EQ (drmDirectSubmission.ringBuffers [prevRingBufferIndex].completionFence , newCompletionFenceValue + 1 );
895
+ }
896
+ HWTEST_F (DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenEnableRingSwitchTagUpdateWaEnabledAndRingNotStartedThenCompletionFenceIsNotUpdated) {
897
+ DebugManagerStateRestore dbgRestorer;
898
+ DebugManager.flags .EnableRingSwitchTagUpdateWa .set (1 );
899
+ MockDrmDirectSubmission<FamilyType, RenderDispatcher<FamilyType>> drmDirectSubmission (*device->getDefaultEngine ().commandStreamReceiver );
900
+ auto prevCompletionFenceVal = 1u ;
901
+ auto prevRingBufferIndex = 0u ;
902
+ auto newCompletionFenceValue = 10u ;
903
+
904
+ drmDirectSubmission.ringStart = false ;
905
+
906
+ drmDirectSubmission.currentTagData .tagValue = newCompletionFenceValue;
907
+ drmDirectSubmission.ringBuffers [prevRingBufferIndex].completionFence = prevCompletionFenceVal;
908
+ drmDirectSubmission.handleSwitchRingBuffers ();
909
+ EXPECT_EQ (drmDirectSubmission.ringBuffers [prevRingBufferIndex].completionFence , prevCompletionFenceVal);
910
+ }
911
+ HWTEST_F (DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenEnableRingSwitchTagUpdateWaEnabledAndRingStartedThenCompletionFenceIsUpdated) {
912
+ DebugManagerStateRestore dbgRestorer;
913
+ DebugManager.flags .EnableRingSwitchTagUpdateWa .set (1 );
914
+ MockDrmDirectSubmission<FamilyType, RenderDispatcher<FamilyType>> drmDirectSubmission (*device->getDefaultEngine ().commandStreamReceiver );
915
+ auto prevCompletionFenceVal = 1u ;
916
+ auto prevRingBufferIndex = 0u ;
917
+ auto newCompletionFenceValue = 10u ;
918
+
919
+ drmDirectSubmission.ringStart = true ;
920
+
921
+ drmDirectSubmission.currentTagData .tagValue = newCompletionFenceValue;
922
+ drmDirectSubmission.ringBuffers [prevRingBufferIndex].completionFence = prevCompletionFenceVal;
923
+ drmDirectSubmission.handleSwitchRingBuffers ();
924
+ EXPECT_EQ (drmDirectSubmission.ringBuffers [prevRingBufferIndex].completionFence , newCompletionFenceValue + 1 );
925
+ drmDirectSubmission.ringStart = false ;
926
+ }
927
+ HWTEST_F (DrmDirectSubmissionTest, givenDrmDirectSubmissionWhenEnableRingSwitchTagUpdateWaDisabledThenCompletionFenceIsUpdated) {
928
+ DebugManagerStateRestore dbgRestorer;
929
+ DebugManager.flags .EnableRingSwitchTagUpdateWa .set (0 );
930
+ MockDrmDirectSubmission<FamilyType, RenderDispatcher<FamilyType>> drmDirectSubmission (*device->getDefaultEngine ().commandStreamReceiver );
931
+ auto prevCompletionFenceVal = 1u ;
932
+ auto prevRingBufferIndex = 0u ;
933
+ auto newCompletionFenceValue = 10u ;
934
+
935
+ drmDirectSubmission.currentTagData .tagValue = newCompletionFenceValue;
936
+ drmDirectSubmission.ringBuffers [prevRingBufferIndex].completionFence = prevCompletionFenceVal;
937
+ drmDirectSubmission.handleSwitchRingBuffers ();
938
+ EXPECT_EQ (drmDirectSubmission.ringBuffers [prevRingBufferIndex].completionFence , newCompletionFenceValue + 1 );
939
+ }
0 commit comments