Update flushed task count when task count write was dispatched
Signed-off-by: Jobczyk, Lukasz <lukasz.jobczyk@intel.com> Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
parent
933fbd4f63
commit
335bf2fdb2
|
@ -460,6 +460,9 @@ ze_result_t CommandQueueHw<gfxCoreFamily>::executeCommandLists(
|
||||||
anyCommandListWithCooperativeKernels);
|
anyCommandListWithCooperativeKernels);
|
||||||
|
|
||||||
this->taskCount = csr->peekTaskCount();
|
this->taskCount = csr->peekTaskCount();
|
||||||
|
if (dispatchPostSync) {
|
||||||
|
csr->setLatestFlushedTaskCount(this->taskCount);
|
||||||
|
}
|
||||||
|
|
||||||
csr->makeSurfacePackNonResident(csr->getResidencyAllocations());
|
csr->makeSurfacePackNonResident(csr->getResidencyAllocations());
|
||||||
|
|
||||||
|
|
|
@ -1014,6 +1014,61 @@ HWTEST2_F(MultiDeviceCommandQueueExecuteCommandLists, givenMultiplePartitionCoun
|
||||||
commandQueue->destroy();
|
commandQueue->destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HWTEST_F(CommandQueueExecuteCommandLists, GivenUpdateTaskCountFromWaitWhenExecutingCommandListWithFenceThenDispatchPostSyncCommandAndUpdateFlushedTaskCount) {
|
||||||
|
using MI_FLUSH_DW = typename FamilyType::MI_FLUSH_DW;
|
||||||
|
using PARSE = typename FamilyType::PARSE;
|
||||||
|
|
||||||
|
DebugManagerStateRestore restorer;
|
||||||
|
DebugManager.flags.UpdateTaskCountFromWait.set(1);
|
||||||
|
|
||||||
|
ze_result_t returnValue;
|
||||||
|
std::unique_ptr<L0::CommandList> commandList(CommandList::create(productFamily, device, NEO::EngineGroupType::Copy, 0u, returnValue));
|
||||||
|
ASSERT_EQ(ZE_RESULT_SUCCESS, returnValue);
|
||||||
|
|
||||||
|
auto csr = reinterpret_cast<NEO::UltCommandStreamReceiver<FamilyType> *>(neoDevice->getDefaultEngine().commandStreamReceiver);
|
||||||
|
csr->useNotifyEnableForPostSync = true;
|
||||||
|
|
||||||
|
const ze_command_queue_desc_t desc{};
|
||||||
|
auto commandQueue = whitebox_cast(CommandQueue::create(productFamily,
|
||||||
|
device,
|
||||||
|
neoDevice->getDefaultEngine().commandStreamReceiver,
|
||||||
|
&desc,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
returnValue));
|
||||||
|
ASSERT_NE(nullptr, commandQueue);
|
||||||
|
ASSERT_EQ(ZE_RESULT_SUCCESS, returnValue);
|
||||||
|
|
||||||
|
ze_fence_desc_t fenceDesc{};
|
||||||
|
auto fence = whitebox_cast(Fence::create(commandQueue, &fenceDesc));
|
||||||
|
ASSERT_NE(nullptr, fence);
|
||||||
|
ze_fence_handle_t fenceHandle = fence->toHandle();
|
||||||
|
|
||||||
|
zet_command_list_handle_t cmdListHandle = commandList->toHandle();
|
||||||
|
returnValue = commandQueue->executeCommandLists(1, &cmdListHandle, fenceHandle, false);
|
||||||
|
ASSERT_EQ(ZE_RESULT_SUCCESS, returnValue);
|
||||||
|
size_t usedSpaceAfter = commandQueue->commandStream->getUsed();
|
||||||
|
|
||||||
|
GenCmdList cmdList;
|
||||||
|
ASSERT_TRUE(PARSE::parseCommandBuffer(cmdList, commandQueue->commandStream->getCpuBase(), usedSpaceAfter));
|
||||||
|
|
||||||
|
uint32_t foundPostSyncMiFlush = 0u;
|
||||||
|
auto miFlushList = findAll<MI_FLUSH_DW *>(cmdList.begin(), cmdList.end());
|
||||||
|
for (auto cmdIt : miFlushList) {
|
||||||
|
auto miFlush = reinterpret_cast<MI_FLUSH_DW *>(*cmdIt);
|
||||||
|
|
||||||
|
if (miFlush->getPostSyncOperation() == MI_FLUSH_DW::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA_QWORD) {
|
||||||
|
foundPostSyncMiFlush++;
|
||||||
|
EXPECT_TRUE(miFlush->getNotifyEnable());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPECT_EQ(1u, foundPostSyncMiFlush);
|
||||||
|
EXPECT_EQ(csr->peekTaskCount(), csr->peekLatestFlushedTaskCount());
|
||||||
|
|
||||||
|
fence->destroy();
|
||||||
|
commandQueue->destroy();
|
||||||
|
}
|
||||||
|
|
||||||
HWTEST_F(CommandQueueExecuteCommandLists, GivenCopyCommandQueueWhenExecutingCopyCommandListWithFenceThenExpectSingleCopyPostSyncCommand) {
|
HWTEST_F(CommandQueueExecuteCommandLists, GivenCopyCommandQueueWhenExecutingCopyCommandListWithFenceThenExpectSingleCopyPostSyncCommand) {
|
||||||
using MI_FLUSH_DW = typename FamilyType::MI_FLUSH_DW;
|
using MI_FLUSH_DW = typename FamilyType::MI_FLUSH_DW;
|
||||||
using PARSE = typename FamilyType::PARSE;
|
using PARSE = typename FamilyType::PARSE;
|
||||||
|
|
Loading…
Reference in New Issue