mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-10 12:53:42 +08:00
Don't appendWaitOnEvents on already signaled event
Related-To: NEO-7534 Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
6040923c80
commit
8a2a12393d
@ -436,6 +436,13 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendPageFaultCopy(N
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendWaitOnEvents(uint32_t numEvents, ze_event_handle_t *phWaitEvents) {
|
||||
bool allSignaled = true;
|
||||
for (auto i = 0u; i < numEvents; i++) {
|
||||
allSignaled &= (!this->dcFlushSupport && Event::fromHandle(phWaitEvents[i])->isAlreadyCompleted());
|
||||
}
|
||||
if (allSignaled) {
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
if (this->isFlushTaskSubmissionEnabled) {
|
||||
checkAvailableSpace();
|
||||
}
|
||||
|
@ -505,6 +505,7 @@ class MockCommandListImmediateHw : public WhiteBox<::L0::CommandListCoreFamilyIm
|
||||
using BaseClass = WhiteBox<::L0::CommandListCoreFamilyImmediate<gfxCoreFamily>>;
|
||||
MockCommandListImmediateHw() : BaseClass() {}
|
||||
using BaseClass::applyMemoryRangesBarrier;
|
||||
using BaseClass::dcFlushSupport;
|
||||
using BaseClass::dependenciesPresent;
|
||||
using BaseClass::isFlushTaskSubmissionEnabled;
|
||||
using BaseClass::isSyncModeQueue;
|
||||
|
@ -545,5 +545,31 @@ HWTEST2_F(MultTileCommandListAppendWaitOnEvent,
|
||||
EXPECT_EQ(2u, semaphoreWaitsFound);
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListAppendWaitOnEvent, givenImmediateCommandListWhenAppendWaitOnNotSignaledEventThenWait, IsAtLeastSkl) {
|
||||
MockCommandListImmediateHw<gfxCoreFamily> cmdList;
|
||||
cmdList.initialize(device, NEO::EngineGroupType::RenderCompute, 0u);
|
||||
cmdList.csr = device->getNEODevice()->getInternalEngine().commandStreamReceiver;
|
||||
|
||||
ze_event_handle_t eventHandle = event->toHandle();
|
||||
|
||||
EXPECT_FALSE(cmdList.dependenciesPresent);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, cmdList.appendWaitOnEvents(1, &eventHandle));
|
||||
EXPECT_TRUE(cmdList.dependenciesPresent);
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListAppendWaitOnEvent, givenImmediateCommandListWhenAppendWaitOnAlreadySignaledEventThenDontWait, IsAtLeastSkl) {
|
||||
MockCommandListImmediateHw<gfxCoreFamily> cmdList;
|
||||
cmdList.initialize(device, NEO::EngineGroupType::RenderCompute, 0u);
|
||||
cmdList.csr = device->getNEODevice()->getInternalEngine().commandStreamReceiver;
|
||||
cmdList.dcFlushSupport = false;
|
||||
event->hostSignal();
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, event->queryStatus());
|
||||
ze_event_handle_t eventHandle = event->toHandle();
|
||||
|
||||
EXPECT_FALSE(cmdList.dependenciesPresent);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, cmdList.appendWaitOnEvents(1, &eventHandle));
|
||||
EXPECT_FALSE(cmdList.dependenciesPresent);
|
||||
}
|
||||
|
||||
} // namespace ult
|
||||
} // namespace L0
|
||||
|
@ -1124,8 +1124,17 @@ HWTEST2_F(AppendMemoryLockedCopyTest, givenImmediateCommandListWhenAppendWaitOnE
|
||||
cmdList.csr = device->getNEODevice()->getInternalEngine().commandStreamReceiver;
|
||||
|
||||
EXPECT_FALSE(cmdList.dependenciesPresent);
|
||||
|
||||
cmdList.appendWaitOnEvents(0, nullptr);
|
||||
ze_event_pool_desc_t eventPoolDesc = {};
|
||||
eventPoolDesc.count = 1;
|
||||
eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP;
|
||||
ze_event_desc_t eventDesc = {};
|
||||
eventDesc.index = 0;
|
||||
ze_result_t returnValue = ZE_RESULT_SUCCESS;
|
||||
auto eventPool = std::unique_ptr<EventPool>(EventPool::create(driverHandle.get(), context, 0, nullptr, &eventPoolDesc, returnValue));
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
|
||||
auto event = std::unique_ptr<Event>(Event::create<uint32_t>(eventPool.get(), &eventDesc, device));
|
||||
auto eventHandle = event->toHandle();
|
||||
cmdList.appendWaitOnEvents(1, &eventHandle);
|
||||
|
||||
EXPECT_TRUE(cmdList.dependenciesPresent);
|
||||
|
||||
|
Reference in New Issue
Block a user