diff --git a/shared/source/direct_submission/direct_submission_hw.h b/shared/source/direct_submission/direct_submission_hw.h index 44d31a8f07..ec337519bb 100644 --- a/shared/source/direct_submission/direct_submission_hw.h +++ b/shared/source/direct_submission/direct_submission_hw.h @@ -48,7 +48,7 @@ enum class DirectSubmissionSfenceMode : int32_t { namespace UllsDefaults { inline constexpr bool defaultDisableCacheFlush = true; -inline constexpr bool defaultDisableMonitorFence = false; +inline constexpr bool defaultDisableMonitorFence = true; } // namespace UllsDefaults struct BatchBuffer; @@ -145,8 +145,8 @@ class DirectSubmissionHw { void setReturnAddress(void *returnCmd, uint64_t returnAddress); - void *dispatchWorkloadSection(BatchBuffer &batchBuffer); - size_t getSizeDispatch(bool relaxedOrderingSchedulerRequired, bool returnPtrsRequired); + void *dispatchWorkloadSection(BatchBuffer &batchBuffer, bool dispatchMonitorFence); + size_t getSizeDispatch(bool relaxedOrderingSchedulerRequired, bool returnPtrsRequired, bool dispatchMonitorFence); void dispatchPrefetchMitigation(); size_t getSizePrefetchMitigation(); diff --git a/shared/source/direct_submission/direct_submission_hw.inl b/shared/source/direct_submission/direct_submission_hw.inl index ce44202079..17624f63f1 100644 --- a/shared/source/direct_submission/direct_submission_hw.inl +++ b/shared/source/direct_submission/direct_submission_hw.inl @@ -51,6 +51,9 @@ DirectSubmissionHw::DirectSubmissionHw(const DirectSubmis disableCacheFlush = UllsDefaults::defaultDisableCacheFlush; disableMonitorFence = UllsDefaults::defaultDisableMonitorFence; + if (DebugManager.flags.DirectSubmissionDisableMonitorFence.get() != -1) { + this->disableMonitorFence = DebugManager.flags.DirectSubmissionDisableMonitorFence.get(); + } if (DebugManager.flags.DirectSubmissionMaxRingBuffers.get() != -1) { this->maxRingBufferCount = DebugManager.flags.DirectSubmissionMaxRingBuffers.get(); @@ -505,7 +508,7 @@ bool DirectSubmissionHw::startRingBuffer() { startSize += RelaxedOrderingHelper::getSizeRegistersInit(); } - size_t requiredSize = startSize + getSizeDispatch(false, false) + getSizeEnd(false); + size_t requiredSize = startSize + getSizeDispatch(false, false, dispatchMonitorFenceRequired(true)) + getSizeEnd(false); if (ringCommandStream.getAvailableSpace() < requiredSize) { switchRingBuffers(); } @@ -662,7 +665,7 @@ inline size_t DirectSubmissionHw::getSizeEnd(bool relaxed } template -inline size_t DirectSubmissionHw::getSizeDispatch(bool relaxedOrderingSchedulerRequired, bool returnPtrsRequired) { +inline size_t DirectSubmissionHw::getSizeDispatch(bool relaxedOrderingSchedulerRequired, bool returnPtrsRequired, bool dispatchMonitorFence) { size_t size = getSizeSemaphoreSection(relaxedOrderingSchedulerRequired); if (workloadMode == 0) { size += getSizeStartSection(); @@ -677,7 +680,7 @@ inline size_t DirectSubmissionHw::getSizeDispatch(bool re if (!disableCacheFlush) { size += Dispatcher::getSizeCacheFlush(rootDeviceEnvironment); } - if (!disableMonitorFence) { + if (dispatchMonitorFence) { size += Dispatcher::getSizeMonitorFence(rootDeviceEnvironment); } @@ -695,7 +698,7 @@ void DirectSubmissionHw::updateRelaxedOrderingQueueSize(u } template -void *DirectSubmissionHw::dispatchWorkloadSection(BatchBuffer &batchBuffer) { +void *DirectSubmissionHw::dispatchWorkloadSection(BatchBuffer &batchBuffer, bool dispatchMonitorFence) { void *currentPosition = ringCommandStream.getSpace(0); if (DebugManager.flags.DirectSubmissionPrintBuffers.get()) { @@ -765,7 +768,7 @@ void *DirectSubmissionHw::dispatchWorkloadSection(BatchBu Dispatcher::dispatchCacheFlush(ringCommandStream, this->rootDeviceEnvironment, gpuVaForMiFlush); } - if (!disableMonitorFence || this->dispatchMonitorFenceRequired(batchBuffer.hasStallingCmds)) { + if (dispatchMonitorFence) { TagData currentTagData = {}; getTagAddressValue(currentTagData); Dispatcher::dispatchMonitorFence(ringCommandStream, currentTagData.tagAddress, currentTagData.tagValue, this->rootDeviceEnvironment, @@ -935,8 +938,9 @@ bool DirectSubmissionHw::dispatchCommandBuffer(BatchBuffe this->startRingBuffer(); bool relaxedOrderingSchedulerWillBeNeeded = (this->relaxedOrderingSchedulerRequired || batchBuffer.hasRelaxedOrderingDependencies); + bool dispatchMonitorFence = this->dispatchMonitorFenceRequired(batchBuffer.hasStallingCmds); - size_t dispatchSize = getSizeDispatch(relaxedOrderingSchedulerWillBeNeeded, batchBuffer.hasRelaxedOrderingDependencies); + size_t dispatchSize = getSizeDispatch(relaxedOrderingSchedulerWillBeNeeded, batchBuffer.hasRelaxedOrderingDependencies, dispatchMonitorFence); if (this->copyCommandBufferIntoRing(batchBuffer)) { dispatchSize += (batchBuffer.stream->getUsed() - batchBuffer.startOffset) - 2 * getSizeStartSection(); @@ -965,7 +969,7 @@ bool DirectSubmissionHw::dispatchCommandBuffer(BatchBuffe handleNewResourcesSubmission(); - void *currentPosition = dispatchWorkloadSection(batchBuffer); + void *currentPosition = dispatchWorkloadSection(batchBuffer, dispatchMonitorFence); cpuCachelineFlush(currentPosition, dispatchSize); handleResidency(); @@ -1084,7 +1088,7 @@ inline GraphicsAllocation *DirectSubmissionHw::switchRing template bool DirectSubmissionHw::dispatchMonitorFenceRequired(bool hasStallingCmds) { - return false; + return !this->disableMonitorFence; } template diff --git a/shared/source/direct_submission/linux/drm_direct_submission.inl b/shared/source/direct_submission/linux/drm_direct_submission.inl index a73360e548..af7895136d 100644 --- a/shared/source/direct_submission/linux/drm_direct_submission.inl +++ b/shared/source/direct_submission/linux/drm_direct_submission.inl @@ -28,12 +28,6 @@ template DrmDirectSubmission::DrmDirectSubmission(const DirectSubmissionInputParams &inputParams) : DirectSubmissionHw(inputParams) { - this->disableMonitorFence = true; - - if (DebugManager.flags.DirectSubmissionDisableMonitorFence.get() != -1) { - this->disableMonitorFence = DebugManager.flags.DirectSubmissionDisableMonitorFence.get(); - } - if (DebugManager.flags.OverrideUserFenceStartValue.get() != -1) { this->completionFenceValue = static_cast(DebugManager.flags.OverrideUserFenceStartValue.get()); } diff --git a/shared/source/direct_submission/windows/wddm_direct_submission.inl b/shared/source/direct_submission/windows/wddm_direct_submission.inl index e7ec61ca64..3c0a336ef2 100644 --- a/shared/source/direct_submission/windows/wddm_direct_submission.inl +++ b/shared/source/direct_submission/windows/wddm_direct_submission.inl @@ -41,12 +41,6 @@ WddmDirectSubmission::WddmDirectSubmission(const DirectSu if (this->miMemFenceRequired) { this->gpuVaForAdditionalSynchronizationWA = this->completionFenceAllocation->getGpuAddress() + 8u; } - - this->disableMonitorFence = true; - - if (DebugManager.flags.DirectSubmissionDisableMonitorFence.get() != -1) { - this->disableMonitorFence = DebugManager.flags.DirectSubmissionDisableMonitorFence.get(); - } } template @@ -157,7 +151,7 @@ uint64_t WddmDirectSubmission::updateTagValue(bool hasSta template bool WddmDirectSubmission::dispatchMonitorFenceRequired(bool hasStallingCmds) { - return hasStallingCmds; + return !this->disableMonitorFence || hasStallingCmds; } template diff --git a/shared/test/common/mocks/mock_direct_submission_hw.h b/shared/test/common/mocks/mock_direct_submission_hw.h index 7b4e2b4be7..d225268e41 100644 --- a/shared/test/common/mocks/mock_direct_submission_hw.h +++ b/shared/test/common/mocks/mock_direct_submission_hw.h @@ -32,6 +32,7 @@ struct MockDirectSubmissionHw : public DirectSubmissionHw using BaseClass::disableCpuCacheFlush; using BaseClass::disableMonitorFence; using BaseClass::dispatchDisablePrefetcher; + using BaseClass::dispatchMonitorFenceRequired; using BaseClass::dispatchPartitionRegisterConfiguration; using BaseClass::dispatchPrefetchMitigation; using BaseClass::dispatchRelaxedOrderingReturnPtrRegs; diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp index 46cdf0abbf..ffb8d3b1a9 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp @@ -452,12 +452,12 @@ HWTEST_F(DirectSubmissionTest, using Dispatcher = RenderDispatcher; MockDirectSubmissionHw regularDirectSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); + regularDirectSubmission.disableMonitorFence = false; size_t regularSizeEnd = regularDirectSubmission.getSizeEnd(false); MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); bool ret = directSubmission.allocateResources(); - directSubmission.disableMonitorFence = true; directSubmission.ringStart = true; EXPECT_TRUE(ret); @@ -567,10 +567,9 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenGetDispatchSizeThenExpec size_t expectedSize = directSubmission.getSizeStartSection() + Dispatcher::getSizeCacheFlush(directSubmission.rootDeviceEnvironment) + - Dispatcher::getSizeMonitorFence(directSubmission.rootDeviceEnvironment) + directSubmission.getSizeSemaphoreSection(false) + directSubmission.getSizeNewResourceHandler(); - size_t actualSize = directSubmission.getSizeDispatch(false, false); + size_t actualSize = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(true)); EXPECT_EQ(expectedSize, actualSize); } @@ -584,9 +583,8 @@ HWTEST_F(DirectSubmissionTest, size_t expectedSize = Dispatcher::getSizeStoreDwordCommand() + Dispatcher::getSizeCacheFlush(directSubmission.rootDeviceEnvironment) + - Dispatcher::getSizeMonitorFence(directSubmission.rootDeviceEnvironment) + directSubmission.getSizeSemaphoreSection(false) + directSubmission.getSizeNewResourceHandler(); - size_t actualSize = directSubmission.getSizeDispatch(false, false); + size_t actualSize = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)); EXPECT_EQ(expectedSize, actualSize); } @@ -599,9 +597,8 @@ HWTEST_F(DirectSubmissionTest, MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); directSubmission.workloadMode = 2; size_t expectedSize = Dispatcher::getSizeCacheFlush(directSubmission.rootDeviceEnvironment) + - Dispatcher::getSizeMonitorFence(directSubmission.rootDeviceEnvironment) + directSubmission.getSizeSemaphoreSection(false) + directSubmission.getSizeNewResourceHandler(); - size_t actualSize = directSubmission.getSizeDispatch(false, false); + size_t actualSize = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)); EXPECT_EQ(expectedSize, actualSize); } @@ -612,10 +609,9 @@ HWTEST_F(DirectSubmissionTest, MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); directSubmission.disableCacheFlush = true; size_t expectedSize = directSubmission.getSizeStartSection() + - Dispatcher::getSizeMonitorFence(directSubmission.rootDeviceEnvironment) + directSubmission.getSizeSemaphoreSection(false) + directSubmission.getSizeNewResourceHandler(); - size_t actualSize = directSubmission.getSizeDispatch(false, false); + size_t actualSize = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)); EXPECT_EQ(expectedSize, actualSize); } @@ -630,7 +626,7 @@ HWTEST_F(DirectSubmissionTest, Dispatcher::getSizeCacheFlush(directSubmission.rootDeviceEnvironment) + directSubmission.getSizeSemaphoreSection(false) + directSubmission.getSizeNewResourceHandler(); - size_t actualSize = directSubmission.getSizeDispatch(false, false); + size_t actualSize = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)); EXPECT_EQ(expectedSize, actualSize); } @@ -638,6 +634,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenGetEndSizeThenExpectCorr using Dispatcher = RenderDispatcher; MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); + directSubmission.disableMonitorFence = false; size_t expectedSize = Dispatcher::getSizeStopCommandBuffer() + Dispatcher::getSizeCacheFlush(directSubmission.rootDeviceEnvironment) + @@ -821,9 +818,9 @@ HWTEST_F(DirectSubmissionTest, MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); EXPECT_TRUE(UllsDefaults::defaultDisableCacheFlush); - EXPECT_FALSE(UllsDefaults::defaultDisableMonitorFence); + EXPECT_TRUE(UllsDefaults::defaultDisableMonitorFence); EXPECT_TRUE(directSubmission.disableCacheFlush); - EXPECT_FALSE(directSubmission.disableMonitorFence); + EXPECT_TRUE(directSubmission.disableMonitorFence); EXPECT_EQ(0u, directSubmission.workloadMode); EXPECT_EQ(nullptr, directSubmission.diagnostic.get()); bool ret = directSubmission.initialize(false, false); @@ -855,9 +852,9 @@ HWTEST_F(DirectSubmissionTest, MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); EXPECT_TRUE(UllsDefaults::defaultDisableCacheFlush); - EXPECT_FALSE(UllsDefaults::defaultDisableMonitorFence); + EXPECT_TRUE(UllsDefaults::defaultDisableMonitorFence); EXPECT_TRUE(directSubmission.disableCacheFlush); - EXPECT_FALSE(directSubmission.disableMonitorFence); + EXPECT_TRUE(directSubmission.disableMonitorFence); EXPECT_EQ(0u, directSubmission.workloadMode); EXPECT_EQ(nullptr, directSubmission.diagnostic.get()); bool ret = directSubmission.initialize(true, false); @@ -895,9 +892,9 @@ HWTEST_F(DirectSubmissionTest, NEO::IoFunctions::mockFcloseCalled = 0u; MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); EXPECT_TRUE(UllsDefaults::defaultDisableCacheFlush); - EXPECT_FALSE(UllsDefaults::defaultDisableMonitorFence); + EXPECT_TRUE(UllsDefaults::defaultDisableMonitorFence); EXPECT_TRUE(directSubmission.disableCacheFlush); - EXPECT_FALSE(directSubmission.disableMonitorFence); + EXPECT_TRUE(directSubmission.disableMonitorFence); EXPECT_EQ(0u, directSubmission.workloadMode); EXPECT_EQ(nullptr, directSubmission.diagnostic.get()); bool ret = directSubmission.initialize(false, false); @@ -935,7 +932,7 @@ HWTEST_F(DirectSubmissionTest, MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); uint32_t expectedSemaphoreValue = directSubmission.currentQueueWorkCount; EXPECT_TRUE(UllsDefaults::defaultDisableCacheFlush); - EXPECT_FALSE(UllsDefaults::defaultDisableMonitorFence); + EXPECT_TRUE(UllsDefaults::defaultDisableMonitorFence); EXPECT_TRUE(directSubmission.disableCacheFlush); EXPECT_TRUE(directSubmission.disableMonitorFence); EXPECT_EQ(1u, directSubmission.workloadMode); @@ -946,7 +943,7 @@ HWTEST_F(DirectSubmissionTest, size_t expectedSize = Dispatcher::getSizePreemption() + directSubmission.getSizeSemaphoreSection(false) + directSubmission.getDiagnosticModeSection(); - expectedSize += expectedExecCount * (directSubmission.getSizeDispatch(false, false) - directSubmission.getSizeNewResourceHandler()); + expectedSize += expectedExecCount * (directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler()); if (directSubmission.miMemFenceRequired) { expectedSize += directSubmission.getSizeSystemMemoryFenceAddress(); @@ -967,7 +964,7 @@ HWTEST_F(DirectSubmissionTest, EXPECT_EQ(expectedSemaphoreValue, directSubmission.currentQueueWorkCount); EXPECT_TRUE(directSubmission.disableCacheFlush); - EXPECT_FALSE(directSubmission.disableMonitorFence); + EXPECT_TRUE(directSubmission.disableMonitorFence); EXPECT_EQ(0u, directSubmission.workloadMode); EXPECT_EQ(nullptr, directSubmission.diagnostic.get()); @@ -1040,7 +1037,7 @@ HWTEST_F(DirectSubmissionTest, MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); uint32_t expectedSemaphoreValue = directSubmission.currentQueueWorkCount; EXPECT_TRUE(UllsDefaults::defaultDisableCacheFlush); - EXPECT_FALSE(UllsDefaults::defaultDisableMonitorFence); + EXPECT_TRUE(UllsDefaults::defaultDisableMonitorFence); EXPECT_TRUE(directSubmission.disableCacheFlush); EXPECT_TRUE(directSubmission.disableMonitorFence); EXPECT_EQ(2u, directSubmission.workloadMode); @@ -1051,7 +1048,7 @@ HWTEST_F(DirectSubmissionTest, size_t expectedSize = Dispatcher::getSizePreemption() + directSubmission.getSizeSemaphoreSection(false); size_t expectedDispatch = directSubmission.getSizeSemaphoreSection(false); - EXPECT_EQ(expectedDispatch, directSubmission.getSizeDispatch(false, false) - directSubmission.getSizeNewResourceHandler()); + EXPECT_EQ(expectedDispatch, directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler()); expectedSize += expectedExecCount * expectedDispatch; if (directSubmission.miMemFenceRequired) { @@ -1073,7 +1070,7 @@ HWTEST_F(DirectSubmissionTest, EXPECT_EQ(expectedSemaphoreValue, directSubmission.currentQueueWorkCount); EXPECT_TRUE(directSubmission.disableCacheFlush); - EXPECT_FALSE(directSubmission.disableMonitorFence); + EXPECT_TRUE(directSubmission.disableMonitorFence); EXPECT_EQ(0u, directSubmission.workloadMode); EXPECT_EQ(nullptr, directSubmission.diagnostic.get()); diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp index c3c62711db..268300991a 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp @@ -244,7 +244,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DirectSubmissionDispatchBufferTest, EXPECT_EQ(1u, directSubmission.submitCount); EXPECT_EQ(2u, directSubmission.handleResidencyCount); - EXPECT_EQ(directSubmission.getSizeDispatch(false, false) - directSubmission.getSizeNewResourceHandler(), directSubmission.ringCommandStream.getUsed()); + EXPECT_EQ(directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler(), directSubmission.ringCommandStream.getUsed()); EXPECT_TRUE(directSubmission.ringStart); HardwareParse hwParse; @@ -415,22 +415,22 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, DebugManager.flags.DirectSubmissionDisableCacheFlush.set(0); MockDirectSubmissionHw regularDirectSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); - size_t regularSizeDispatch = regularDirectSubmission.getSizeDispatch(false, false); + regularDirectSubmission.disableMonitorFence = false; + size_t regularSizeDispatch = regularDirectSubmission.getSizeDispatch(false, false, regularDirectSubmission.dispatchMonitorFenceRequired(false)); MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); - directSubmission.disableMonitorFence = true; bool ret = directSubmission.allocateResources(); EXPECT_TRUE(ret); size_t tagUpdateSize = Dispatcher::getSizeMonitorFence(directSubmission.rootDeviceEnvironment); - size_t disabledSizeDispatch = directSubmission.getSizeDispatch(false, false); + size_t disabledSizeDispatch = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)); EXPECT_EQ(disabledSizeDispatch, (regularSizeDispatch - tagUpdateSize)); directSubmission.tagValueSetValue = 0x4343123ull; directSubmission.tagAddressSetValue = 0xBEEF00000ull; - directSubmission.dispatchWorkloadSection(batchBuffer); + directSubmission.dispatchWorkloadSection(batchBuffer, directSubmission.dispatchMonitorFenceRequired(batchBuffer.hasStallingCmds)); size_t expectedDispatchSize = disabledSizeDispatch - directSubmission.getSizeNewResourceHandler(); EXPECT_EQ(expectedDispatchSize, directSubmission.ringCommandStream.getUsed()); @@ -464,7 +464,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, DebugManager.flags.DirectSubmissionDisableCacheFlush.set(0); MockDirectSubmissionHw regularDirectSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); - size_t regularSizeDispatch = regularDirectSubmission.getSizeDispatch(false, false); + size_t regularSizeDispatch = regularDirectSubmission.getSizeDispatch(false, false, regularDirectSubmission.dispatchMonitorFenceRequired(false)); MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); @@ -474,10 +474,10 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, size_t flushSize = Dispatcher::getSizeCacheFlush(directSubmission.rootDeviceEnvironment); - size_t disabledSizeDispatch = directSubmission.getSizeDispatch(false, false); + size_t disabledSizeDispatch = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)); EXPECT_EQ(disabledSizeDispatch, (regularSizeDispatch - flushSize)); - directSubmission.dispatchWorkloadSection(batchBuffer); + directSubmission.dispatchWorkloadSection(batchBuffer, directSubmission.dispatchMonitorFenceRequired(batchBuffer.hasStallingCmds)); size_t expectedDispatchSize = disabledSizeDispatch - directSubmission.getSizeNewResourceHandler(); EXPECT_EQ(expectedDispatchSize, directSubmission.ringCommandStream.getUsed()); @@ -511,8 +511,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, using Dispatcher = RenderDispatcher; MockDirectSubmissionHw regularDirectSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); - - size_t regularSizeDispatch = regularDirectSubmission.getSizeDispatch(false, false); + size_t regularSizeDispatch = regularDirectSubmission.getSizeDispatch(false, false, regularDirectSubmission.dispatchMonitorFenceRequired(false)); MockDirectSubmissionHw directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); @@ -523,12 +522,12 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, size_t startSize = directSubmission.getSizeStartSection(); size_t storeDataSize = Dispatcher::getSizeStoreDwordCommand(); - size_t debugSizeDispatch = directSubmission.getSizeDispatch(false, false); + size_t debugSizeDispatch = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)); EXPECT_EQ(debugSizeDispatch, (regularSizeDispatch - startSize + storeDataSize)); directSubmission.workloadModeOneExpectedValue = 0x40u; directSubmission.semaphoreGpuVa = 0xAFF0000; - directSubmission.dispatchWorkloadSection(batchBuffer); + directSubmission.dispatchWorkloadSection(batchBuffer, directSubmission.dispatchMonitorFenceRequired(batchBuffer.hasStallingCmds)); size_t expectedDispatchSize = debugSizeDispatch - directSubmission.getSizeNewResourceHandler(); EXPECT_EQ(expectedDispatchSize, directSubmission.ringCommandStream.getUsed()); @@ -556,7 +555,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; MockDirectSubmissionHw> regularDirectSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); - size_t regularSizeDispatch = regularDirectSubmission.getSizeDispatch(false, false); + size_t regularSizeDispatch = regularDirectSubmission.getSizeDispatch(false, false, regularDirectSubmission.dispatchMonitorFenceRequired(false)); MockDirectSubmissionHw> directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); @@ -566,11 +565,11 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, size_t startSize = directSubmission.getSizeStartSection(); - size_t debugSizeDispatch = directSubmission.getSizeDispatch(false, false); + size_t debugSizeDispatch = directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)); EXPECT_EQ(debugSizeDispatch, (regularSizeDispatch - startSize)); directSubmission.currentQueueWorkCount = 0x40u; - directSubmission.dispatchWorkloadSection(batchBuffer); + directSubmission.dispatchWorkloadSection(batchBuffer, directSubmission.dispatchMonitorFenceRequired(batchBuffer.hasStallingCmds)); size_t expectedDispatchSize = debugSizeDispatch - directSubmission.getSizeNewResourceHandler(); EXPECT_EQ(expectedDispatchSize, directSubmission.ringCommandStream.getUsed()); @@ -624,7 +623,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, EXPECT_EQ(1u, directSubmission.submitCount); EXPECT_EQ(2u, directSubmission.handleResidencyCount); - EXPECT_EQ(sizeUsed + directSubmission.getSizeDispatch(false, false) - directSubmission.getSizeNewResourceHandler(), directSubmission.ringCommandStream.getUsed()); + EXPECT_EQ(sizeUsed + directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler(), directSubmission.ringCommandStream.getUsed()); EXPECT_TRUE(directSubmission.ringStart); HardwareParse hwParse; @@ -666,7 +665,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, EXPECT_EQ(oldRingAllocation->getGpuAddress(), directSubmission.submitGpuAddress); EXPECT_EQ(2u, directSubmission.handleResidencyCount); - size_t dispatchSize = submitSize + directSubmission.getSizeDispatch(false, false) - directSubmission.getSizeNewResourceHandler(); + size_t dispatchSize = submitSize + directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler(); EXPECT_EQ(dispatchSize, directSubmission.ringCommandStream.getUsed()); EXPECT_TRUE(directSubmission.ringStart); @@ -709,7 +708,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, EXPECT_EQ(1u, directSubmission.submitCount); EXPECT_EQ(2u, directSubmission.handleResidencyCount); - EXPECT_EQ(directSubmission.getSizeDispatch(false, false) - directSubmission.getSizeNewResourceHandler(), directSubmission.ringCommandStream.getUsed()); + EXPECT_EQ(directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler(), directSubmission.ringCommandStream.getUsed()); EXPECT_TRUE(directSubmission.ringStart); } @@ -746,7 +745,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, EXPECT_EQ(submitSize, directSubmission.submitSize); EXPECT_EQ(2u, directSubmission.handleResidencyCount); - size_t dispatchSize = submitSize + directSubmission.getSizeDispatch(false, false) - directSubmission.getSizeNewResourceHandler(); + size_t dispatchSize = submitSize + directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) - directSubmission.getSizeNewResourceHandler(); EXPECT_EQ(dispatchSize, directSubmission.ringCommandStream.getUsed()); EXPECT_TRUE(directSubmission.ringStart); @@ -1827,7 +1826,7 @@ HWTEST_F(DirectSubmissionRelaxedOrderingTests, givenNotEnoughSpaceForTaskStoreSe directSubmission.ringCommandStream.getUsed(); auto sizeToConsume = directSubmission.ringCommandStream.getAvailableSpace() - - (directSubmission.getSizeDispatch(false, false) + directSubmission.getSizeEnd(false) + directSubmission.getSizeSwitchRingBufferSection()); + (directSubmission.getSizeDispatch(false, false, directSubmission.dispatchMonitorFenceRequired(false)) + directSubmission.getSizeEnd(false) + directSubmission.getSizeSwitchRingBufferSection()); directSubmission.ringCommandStream.getSpace(sizeToConsume); @@ -2266,7 +2265,7 @@ HWTEST2_F(DirectSubmissionRelaxedOrderingTests, whenDispatchingWorkloadSectionTh auto originalBbStart = *reinterpret_cast(batchBuffer.endCmdPtr); batchBuffer.hasRelaxedOrderingDependencies = true; - directSubmission.dispatchWorkloadSection(batchBuffer); + directSubmission.dispatchWorkloadSection(batchBuffer, directSubmission.dispatchMonitorFenceRequired(batchBuffer.hasStallingCmds)); uint64_t returnPtr = directSubmission.ringCommandStream.getGpuBase() + offset + (4 * sizeof(MI_LOAD_REGISTER_IMM)) + directSubmission.getSizeStartSection(); @@ -2290,7 +2289,7 @@ HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenBbWithoutRelaxedOrderingDep auto offset = directSubmission.ringCommandStream.getUsed(); batchBuffer.hasRelaxedOrderingDependencies = false; - directSubmission.dispatchWorkloadSection(batchBuffer); + directSubmission.dispatchWorkloadSection(batchBuffer, directSubmission.dispatchMonitorFenceRequired(batchBuffer.hasStallingCmds)); auto lriCmd = genCmdCast(ptrOffset(directSubmission.ringCommandStream.getCpuBase(), offset)); EXPECT_EQ(nullptr, lriCmd); @@ -2696,8 +2695,8 @@ HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenSchedulerRequiredWhenDispat HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenReturnPtrsRequiredWhenAskingForDispatchSizeTheAddMmioSizes, IsAtLeastXeHpcCore) { MockDirectSubmissionHw> directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); - size_t baseSize = directSubmission.getSizeDispatch(true, false); - size_t sizeWitfRetPtr = directSubmission.getSizeDispatch(true, true); + size_t baseSize = directSubmission.getSizeDispatch(true, false, directSubmission.dispatchMonitorFenceRequired(false)); + size_t sizeWitfRetPtr = directSubmission.getSizeDispatch(true, true, directSubmission.dispatchMonitorFenceRequired(false)); EXPECT_EQ(baseSize + RelaxedOrderingHelper::getSizeReturnPtrRegs(), sizeWitfRetPtr); } diff --git a/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h b/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h index 68ae369a3d..2329dc3a9e 100644 --- a/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h +++ b/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h @@ -20,6 +20,7 @@ struct MockWddmDirectSubmission : public WddmDirectSubmissionringCommandStream.getUsed(); size_t expectedSize = directSubmission->getSizeSemaphoreSection(false) + Dispatcher::getSizePreemption() + - directSubmission->getSizeDispatch(false, false); + directSubmission->getSizeDispatch(false, false, directSubmission->dispatchMonitorFenceRequired(false)); if (directSubmission->miMemFenceRequired) { expectedSize += directSubmission->getSizeSystemMemoryFenceAddress(); @@ -1286,7 +1286,7 @@ HWTEST_TEMPLATED_F(WddmCommandStreamMockGdiTest, givenDirectSubmissionEnabledOnB size_t actualDispatchSize = directSubmission->ringCommandStream.getUsed(); size_t expectedSize = directSubmission->getSizeSemaphoreSection(false) + Dispatcher::getSizePreemption() + - directSubmission->getSizeDispatch(false, false); + directSubmission->getSizeDispatch(false, false, directSubmission->dispatchMonitorFenceRequired(false)); if (directSubmission->miMemFenceRequired) { expectedSize += directSubmission->getSizeSystemMemoryFenceAddress();