diff --git a/shared/source/direct_submission/windows/wddm_direct_submission.inl b/shared/source/direct_submission/windows/wddm_direct_submission.inl index 0a3a61e73e..416d8c3487 100644 --- a/shared/source/direct_submission/windows/wddm_direct_submission.inl +++ b/shared/source/direct_submission/windows/wddm_direct_submission.inl @@ -150,7 +150,8 @@ uint64_t WddmDirectSubmission::updateTagValue(bool requir if (requireMonitorFence) { return this->updateTagValueImpl(); } - return 0ull; + MonitoredFence ¤tFence = osContextWin->getResidencyController().getMonitoredFence(); + return currentFence.currentFenceValue; } template 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 c6ea8844a4..6a7558df3c 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 @@ -454,22 +454,6 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenUpdatingTagValueThenExpectcomple EXPECT_EQ(value, wddmDirectSubmission.ringBuffers[wddmDirectSubmission.currentRingBuffer].completionFence); } -HWTEST_F(WddmDirectSubmissionTest, givenWddmDisableMonitorFenceWhenUpdatingTagValueThenDoNotUpdateCompletionFenceAndReturnZero) { - uint64_t address = 0xFF00FF0000ull; - uint64_t value = 0x12345678ull; - MonitoredFence &contextFence = osContext->getResidencyController().getMonitoredFence(); - contextFence.gpuAddress = address; - contextFence.currentFenceValue = value; - - MockWddmDirectSubmission> wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver); - wddmDirectSubmission.disableMonitorFence = true; - EXPECT_TRUE(wddmDirectSubmission.allocateOsResources()); - - uint64_t actualTagValue = wddmDirectSubmission.updateTagValue(wddmDirectSubmission.dispatchMonitorFenceRequired(false)); - EXPECT_EQ(0ull, actualTagValue); - EXPECT_EQ(value, contextFence.currentFenceValue); -} - HWTEST_F(WddmDirectSubmissionTest, givenWddmDisableMonitorFenceAndStallingCmdsWhenUpdatingTagValueThenUpdateCompletionFence) { uint64_t address = 0xFF00FF0000ull; uint64_t value = 0x12345678ull; @@ -547,6 +531,18 @@ HWTEST_F(WddmDirectSubmissionWithMockGdiDllTest, givenRingMonitorFenceHangDetect EXPECT_EQ(std::numeric_limits::max(), actualTagValue); } +HWTEST_F(WddmDirectSubmissionTest, givenDetectGpuFalseAndRequiredMonitorFenceWhenCallUpdateTagValueThenCurrentFenceValueIsReturned) { + uint64_t value = 0x12345678ull; + MonitoredFence &contextFence = osContext->getResidencyController().getMonitoredFence(); + contextFence.currentFenceValue = value; + + MockWddmDirectSubmission> wddmDirectSubmission(*device->getDefaultEngine().commandStreamReceiver); + wddmDirectSubmission.detectGpuHang = false; + + uint64_t actualTagValue = wddmDirectSubmission.updateTagValue(false); + EXPECT_EQ(value, actualTagValue); +} + HWTEST_F(WddmDirectSubmissionTest, givenWddmDisableMonitorFenceWhenHandleStopRingBufferThenExpectCompletionFenceUpdated) { uint64_t address = 0xFF00FF0000ull; uint64_t value = 0x12345678ull;