diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp index 8c6e55d814..882ddec603 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp @@ -25,6 +25,7 @@ #include "level_zero/core/test/unit_tests/fixtures/module_fixture.h" #include "level_zero/core/test/unit_tests/mocks/mock_cmdlist.h" #include "level_zero/core/test/unit_tests/mocks/mock_cmdqueue.h" +#include "level_zero/core/test/unit_tests/sources/helper/ze_object_utils.h" namespace L0 { namespace ult { @@ -1449,5 +1450,49 @@ HWTEST2_F(ImmediateCommandListTest, givenImmediateCommandListWhenClosingCommandL EXPECT_EQ(0u, commandContainer.getCommandStream()->getUsed()); } +HWTEST2_F(ImmediateCommandListTest, givenCopyEngineAsyncCmdListWhenAppendingCopyOperationThenDoNotRequireMonitorFence, IsAtLeastXeHpcCore) { + ze_command_queue_desc_t desc = {}; + desc.mode = ZE_COMMAND_QUEUE_MODE_ASYNCHRONOUS; + + ze_result_t returnValue; + auto commandList = zeUniquePtr(CommandList::createImmediate(productFamily, device, &desc, false, NEO::EngineGroupType::Copy, returnValue)); + ASSERT_NE(nullptr, commandList); + EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue); + auto whiteBoxCmdList = static_cast(commandList.get()); + + auto ultCsr = static_cast *>(whiteBoxCmdList->csr); + ultCsr->recordFlusheBatchBuffer = true; + + void *srcPtr = reinterpret_cast(0x12000); + void *dstPtr = reinterpret_cast(0x23000); + + returnValue = commandList->appendMemoryCopy(dstPtr, srcPtr, 8, nullptr, 0, nullptr, false, false); + EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue); + + EXPECT_FALSE(ultCsr->latestFlushedBatchBuffer.dispatchMonitorFence); +} + +HWTEST2_F(ImmediateCommandListTest, givenCopyEngineSyncCmdListWhenAppendingCopyOperationThenRequireMonitorFence, IsAtLeastXeHpcCore) { + ze_command_queue_desc_t desc = {}; + desc.mode = ZE_COMMAND_QUEUE_MODE_SYNCHRONOUS; + + ze_result_t returnValue; + auto commandList = zeUniquePtr(CommandList::createImmediate(productFamily, device, &desc, false, NEO::EngineGroupType::Copy, returnValue)); + ASSERT_NE(nullptr, commandList); + EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue); + auto whiteBoxCmdList = static_cast(commandList.get()); + + auto ultCsr = static_cast *>(whiteBoxCmdList->csr); + ultCsr->recordFlusheBatchBuffer = true; + + void *srcPtr = reinterpret_cast(0x12000); + void *dstPtr = reinterpret_cast(0x23000); + + returnValue = commandList->appendMemoryCopy(dstPtr, srcPtr, 8, nullptr, 0, nullptr, false, false); + EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue); + + EXPECT_TRUE(ultCsr->latestFlushedBatchBuffer.dispatchMonitorFence); +} + } // namespace ult } // namespace L0 diff --git a/shared/source/command_stream/command_stream_receiver_hw_base.inl b/shared/source/command_stream/command_stream_receiver_hw_base.inl index f13289125e..a62e3da836 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_base.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_base.inl @@ -237,7 +237,7 @@ CompletionStamp CommandStreamReceiverHw::flushBcsTask(LinearStream &c BatchBuffer batchBuffer{streamToSubmit.getGraphicsAllocation(), startOffset, 0, taskStartAddress, nullptr, false, QueueThrottle::MEDIUM, NEO::QueueSliceCount::defaultSliceCount, streamToSubmit.getUsed(), &streamToSubmit, bbEndLocation, this->getNumClients(), (submitCSR || dispatchBcsFlags.hasStallingCmds), - dispatchBcsFlags.hasRelaxedOrderingDependencies, false}; + dispatchBcsFlags.hasRelaxedOrderingDependencies, dispatchBcsFlags.flushTaskCount}; updateStreamTaskCount(streamToSubmit, taskCount + 1);