@@ -80,6 +80,7 @@ struct MockDrmDirectSubmission : public DrmDirectSubmission<GfxFamily, Dispatche
8080 using BaseClass::getTagAddressValue;
8181 using BaseClass::handleNewResourcesSubmission;
8282 using BaseClass::handleResidency;
83+ using BaseClass::handleSwitchRingBuffers;
8384 using BaseClass::isCompleted;
8485 using BaseClass::isNewResourceHandleNeeded;
8586 using BaseClass::miMemFenceRequired;
@@ -882,3 +883,57 @@ HWTEST_F(DrmDirectSubmissionTest, givenBlitterDispatcherAndMultiTileDeviceWhenCr
882883 bool ret = directSubmission.allocateResources ();
883884 EXPECT_TRUE (ret);
884885}
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