Allow to push all dependency types to CsrDependencies helper

Change-Id: I0ef5dd0f77ade7f02a03c787618d55a4fcfba17c
Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
Related-To: NEO-3020
This commit is contained in:
Dunajski, Bartosz
2019-06-12 11:07:37 +02:00
committed by sys_ocldev
parent 875c9b7dcc
commit cf78aab248
3 changed files with 36 additions and 2 deletions

View File

@@ -29,8 +29,11 @@ void CsrDependencies::fillFromEventsRequestAndMakeResident(const EventsRequest &
timestampPacketContainer->makeResident(currentCsr);
auto sameCsr = (&event->getCommandQueue()->getCommandStreamReceiver() == &currentCsr);
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);
}
}

View File

@@ -18,7 +18,8 @@ class CsrDependencies : public StackVec<TimestampPacketContainer *, 32> {
public:
enum class DependenciesType {
OnCsr,
OutOfCsr
OutOfCsr,
All
};
void fillFromEventsRequestAndMakeResident(const EventsRequest &eventsRequest,

View File

@@ -636,6 +636,36 @@ HWTEST_F(TimestampPacketTests, givenTimestampPacketWriteEnabledWhenEnqueueingThe
}
}
HWTEST_F(TimestampPacketTests, givenAllDependencyTypesModeWhenFillingFromDifferentCsrsThenPushEverything) {
auto device2 = std::unique_ptr<MockDevice>(Device::create<MockDevice>(executionEnvironment, 1u));
auto &csr1 = device->getUltCommandStreamReceiver<FamilyType>();
auto &csr2 = device2->getUltCommandStreamReceiver<FamilyType>();
csr1.timestampPacketWriteEnabled = true;
csr2.timestampPacketWriteEnabled = true;
MockContext context2(device2.get());
auto cmdQ1 = std::make_unique<MockCommandQueueHw<FamilyType>>(context, device.get(), nullptr);
auto cmdQ2 = std::make_unique<MockCommandQueueHw<FamilyType>>(&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<size_t>(eventsOnWaitlist), csrDependencies.size());
}
HWTEST_F(TimestampPacketTests, givenTimestampPacketWriteEnabledOnDifferentCSRsFromOneDeviceWhenEnqueueingThenProgramSemaphoresOnCsrStream) {
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
using MI_ATOMIC = typename FamilyType::MI_ATOMIC;