@@ -85,7 +85,7 @@ TEST(ExecutionEnvironment, givenPlatformWhenItIsCreatedThenItCreatesCommandStrea
8585 Platform platform;
8686 auto executionEnvironment = platform.peekExecutionEnvironment ();
8787 platform.initialize ();
88- EXPECT_NE (nullptr , executionEnvironment->commandStreamReceiver );
88+ EXPECT_NE (nullptr , executionEnvironment->commandStreamReceivers [ 0u ]. get () );
8989}
9090
9191TEST (ExecutionEnvironment, givenPlatformWhenItIsCreatedThenItCreatesMemoryManagerInExecutionEnvironment) {
@@ -105,18 +105,42 @@ TEST(ExecutionEnvironment, givenDeviceWhenItIsDestroyedThenMemoryManagerIsStillA
105105
106106TEST (ExecutionEnvironment, givenExecutionEnvironmentWhenInitializeCommandStreamReceiverIsCalledThenItIsInitalized) {
107107 std::unique_ptr<ExecutionEnvironment> executionEnvironment (new ExecutionEnvironment);
108- executionEnvironment->initializeCommandStreamReceiver (platformDevices[0 ]);
109- EXPECT_NE (nullptr , executionEnvironment->commandStreamReceiver );
108+ executionEnvironment->initializeCommandStreamReceiver (platformDevices[0 ], 0u );
109+ EXPECT_NE (nullptr , executionEnvironment->commandStreamReceivers [ 0u ] );
110110}
111111
112- TEST (ExecutionEnvironment, givenExecutionEnvironmentWhenInitializeMemoryManagerIsCalledThenItIsInitalized ) {
112+ TEST (ExecutionEnvironment, givenExecutionEnvironmentWhenInitializeIsCalledWithDifferentDeviceIndexesThenInternalStorageIsResized ) {
113113 std::unique_ptr<ExecutionEnvironment> executionEnvironment (new ExecutionEnvironment);
114- executionEnvironment->initializeCommandStreamReceiver (platformDevices[0 ]);
115- executionEnvironment->initializeMemoryManager (false , false );
116- EXPECT_NE (nullptr , executionEnvironment->memoryManager );
114+ EXPECT_EQ (0u , executionEnvironment->commandStreamReceivers .size ());
115+ executionEnvironment->initializeCommandStreamReceiver (platformDevices[0 ], 0u );
116+ EXPECT_EQ (1u , executionEnvironment->commandStreamReceivers .size ());
117+ EXPECT_NE (nullptr , executionEnvironment->commandStreamReceivers [0u ]);
118+ executionEnvironment->initializeCommandStreamReceiver (platformDevices[0 ], 1u );
119+ EXPECT_EQ (2u , executionEnvironment->commandStreamReceivers .size ());
120+ EXPECT_NE (nullptr , executionEnvironment->commandStreamReceivers [1u ]);
121+ }
122+
123+ TEST (ExecutionEnvironment, givenExecutionEnvironmentWhenInitializeIsCalledMultipleTimesForTheSameIndexThenCommandStreamReceiverIsReused) {
124+ auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
125+ EXPECT_EQ (0u , executionEnvironment->commandStreamReceivers .size ());
126+ executionEnvironment->initializeCommandStreamReceiver (platformDevices[0 ], 1u );
127+
128+ auto currentCommandStreamReceiver = executionEnvironment->commandStreamReceivers [1u ].get ();
129+
130+ executionEnvironment->initializeCommandStreamReceiver (platformDevices[0 ], 1u );
131+
132+ EXPECT_EQ (currentCommandStreamReceiver, executionEnvironment->commandStreamReceivers [1u ].get ());
133+ EXPECT_EQ (2u , executionEnvironment->commandStreamReceivers .size ());
134+ EXPECT_EQ (nullptr , executionEnvironment->commandStreamReceivers [0u ].get ());
117135}
118136
119- static_assert (sizeof (ExecutionEnvironment) == sizeof (std::mutex) + (is64bit ? 80 : 44 ), " New members detected in ExecutionEnvironment, please ensure that destruction sequence of objects is correct" );
137+ TEST (ExecutionEnvironment, givenExecutionEnvironmentWhenInitializeMemoryManagerIsCalledThenItIsInitalized) {
138+ auto executionEnvironment = std::make_unique<ExecutionEnvironment>();
139+ executionEnvironment->initializeCommandStreamReceiver (platformDevices[0 ], 0u );
140+ executionEnvironment->initializeMemoryManager (false , false , 0u );
141+ EXPECT_NE (nullptr , executionEnvironment->memoryManager );
142+ }
143+ static_assert (sizeof (ExecutionEnvironment) == sizeof (std::vector<std::unique_ptr<CommandStreamReceiver>>) + sizeof (std::mutex) + (is64bit ? 72 : 40 ), " New members detected in ExecutionEnvironment, please ensure that destruction sequence of objects is correct" );
120144
121145TEST (ExecutionEnvironment, givenExecutionEnvironmentWithVariousMembersWhenItIsDestroyedThenDeleteSequenceIsSpecified) {
122146 uint32_t destructorId = 0u ;
@@ -150,7 +174,7 @@ TEST(ExecutionEnvironment, givenExecutionEnvironmentWithVariousMembersWhenItIsDe
150174 executionEnvironment->gmmHelper = std::make_unique<GmmHelperMock>(destructorId, platformDevices[0 ]);
151175 executionEnvironment->osInterface = std::make_unique<OsInterfaceMock>(destructorId);
152176 executionEnvironment->memoryManager = std::make_unique<MemoryMangerMock>(destructorId);
153- executionEnvironment->commandStreamReceiver = std::make_unique<CommandStreamReceiverMock>(destructorId);
177+ executionEnvironment->commandStreamReceivers . push_back ( std::make_unique<CommandStreamReceiverMock>(destructorId) );
154178 executionEnvironment->builtins = std::make_unique<BuiltinsMock>(destructorId);
155179 executionEnvironment->compilerInterface = std::make_unique<CompilerInterfaceMock>(destructorId);
156180 executionEnvironment->sourceLevelDebugger = std::make_unique<SourceLevelDebuggerMock>(destructorId);
@@ -166,7 +190,7 @@ TEST(ExecutionEnvironment, givenMultipleDevicesWhenTheyAreCreatedTheyAllReuseThe
166190 auto memoryManager = device->getMemoryManager ();
167191
168192 std::unique_ptr<Device> device2 (Device::create<OCLRT::Device>(nullptr , executionEnvironment, 1u ));
169- EXPECT_EQ (&commandStreamReceiver, &device ->getCommandStreamReceiver ());
193+ EXPECT_NE (&commandStreamReceiver, &device2 ->getCommandStreamReceiver ());
170194 EXPECT_EQ (memoryManager, device2->getMemoryManager ());
171195}
172196
@@ -176,8 +200,8 @@ HWTEST_F(ExecutionEnvironmentHw, givenExecutionEnvironmentWhenCommandStreamRecei
176200 ExecutionEnvironment executionEnvironment;
177201 HardwareInfo localHwInfo = *platformDevices[0 ];
178202 localHwInfo.capabilityTable .ftrRenderCompressedBuffers = true ;
179- executionEnvironment.initializeCommandStreamReceiver (&localHwInfo);
180- auto csr = static_cast <UltCommandStreamReceiver<FamilyType> *>(executionEnvironment.commandStreamReceiver .get ());
203+ executionEnvironment.initializeCommandStreamReceiver (&localHwInfo, 0u );
204+ auto csr = static_cast <UltCommandStreamReceiver<FamilyType> *>(executionEnvironment.commandStreamReceivers [ 0u ] .get ());
181205 ASSERT_NE (nullptr , csr);
182206 EXPECT_TRUE (csr->createPageTableManagerCalled );
183207}
@@ -186,9 +210,9 @@ HWTEST_F(ExecutionEnvironmentHw, givenExecutionEnvironmentWhenCommandStreamRecei
186210 ExecutionEnvironment executionEnvironment;
187211 HardwareInfo localHwInfo = *platformDevices[0 ];
188212 localHwInfo.capabilityTable .ftrRenderCompressedImages = true ;
189- executionEnvironment.initializeCommandStreamReceiver (&localHwInfo);
190- EXPECT_NE (nullptr , executionEnvironment.commandStreamReceiver );
191- auto csr = static_cast <UltCommandStreamReceiver<FamilyType> *>(executionEnvironment.commandStreamReceiver .get ());
213+ executionEnvironment.initializeCommandStreamReceiver (&localHwInfo, 0u );
214+ EXPECT_NE (nullptr , executionEnvironment.commandStreamReceivers [ 0 ] );
215+ auto csr = static_cast <UltCommandStreamReceiver<FamilyType> *>(executionEnvironment.commandStreamReceivers [ 0u ] .get ());
192216 ASSERT_NE (nullptr , csr);
193217 EXPECT_TRUE (csr->createPageTableManagerCalled );
194218}
0 commit comments