Skip to content

Commit 1bc5f7b

Browse files
Ensure that events without commands have proper flush stamps.
Change-Id: I937efef7f87fa7df9e9b1a903269e3637eca73ad Signed-off-by: Mrozek, Michal <[email protected]>
1 parent eb3e6ef commit 1bc5f7b

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

runtime/command_queue/enqueue_common.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,6 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
274274
slmUsed,
275275
printfHandler.get());
276276

277-
if (eventBuilder.getEvent()) {
278-
eventBuilder.getEvent()->flushStamp->replaceStampObject(this->flushStamp->getStampReference());
279-
}
280-
281277
if (parentKernel) {
282278
getCommandStreamReceiver().setMediaVFEStateDirty(true);
283279

@@ -329,6 +325,9 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
329325
eventBuilder.getEvent()->setStartTimeStamp();
330326
}
331327
}
328+
if (eventBuilder.getEvent()) {
329+
eventBuilder.getEvent()->flushStamp->replaceStampObject(this->flushStamp->getStampReference());
330+
}
332331
}
333332
updateFromCompletionStamp(completionStamp);
334333

unit_tests/command_queue/enqueue_marker_tests.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "test.h"
1111
#include "unit_tests/command_queue/command_enqueue_fixture.h"
1212
#include "unit_tests/gen_common/gen_cmd_parse.h"
13+
#include "unit_tests/mocks/mock_kernel.h"
1314

1415
using namespace NEO;
1516

@@ -218,3 +219,27 @@ TEST_F(MarkerTest, givenMultipleEventsAndCompletedUserEventWhenTheyArePassedToMa
218219
EXPECT_EQ(16u, pCmdQ->taskCount);
219220
EXPECT_EQ(16u, pEvent->peekTaskCount());
220221
}
222+
223+
HWTEST_F(MarkerTest, givenMarkerCallFollowingNdrangeCallInBatchedModeWhenWaitForEventsIsCalledThenFlushStampIsProperlyUpdated) {
224+
MockKernelWithInternals mockKernel(*this->pDevice, this->context);
225+
226+
auto &ultCommandStreamReceiver = this->pDevice->getUltCommandStreamReceiver<FamilyType>();
227+
228+
ultCommandStreamReceiver.overrideDispatchPolicy(DispatchMode::BatchedDispatch);
229+
230+
cl_event eventFromNdr = nullptr;
231+
size_t gws[] = {1};
232+
pCmdQ->enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, &eventFromNdr);
233+
cl_event eventFromMarker = nullptr;
234+
pCmdQ->enqueueMarkerWithWaitList(1u, &eventFromNdr, &eventFromMarker);
235+
236+
ultCommandStreamReceiver.flushStamp->setStamp(1u);
237+
238+
clEnqueueWaitForEvents(pCmdQ, 1u, &eventFromMarker);
239+
240+
auto neoEvent = castToObject<Event>(eventFromMarker);
241+
EXPECT_EQ(1u, neoEvent->flushStamp->peekStamp());
242+
243+
clReleaseEvent(eventFromMarker);
244+
clReleaseEvent(eventFromNdr);
245+
}

0 commit comments

Comments
 (0)