|
16 | 16 |
|
17 | 17 | #include "opencl/source/command_queue/command_queue_hw.h" |
18 | 18 | #include "opencl/source/event/event.h" |
| 19 | +#include "opencl/source/event/user_event.h" |
19 | 20 | #include "opencl/source/helpers/hardware_commands_helper.h" |
20 | 21 | #include "opencl/test/unit_test/command_queue/command_queue_fixture.h" |
21 | 22 | #include "opencl/test/unit_test/command_stream/command_stream_fixture.h" |
22 | 23 | #include "opencl/test/unit_test/fixtures/buffer_fixture.h" |
23 | 24 | #include "opencl/test/unit_test/fixtures/cl_device_fixture.h" |
24 | 25 | #include "opencl/test/unit_test/fixtures/context_fixture.h" |
| 26 | +#include "opencl/test/unit_test/fixtures/dispatch_flags_fixture.h" |
25 | 27 | #include "opencl/test/unit_test/fixtures/image_fixture.h" |
26 | 28 | #include "opencl/test/unit_test/fixtures/memory_management_fixture.h" |
27 | 29 | #include "opencl/test/unit_test/helpers/unit_test_helper.h" |
@@ -1212,3 +1214,62 @@ TEST(CommandQueue, givenCopySizeAndOffsetWhenCallingBlitEnqueueImageAllowedThenR |
1212 | 1214 | EXPECT_EQ(expectedResult, queue.blitEnqueueImageAllowed(origin, region)); |
1213 | 1215 | } |
1214 | 1216 | } |
| 1217 | + |
| 1218 | +using KernelExecutionTypesTests = DispatchFlagsTests; |
| 1219 | +HWTEST_F(KernelExecutionTypesTests, givenConcurrentKernelWhileDoingNonBlockedEnqueueThenCorrectKernelTypeIsSetInCSR) { |
| 1220 | + using CsrType = MockCsrHw2<FamilyType>; |
| 1221 | + SetUpImpl<CsrType>(); |
| 1222 | + auto mockCmdQ = std::make_unique<MockCommandQueueHw<FamilyType>>(context.get(), device.get(), nullptr); |
| 1223 | + MockKernelWithInternals mockKernelWithInternals(*device.get()); |
| 1224 | + auto pKernel = mockKernelWithInternals.mockKernel; |
| 1225 | + |
| 1226 | + pKernel->setKernelExecutionType(CL_KERNEL_EXEC_INFO_CONCURRENT_TYPE_INTEL); |
| 1227 | + size_t gws[3] = {63, 0, 0}; |
| 1228 | + |
| 1229 | + mockCmdQ->enqueueKernel(pKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr); |
| 1230 | + |
| 1231 | + auto &mockCsr = device->getUltCommandStreamReceiver<FamilyType>(); |
| 1232 | + EXPECT_EQ(mockCsr.lastKernelExecutionType, KernelExecutionType::Concurrent); |
| 1233 | +} |
| 1234 | + |
| 1235 | +HWTEST_F(KernelExecutionTypesTests, givenKernelWithDifferentExecutionTypeWhileDoingNonBlockedEnqueueThenKernelTypeInCSRIsChanging) { |
| 1236 | + using CsrType = MockCsrHw2<FamilyType>; |
| 1237 | + SetUpImpl<CsrType>(); |
| 1238 | + auto mockCmdQ = std::make_unique<MockCommandQueueHw<FamilyType>>(context.get(), device.get(), nullptr); |
| 1239 | + MockKernelWithInternals mockKernelWithInternals(*device.get()); |
| 1240 | + auto pKernel = mockKernelWithInternals.mockKernel; |
| 1241 | + size_t gws[3] = {63, 0, 0}; |
| 1242 | + auto &mockCsr = device->getUltCommandStreamReceiver<FamilyType>(); |
| 1243 | + |
| 1244 | + pKernel->setKernelExecutionType(CL_KERNEL_EXEC_INFO_CONCURRENT_TYPE_INTEL); |
| 1245 | + mockCmdQ->enqueueKernel(pKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr); |
| 1246 | + EXPECT_EQ(mockCsr.lastKernelExecutionType, KernelExecutionType::Concurrent); |
| 1247 | + |
| 1248 | + mockCmdQ->enqueueMarkerWithWaitList(0, nullptr, nullptr); |
| 1249 | + EXPECT_EQ(mockCsr.lastKernelExecutionType, KernelExecutionType::Concurrent); |
| 1250 | + |
| 1251 | + pKernel->setKernelExecutionType(CL_KERNEL_EXEC_INFO_DEFAULT_TYPE_INTEL); |
| 1252 | + mockCmdQ->enqueueKernel(pKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr); |
| 1253 | + |
| 1254 | + EXPECT_EQ(mockCsr.lastKernelExecutionType, KernelExecutionType::Default); |
| 1255 | +} |
| 1256 | + |
| 1257 | +HWTEST_F(KernelExecutionTypesTests, givenConcurrentKernelWhileDoingBlockedEnqueueThenCorrectKernelTypeIsSetInCSR) { |
| 1258 | + using CsrType = MockCsrHw2<FamilyType>; |
| 1259 | + SetUpImpl<CsrType>(); |
| 1260 | + auto mockCmdQ = std::make_unique<MockCommandQueueHw<FamilyType>>(context.get(), device.get(), nullptr); |
| 1261 | + MockKernelWithInternals mockKernelWithInternals(*device.get()); |
| 1262 | + auto pKernel = mockKernelWithInternals.mockKernel; |
| 1263 | + |
| 1264 | + pKernel->setKernelExecutionType(CL_KERNEL_EXEC_INFO_CONCURRENT_TYPE_INTEL); |
| 1265 | + UserEvent userEvent; |
| 1266 | + cl_event waitlist[] = {&userEvent}; |
| 1267 | + size_t gws[3] = {63, 0, 0}; |
| 1268 | + |
| 1269 | + mockCmdQ->enqueueKernel(pKernel, 1, nullptr, gws, nullptr, 1, waitlist, nullptr); |
| 1270 | + userEvent.setStatus(CL_COMPLETE); |
| 1271 | + |
| 1272 | + auto &mockCsr = device->getUltCommandStreamReceiver<FamilyType>(); |
| 1273 | + EXPECT_EQ(mockCsr.lastKernelExecutionType, KernelExecutionType::Concurrent); |
| 1274 | + mockCmdQ->isQueueBlocked(); |
| 1275 | +} |
0 commit comments