diff --git a/runtime/helpers/csr_deps.cpp b/runtime/helpers/csr_deps.cpp index 9fb5141d9b..350f27fd35 100644 --- a/runtime/helpers/csr_deps.cpp +++ b/runtime/helpers/csr_deps.cpp @@ -29,8 +29,11 @@ void CsrDependencies::fillFromEventsRequestAndMakeResident(const EventsRequest & timestampPacketContainer->makeResident(currentCsr); auto sameCsr = (&event->getCommandQueue()->getCommandStreamReceiver() == ¤tCsr); + bool pushDependency = (DependenciesType::OnCsr == depsType && sameCsr) || + (DependenciesType::OutOfCsr == depsType && !sameCsr) || + (DependenciesType::All == depsType); - if (depsType == (sameCsr ? DependenciesType::OnCsr : DependenciesType::OutOfCsr)) { + if (pushDependency) { this->push_back(timestampPacketContainer); } } diff --git a/runtime/helpers/csr_deps.h b/runtime/helpers/csr_deps.h index 81215b7935..d0355823f1 100644 --- a/runtime/helpers/csr_deps.h +++ b/runtime/helpers/csr_deps.h @@ -18,7 +18,8 @@ class CsrDependencies : public StackVec { public: enum class DependenciesType { OnCsr, - OutOfCsr + OutOfCsr, + All }; void fillFromEventsRequestAndMakeResident(const EventsRequest &eventsRequest, diff --git a/unit_tests/helpers/timestamp_packet_tests.cpp b/unit_tests/helpers/timestamp_packet_tests.cpp index 11d394a779..2986df4587 100644 --- a/unit_tests/helpers/timestamp_packet_tests.cpp +++ b/unit_tests/helpers/timestamp_packet_tests.cpp @@ -636,6 +636,36 @@ HWTEST_F(TimestampPacketTests, givenTimestampPacketWriteEnabledWhenEnqueueingThe } } +HWTEST_F(TimestampPacketTests, givenAllDependencyTypesModeWhenFillingFromDifferentCsrsThenPushEverything) { + auto device2 = std::unique_ptr(Device::create(executionEnvironment, 1u)); + + auto &csr1 = device->getUltCommandStreamReceiver(); + auto &csr2 = device2->getUltCommandStreamReceiver(); + csr1.timestampPacketWriteEnabled = true; + csr2.timestampPacketWriteEnabled = true; + + MockContext context2(device2.get()); + + auto cmdQ1 = std::make_unique>(context, device.get(), nullptr); + auto cmdQ2 = std::make_unique>(&context2, device2.get(), nullptr); + + const cl_uint eventsOnWaitlist = 2; + MockTimestampPacketContainer timestamp1(*csr1.getTimestampPacketAllocator(), 1); + MockTimestampPacketContainer timestamp2(*csr2.getTimestampPacketAllocator(), 1); + + Event event1(cmdQ1.get(), 0, 0, 0); + event1.addTimestampPacketNodes(timestamp1); + Event event2(cmdQ2.get(), 0, 0, 0); + event2.addTimestampPacketNodes(timestamp2); + + cl_event waitlist[] = {&event1, &event2}; + EventsRequest eventsRequest(eventsOnWaitlist, waitlist, nullptr); + + CsrDependencies csrDependencies; + csrDependencies.fillFromEventsRequestAndMakeResident(eventsRequest, csr1, CsrDependencies::DependenciesType::All); + EXPECT_EQ(static_cast(eventsOnWaitlist), csrDependencies.size()); +} + HWTEST_F(TimestampPacketTests, givenTimestampPacketWriteEnabledOnDifferentCSRsFromOneDeviceWhenEnqueueingThenProgramSemaphoresOnCsrStream) { using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT; using MI_ATOMIC = typename FamilyType::MI_ATOMIC;