Skip to content

Commit 6c40c71

Browse files
Check workDim when enqueueing kernel
Return CL_INVALID_WORK_DIMENSION when workDim is more than maxWorkItemDimensions. Related-To: NEO-6159 Signed-off-by: Dominik Dabek <dominik.dabek@intel.com>
1 parent 5774f68 commit 6c40c71

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

opencl/source/command_queue/enqueue_kernel.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ cl_int CommandQueueHw<GfxFamily>::enqueueKernel(
3131
const cl_event *eventWaitList,
3232
cl_event *event) {
3333

34+
if (workDim > device->getDeviceInfo().maxWorkItemDimensions) {
35+
return CL_INVALID_WORK_DIMENSION;
36+
}
37+
3438
size_t region[3] = {1, 1, 1};
3539
size_t globalWorkOffset[3] = {0, 0, 0};
3640
size_t workGroupSize[3] = {1, 1, 1};

opencl/test/unit_test/command_queue/enqueue_kernel_1_tests.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,6 +1427,19 @@ TEST_F(EnqueueKernelTest, givenEnqueueCommandThatLocalWorkgroupSizeContainsZeroW
14271427
EXPECT_EQ(CL_INVALID_WORK_GROUP_SIZE, status);
14281428
}
14291429

1430+
TEST_F(EnqueueKernelTest, givenEnqueueCommandWithWorkDimLargerThanAllowedWhenEnqueueNDRangeKernelIsCalledThenClInvalidWorkDimensionIsReturned) {
1431+
size_t globalWorkSize[3] = {1, 1, 1};
1432+
size_t localWorkSize[3] = {1, 1, 1};
1433+
MockKernelWithInternals mockKernel(*pClDevice);
1434+
auto testedWorkDim = pClDevice->deviceInfo.maxWorkItemDimensions;
1435+
auto status = clEnqueueNDRangeKernel(pCmdQ, mockKernel.mockMultiDeviceKernel, testedWorkDim, nullptr, globalWorkSize, localWorkSize, 0, nullptr, nullptr);
1436+
ASSERT_EQ(CL_SUCCESS, status);
1437+
1438+
testedWorkDim += 1;
1439+
status = clEnqueueNDRangeKernel(pCmdQ, mockKernel.mockMultiDeviceKernel, testedWorkDim, nullptr, globalWorkSize, localWorkSize, 0, nullptr, nullptr);
1440+
EXPECT_EQ(CL_INVALID_WORK_DIMENSION, status);
1441+
}
1442+
14301443
HWTEST_F(EnqueueKernelTest, givenVMEKernelWhenEnqueueKernelThenDispatchFlagsHaveMediaSamplerRequired) {
14311444
auto mockCsr = new MockCsrHw2<FamilyType>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield());
14321445
mockCsr->overrideDispatchPolicy(DispatchMode::BatchedDispatch);

0 commit comments

Comments
 (0)