@@ -72,13 +72,13 @@ TEST(SubmissionsAggregator, givenTwoCommandBuffersWhenMergeResourcesIsCalledThen
7272 size_t totalMemoryBudget = -1 ;
7373 ResourcePackage resourcePackage;
7474
75- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
75+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
7676
7777 EXPECT_EQ (0u , totalUsedSize);
7878
7979 submissionsAggregator.recordCommandBuffer (cmdBuffer);
8080
81- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
81+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
8282
8383 EXPECT_EQ (15u , totalUsedSize);
8484 totalUsedSize = 0 ;
@@ -92,7 +92,7 @@ TEST(SubmissionsAggregator, givenTwoCommandBuffersWhenMergeResourcesIsCalledThen
9292 EXPECT_EQ (5u , cmdBuffer->surfaces .size ());
9393 EXPECT_EQ (4u , cmdBuffer2->surfaces .size ());
9494
95- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
95+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
9696
9797 // command buffer 2 is aggregated to command buffer 1
9898 auto primaryBatchInstepctionId = submissionsAggregator.peekCommandBuffersList ().peekHead ()->inspectionId ;
@@ -153,7 +153,7 @@ TEST(SubmissionsAggregator, givenSubmissionAggregatorWhenThreeCommandBuffersAreS
153153 EXPECT_EQ (4u , cmdBuffer2->surfaces .size ());
154154 EXPECT_EQ (2u , cmdBuffer3->surfaces .size ());
155155
156- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
156+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
157157
158158 // command buffer 3 and 2 is aggregated to command buffer 1
159159 auto primaryBatchInstepctionId = submissionsAggregator.peekCommandBuffersList ().peekHead ()->inspectionId ;
@@ -207,7 +207,7 @@ TEST(SubmissionsAggregator, givenMultipleCommandBuffersWhenTheyAreAggreagateWith
207207 submissionsAggregator.recordCommandBuffer (cmdBuffer2);
208208 submissionsAggregator.recordCommandBuffer (cmdBuffer3);
209209
210- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
210+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
211211
212212 // command buffer 2 is aggregated to command buffer 1, comand buffer 3 becomes command buffer 2
213213 EXPECT_EQ (submissionsAggregator.peekCommandBuffersList ().peekHead (), cmdBuffer);
@@ -263,7 +263,7 @@ TEST(SubmissionsAggregator, givenMultipleCommandBuffersWhenAggregateIsCalledMult
263263 submissionsAggregator.recordCommandBuffer (cmdBuffer2);
264264 submissionsAggregator.recordCommandBuffer (cmdBuffer3);
265265
266- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
266+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
267267
268268 // command buffers not aggregated due to too low limit
269269 EXPECT_EQ (submissionsAggregator.peekCommandBuffersList ().peekHead (), cmdBuffer);
@@ -275,7 +275,7 @@ TEST(SubmissionsAggregator, givenMultipleCommandBuffersWhenAggregateIsCalledMult
275275 resourcePackage.clear ();
276276 totalUsedSize = 0 ;
277277
278- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
278+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
279279 // all cmd buffers are merged to 1
280280 EXPECT_EQ (cmdBuffer3->inspectionId , cmdBuffer2->inspectionId );
281281 EXPECT_EQ (cmdBuffer->inspectionId , cmdBuffer2->inspectionId );
@@ -313,7 +313,7 @@ TEST(SubmissionsAggregator, givenMultipleCommandBuffersWithDifferentGraphicsAllo
313313 submissionsAggregator.recordCommandBuffer (cmdBuffer);
314314 submissionsAggregator.recordCommandBuffer (cmdBuffer2);
315315
316- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
316+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
317317
318318 EXPECT_EQ (4u , resourcePackage.size ());
319319 EXPECT_EQ (15u , totalUsedSize);
@@ -347,7 +347,7 @@ TEST(SubmissionsAggregator, givenTwoCommandBufferWhereSecondContainsFirstOnResou
347347 submissionsAggregator.recordCommandBuffer (cmdBuffer);
348348 submissionsAggregator.recordCommandBuffer (cmdBuffer2);
349349
350- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
350+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
351351
352352 // resource pack shuold have 3 surfaces
353353 EXPECT_EQ (3u , resourcePackage.size ());
@@ -379,7 +379,7 @@ TEST(SubmissionsAggregator, givenTwoCommandBufferWhereSecondContainsTheFirstComm
379379 submissionsAggregator.recordCommandBuffer (cmdBuffer);
380380 submissionsAggregator.recordCommandBuffer (cmdBuffer2);
381381
382- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
382+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
383383
384384 // resource pack shuold have 3 surfaces
385385 EXPECT_EQ (2u , resourcePackage.size ());
@@ -408,7 +408,7 @@ TEST(SubmissionsAggregator, givenCommandBuffersRequiringDifferentCoherencySettin
408408 ResourcePackage resourcePackage;
409409 size_t totalUsedSize = 0 ;
410410 size_t totalMemoryBudget = 200 ;
411- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
411+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
412412 EXPECT_EQ (1u , totalUsedSize);
413413 EXPECT_EQ (1u , resourcePackage.size ());
414414 EXPECT_NE (cmdBuffer->inspectionId , cmdBuffer2->inspectionId );
@@ -437,7 +437,7 @@ TEST(SubmissionsAggregator, givenCommandBuffersRequiringDifferentThrottleSetting
437437 ResourcePackage resourcePackage;
438438 size_t totalUsedSize = 0 ;
439439 size_t totalMemoryBudget = 200 ;
440- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
440+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
441441 EXPECT_EQ (1u , totalUsedSize);
442442 EXPECT_EQ (1u , resourcePackage.size ());
443443 EXPECT_NE (cmdBuffer->inspectionId , cmdBuffer2->inspectionId );
@@ -466,7 +466,7 @@ TEST(SubmissionsAggregator, givenCommandBuffersRequiringDifferentPrioritySetting
466466 ResourcePackage resourcePackage;
467467 size_t totalUsedSize = 0 ;
468468 size_t totalMemoryBudget = 200 ;
469- submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget);
469+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 0u );
470470 EXPECT_EQ (1u , totalUsedSize);
471471 EXPECT_EQ (1u , resourcePackage.size ());
472472 EXPECT_NE (cmdBuffer->inspectionId , cmdBuffer2->inspectionId );
@@ -479,14 +479,72 @@ TEST(SubmissionsAggregator, dontAllocateFlushStamp) {
479479 EXPECT_EQ (nullptr , cmdBuffer.flushStamp ->getStampReference ());
480480}
481481
482+ TEST (SubmissionsAggregator, givenMultipleOsContextsWhenAggregatingGraphicsAllocationsThenUseInspectionIdCorrespondingWithOsContextId) {
483+ SubmissionAggregator submissionsAggregator;
484+ ResourcePackage resourcePackage;
485+ const auto totalMemoryBudget = 3u ;
486+ size_t totalUsedSize = 0 ;
487+ std::unique_ptr<Device> device (MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr ));
488+ CommandBuffer *cmdBuffer0 = new CommandBuffer (*device);
489+ CommandBuffer *cmdBuffer1 = new CommandBuffer (*device);
490+
491+ MockGraphicsAllocation alloc0 (nullptr , 1 );
492+ MockGraphicsAllocation alloc1 (nullptr , 1 );
493+ MockGraphicsAllocation alloc2 (nullptr , 1 );
494+ MockGraphicsAllocation alloc3 (nullptr , 1 );
495+
496+ cmdBuffer0->surfaces .push_back (&alloc0);
497+ cmdBuffer0->surfaces .push_back (&alloc1);
498+ cmdBuffer1->surfaces .push_back (&alloc2);
499+ cmdBuffer1->surfaces .push_back (&alloc3);
500+
501+ submissionsAggregator.recordCommandBuffer (cmdBuffer0);
502+ submissionsAggregator.recordCommandBuffer (cmdBuffer1);
503+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 3u );
504+ EXPECT_EQ (1u , alloc0.getInspectionId (3u ));
505+ EXPECT_EQ (1u , alloc1.getInspectionId (3u ));
506+ EXPECT_EQ (1u , alloc2.getInspectionId (3u ));
507+ EXPECT_EQ (1u , alloc3.getInspectionId (3u ));
508+ }
509+
510+ TEST (SubmissionsAggregator, givenMultipleOsContextsWhenAggregatingGraphicsAllocationsThenDoNotUpdateInspectionIdsOfOtherContexts) {
511+ SubmissionAggregator submissionsAggregator;
512+ ResourcePackage resourcePackage;
513+ const auto totalMemoryBudget = 2u ;
514+ size_t totalUsedSize = 0 ;
515+ std::unique_ptr<Device> device (MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr ));
516+ CommandBuffer *cmdBuffer0 = new CommandBuffer (*device);
517+ CommandBuffer *cmdBuffer1 = new CommandBuffer (*device);
518+
519+ MockGraphicsAllocation alloc0 (nullptr , 1 );
520+ MockGraphicsAllocation alloc1 (nullptr , 1 );
521+
522+ cmdBuffer0->surfaces .push_back (&alloc0);
523+ cmdBuffer0->surfaces .push_back (&alloc1);
524+
525+ submissionsAggregator.recordCommandBuffer (cmdBuffer0);
526+ submissionsAggregator.recordCommandBuffer (cmdBuffer1);
527+ submissionsAggregator.aggregateCommandBuffers (resourcePackage, totalUsedSize, totalMemoryBudget, 3u );
528+
529+ for (auto osContextId = 0u ; osContextId < alloc1.usageInfos .size (); osContextId++) {
530+ if (osContextId != 3u ) {
531+ EXPECT_EQ (0u , alloc0.getInspectionId (osContextId));
532+ }
533+ }
534+ for (auto osContextId = 0u ; osContextId < alloc0.usageInfos .size (); osContextId++) {
535+ if (osContextId != 3u ) {
536+ EXPECT_EQ (0u , alloc0.getInspectionId (osContextId));
537+ }
538+ }
539+ }
540+
482541struct SubmissionsAggregatorTests : public ::testing::Test {
483542 void SetUp () override {
484543 device.reset (MockDevice::createWithNewExecutionEnvironment<MockDevice>(platformDevices[0 ]));
485544 context.reset (new MockContext (device.get ()));
486545 }
487546
488- template <typename T>
489- void overrideCsr (T *newCsr) {
547+ void overrideCsr (CommandStreamReceiver *newCsr) {
490548 device->resetCommandStreamReceiver (newCsr);
491549 newCsr->overrideDispatchPolicy (DispatchMode::BatchedDispatch);
492550 }
0 commit comments