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>
This commit is contained in:
Dominik Dabek
2021-12-31 14:01:23 +00:00
committed by Compute-Runtime-Automation
parent 5774f68d8b
commit 6c40c712d8
2 changed files with 17 additions and 0 deletions

View File

@ -31,6 +31,10 @@ cl_int CommandQueueHw<GfxFamily>::enqueueKernel(
const cl_event *eventWaitList,
cl_event *event) {
if (workDim > device->getDeviceInfo().maxWorkItemDimensions) {
return CL_INVALID_WORK_DIMENSION;
}
size_t region[3] = {1, 1, 1};
size_t globalWorkOffset[3] = {0, 0, 0};
size_t workGroupSize[3] = {1, 1, 1};

View File

@ -1427,6 +1427,19 @@ TEST_F(EnqueueKernelTest, givenEnqueueCommandThatLocalWorkgroupSizeContainsZeroW
EXPECT_EQ(CL_INVALID_WORK_GROUP_SIZE, status);
}
TEST_F(EnqueueKernelTest, givenEnqueueCommandWithWorkDimLargerThanAllowedWhenEnqueueNDRangeKernelIsCalledThenClInvalidWorkDimensionIsReturned) {
size_t globalWorkSize[3] = {1, 1, 1};
size_t localWorkSize[3] = {1, 1, 1};
MockKernelWithInternals mockKernel(*pClDevice);
auto testedWorkDim = pClDevice->deviceInfo.maxWorkItemDimensions;
auto status = clEnqueueNDRangeKernel(pCmdQ, mockKernel.mockMultiDeviceKernel, testedWorkDim, nullptr, globalWorkSize, localWorkSize, 0, nullptr, nullptr);
ASSERT_EQ(CL_SUCCESS, status);
testedWorkDim += 1;
status = clEnqueueNDRangeKernel(pCmdQ, mockKernel.mockMultiDeviceKernel, testedWorkDim, nullptr, globalWorkSize, localWorkSize, 0, nullptr, nullptr);
EXPECT_EQ(CL_INVALID_WORK_DIMENSION, status);
}
HWTEST_F(EnqueueKernelTest, givenVMEKernelWhenEnqueueKernelThenDispatchFlagsHaveMediaSamplerRequired) {
auto mockCsr = new MockCsrHw2<FamilyType>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield());
mockCsr->overrideDispatchPolicy(DispatchMode::BatchedDispatch);