@@ -105,6 +105,137 @@ HWTEST2_F(CommandListStatePrefetchXeHpcCore, givenDebugFlagSetWhenPrefetchApiCal
105105 context->freeMem (ptr);
106106}
107107
108+ HWTEST2_F (CommandListStatePrefetchXeHpcCore, givenUnifiedSharedMemoryWhenPrefetchApiCalledThenDontSetMemPrefetch, IsXeHpcCore) {
109+ auto pCommandList = std::make_unique<WhiteBox<::L0::CommandListCoreFamily<gfxCoreFamily>>>();
110+ auto result = pCommandList->initialize (device, NEO::EngineGroupType::Compute, 0u );
111+ ASSERT_EQ (ZE_RESULT_SUCCESS, result);
112+
113+ size_t size = 10 ;
114+ size_t alignment = 1u ;
115+ void *ptr = nullptr ;
116+
117+ ze_device_mem_alloc_desc_t deviceDesc = {};
118+ ze_host_mem_alloc_desc_t hostDesc = {};
119+ auto res = context->allocSharedMem (device->toHandle (), &deviceDesc, &hostDesc, size, alignment, &ptr);
120+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
121+ EXPECT_NE (nullptr , ptr);
122+
123+ auto ret = pCommandList->appendMemoryPrefetch (ptr, size);
124+ EXPECT_EQ (ZE_RESULT_SUCCESS, ret);
125+
126+ auto memoryManager = static_cast <MockMemoryManager *>(device->getDriverHandle ()->getMemoryManager ());
127+ EXPECT_FALSE (memoryManager->setMemPrefetchCalled );
128+
129+ context->freeMem (ptr);
130+ }
131+
132+ HWTEST2_F (CommandListStatePrefetchXeHpcCore, givenAppendMemoryPrefetchForKmdMigratedSharedAllocationsWhenPrefetchApiCalledThenDontCallSetMemPrefetchByDefault, IsXeHpcCore) {
133+ DebugManagerStateRestore restore;
134+ DebugManager.flags .AppendMemoryPrefetchForKmdMigratedSharedAllocations .set (1 );
135+
136+ auto pCommandList = std::make_unique<WhiteBox<::L0::CommandListCoreFamily<gfxCoreFamily>>>();
137+ auto result = pCommandList->initialize (device, NEO::EngineGroupType::Compute, 0u );
138+ ASSERT_EQ (ZE_RESULT_SUCCESS, result);
139+
140+ size_t size = 10 ;
141+ size_t alignment = 1u ;
142+ void *ptr = nullptr ;
143+
144+ ze_device_mem_alloc_desc_t deviceDesc = {};
145+ ze_host_mem_alloc_desc_t hostDesc = {};
146+ auto res = context->allocSharedMem (device->toHandle (), &deviceDesc, &hostDesc, size, alignment, &ptr);
147+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
148+ EXPECT_NE (nullptr , ptr);
149+
150+ auto ret = pCommandList->appendMemoryPrefetch (ptr, size);
151+ EXPECT_EQ (ZE_RESULT_SUCCESS, ret);
152+
153+ auto memoryManager = static_cast <MockMemoryManager *>(device->getDriverHandle ()->getMemoryManager ());
154+ EXPECT_FALSE (memoryManager->setMemPrefetchCalled );
155+
156+ context->freeMem (ptr);
157+ }
158+
159+ HWTEST2_F (CommandListStatePrefetchXeHpcCore, givenAppendMemoryPrefetchForKmdMigratedSharedAllocationsSetWhenPrefetchApiCalledOnUnifiedSharedMemoryThenCallSetMemPrefetch, IsXeHpcCore) {
160+ DebugManagerStateRestore restore;
161+ DebugManager.flags .AppendMemoryPrefetchForKmdMigratedSharedAllocations .set (1 );
162+ DebugManager.flags .UseKmdMigration .set (1 );
163+
164+ auto pCommandList = std::make_unique<WhiteBox<::L0::CommandListCoreFamily<gfxCoreFamily>>>();
165+ auto result = pCommandList->initialize (device, NEO::EngineGroupType::Compute, 0u );
166+ ASSERT_EQ (ZE_RESULT_SUCCESS, result);
167+
168+ size_t size = 10 ;
169+ size_t alignment = 1u ;
170+ void *ptr = nullptr ;
171+
172+ ze_device_mem_alloc_desc_t deviceDesc = {};
173+ ze_host_mem_alloc_desc_t hostDesc = {};
174+ auto res = context->allocSharedMem (device->toHandle (), &deviceDesc, &hostDesc, size, alignment, &ptr);
175+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
176+ EXPECT_NE (nullptr , ptr);
177+
178+ auto ret = pCommandList->appendMemoryPrefetch (ptr, size);
179+ EXPECT_EQ (ZE_RESULT_SUCCESS, ret);
180+
181+ auto memoryManager = static_cast <MockMemoryManager *>(device->getDriverHandle ()->getMemoryManager ());
182+ EXPECT_TRUE (memoryManager->setMemPrefetchCalled );
183+
184+ context->freeMem (ptr);
185+ }
186+
187+ HWTEST2_F (CommandListStatePrefetchXeHpcCore, givenAppendMemoryPrefetchForKmdMigratedSharedAllocationsSetWhenPrefetchApiCalledOnUnifiedDeviceMemoryThenDontCallSetMemPrefetch, IsXeHpcCore) {
188+ DebugManagerStateRestore restore;
189+ DebugManager.flags .AppendMemoryPrefetchForKmdMigratedSharedAllocations .set (1 );
190+ DebugManager.flags .UseKmdMigration .set (1 );
191+
192+ auto pCommandList = std::make_unique<WhiteBox<::L0::CommandListCoreFamily<gfxCoreFamily>>>();
193+ auto result = pCommandList->initialize (device, NEO::EngineGroupType::Compute, 0u );
194+ ASSERT_EQ (ZE_RESULT_SUCCESS, result);
195+
196+ size_t size = 10 ;
197+ size_t alignment = 1u ;
198+ void *ptr = nullptr ;
199+
200+ ze_device_mem_alloc_desc_t deviceDesc = {};
201+ context->allocDeviceMem (device->toHandle (), &deviceDesc, size, alignment, &ptr);
202+ EXPECT_NE (nullptr , ptr);
203+
204+ auto ret = pCommandList->appendMemoryPrefetch (ptr, size);
205+ EXPECT_EQ (ZE_RESULT_SUCCESS, ret);
206+
207+ auto memoryManager = static_cast <MockMemoryManager *>(device->getDriverHandle ()->getMemoryManager ());
208+ EXPECT_FALSE (memoryManager->setMemPrefetchCalled );
209+
210+ context->freeMem (ptr);
211+ }
212+
213+ HWTEST2_F (CommandListStatePrefetchXeHpcCore, givenAppendMemoryPrefetchForKmdMigratedSharedAllocationsSetWhenPrefetchApiCalledOnUnifiedHostMemoryThenDontCallSetMemPrefetch, IsXeHpcCore) {
214+ DebugManagerStateRestore restore;
215+ DebugManager.flags .AppendMemoryPrefetchForKmdMigratedSharedAllocations .set (1 );
216+ DebugManager.flags .UseKmdMigration .set (1 );
217+
218+ auto pCommandList = std::make_unique<WhiteBox<::L0::CommandListCoreFamily<gfxCoreFamily>>>();
219+ auto result = pCommandList->initialize (device, NEO::EngineGroupType::Compute, 0u );
220+ ASSERT_EQ (ZE_RESULT_SUCCESS, result);
221+
222+ size_t size = 10 ;
223+ size_t alignment = 1u ;
224+ void *ptr = nullptr ;
225+
226+ ze_host_mem_alloc_desc_t hostDesc = {};
227+ context->allocHostMem (&hostDesc, size, alignment, &ptr);
228+ EXPECT_NE (nullptr , ptr);
229+
230+ auto ret = pCommandList->appendMemoryPrefetch (ptr, size);
231+ EXPECT_EQ (ZE_RESULT_SUCCESS, ret);
232+
233+ auto memoryManager = static_cast <MockMemoryManager *>(device->getDriverHandle ()->getMemoryManager ());
234+ EXPECT_FALSE (memoryManager->setMemPrefetchCalled );
235+
236+ context->freeMem (ptr);
237+ }
238+
108239HWTEST2_F (CommandListStatePrefetchXeHpcCore, givenCommandBufferIsExhaustedWhenPrefetchApiCalledThenProgramStatePrefetch, IsXeHpcCore) {
109240 using STATE_PREFETCH = typename FamilyType::STATE_PREFETCH;
110241 using MI_BATCH_BUFFER_END = typename FamilyType::MI_BATCH_BUFFER_END;
0 commit comments