diff --git a/shared/source/direct_submission/windows/wddm_direct_submission.inl b/shared/source/direct_submission/windows/wddm_direct_submission.inl index 5a85698d87..20c60552f8 100644 --- a/shared/source/direct_submission/windows/wddm_direct_submission.inl +++ b/shared/source/direct_submission/windows/wddm_direct_submission.inl @@ -128,9 +128,13 @@ void WddmDirectSubmission::handleStopRingBuffer() { template void WddmDirectSubmission::handleSwitchRingBuffers(ResidencyContainer *allocationsForResidency) { if (this->disableMonitorFence) { - auto lock = osContextWin->getResidencyController().acquireLock(); - updateTagValueImpl(this->previousRingBuffer); - updateMonitorFenceValueForResidencyList(allocationsForResidency); + if (allocationsForResidency) { + auto lock = osContextWin->getResidencyController().acquireLock(); + updateTagValueImpl(this->previousRingBuffer); + updateMonitorFenceValueForResidencyList(allocationsForResidency); + } else { + updateTagValueImpl(this->previousRingBuffer); + } } } diff --git a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp index 07bb1d9cc9..0ae5339899 100644 --- a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp +++ b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp @@ -1131,11 +1131,20 @@ HWTEST_F(WddmDirectSubmissionTest, givenResidencyControllerWhenUpdatingResidency EXPECT_EQ(mockGa.updateCompletionDataForAllocationAndFragmentsCalledtimes, 1u); } -HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionWhenSwitchingRingBuffersThenUpdateResidencyCalled) { +HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionWhenSwitchingRingBuffersAndResidencyContainerIsNullThenUpdateResidencyNotCalled) { using Dispatcher = RenderDispatcher; MockWddmDirectSubmission wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver); wddmDirectSubmission.handleSwitchRingBuffers(nullptr); + EXPECT_EQ(wddmDirectSubmission.updateMonitorFenceValueForResidencyListCalled, 0u); +} + +HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionWhenSwitchingRingBuffersThenUpdateResidencyCalled) { + using Dispatcher = RenderDispatcher; + + MockWddmDirectSubmission wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver); + ResidencyContainer container; + wddmDirectSubmission.handleSwitchRingBuffers(&container); EXPECT_EQ(wddmDirectSubmission.updateMonitorFenceValueForResidencyListCalled, 1u); } @@ -1157,7 +1166,8 @@ HWTEST_F(WddmDirectSubmissionTest, givenDirectSubmissionWhenSwitchingRingBuffers MyMockWddmDirectSubmission wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver); std::thread th([&]() { - wddmDirectSubmission.handleSwitchRingBuffers(nullptr); + ResidencyContainer container; + wddmDirectSubmission.handleSwitchRingBuffers(&container); }); while (!wddmDirectSubmission.lockInTesting) ;