@@ -1534,6 +1534,65 @@ TEST_F(EnqueueKernelTest, givenEnqueueCommandWithWorkDimsResultingInMoreThan32Bi
15341534 EXPECT_EQ (CL_INVALID_GLOBAL_WORK_SIZE, status);
15351535}
15361536
1537+ TEST_F (EnqueueKernelTest, givenEnqueueCommandWithNullLwsAndWorkDimsResultingInMoreThan32BitMaxGroupsWhenEnqueueNDRangeKernelIsCalledThenInvalidGlobalSizeIsReturned) {
1538+
1539+ if (sizeof (size_t ) < 8 ) {
1540+ GTEST_SKIP ();
1541+ }
1542+
1543+ auto maxWgSize = static_cast <uint32_t >(pClDevice->getDevice ().getDeviceInfo ().maxWorkGroupSize );
1544+
1545+ size_t max32Bit = std::numeric_limits<uint32_t >::max ();
1546+ size_t globalWorkSize[3 ] = {(max32Bit + 1 ) * maxWgSize, 3 , 4 };
1547+ MockKernelWithInternals mockKernel (*pClDevice);
1548+ auto testedWorkDim = 3 ;
1549+
1550+ auto status = clEnqueueNDRangeKernel (pCmdQ, mockKernel.mockMultiDeviceKernel , testedWorkDim, nullptr , globalWorkSize, nullptr , 0 , nullptr , nullptr );
1551+ EXPECT_EQ (CL_INVALID_GLOBAL_WORK_SIZE, status);
1552+
1553+ globalWorkSize[0 ] = (max32Bit + 1 ) * maxWgSize + 3 ;
1554+ status = clEnqueueNDRangeKernel (pCmdQ, mockKernel.mockMultiDeviceKernel , testedWorkDim, nullptr , globalWorkSize, nullptr , 0 , nullptr , nullptr );
1555+ EXPECT_EQ (CL_INVALID_GLOBAL_WORK_SIZE, status);
1556+
1557+ globalWorkSize[0 ] = 4 ;
1558+ globalWorkSize[1 ] = (max32Bit + 1 ) * maxWgSize;
1559+
1560+ status = clEnqueueNDRangeKernel (pCmdQ, mockKernel.mockMultiDeviceKernel , testedWorkDim, nullptr , globalWorkSize, nullptr , 0 , nullptr , nullptr );
1561+ EXPECT_EQ (CL_INVALID_GLOBAL_WORK_SIZE, status);
1562+
1563+ globalWorkSize[1 ] = 4 ;
1564+ globalWorkSize[2 ] = (max32Bit + 1 ) * maxWgSize * 2 + 3 ;
1565+
1566+ status = clEnqueueNDRangeKernel (pCmdQ, mockKernel.mockMultiDeviceKernel , testedWorkDim, nullptr , globalWorkSize, nullptr , 0 , nullptr , nullptr );
1567+ EXPECT_EQ (CL_INVALID_GLOBAL_WORK_SIZE, status);
1568+ }
1569+
1570+ TEST_F (EnqueueKernelTest, givenEnqueueCommandWithNullLwsAndWorkDimsResultingInLessThan32BitMaxGroupsWhenEnqueueNDRangeKernelIsCalledThenSuccessIsReturned) {
1571+
1572+ if (sizeof (size_t ) < 8 ) {
1573+ GTEST_SKIP ();
1574+ }
1575+
1576+ size_t max32Bit = std::numeric_limits<uint32_t >::max ();
1577+ size_t globalWorkSize[3 ] = {(max32Bit + 1 ) * 4 , 1 , 1 };
1578+ MockKernelWithInternals mockKernel (*pClDevice);
1579+ auto testedWorkDim = 3 ;
1580+
1581+ auto status = clEnqueueNDRangeKernel (pCmdQ, mockKernel.mockMultiDeviceKernel , testedWorkDim, nullptr , globalWorkSize, nullptr , 0 , nullptr , nullptr );
1582+ EXPECT_EQ (CL_SUCCESS, status);
1583+
1584+ globalWorkSize[0 ] = 1 ;
1585+ globalWorkSize[1 ] = (max32Bit + 1 ) * 4 ;
1586+ status = clEnqueueNDRangeKernel (pCmdQ, mockKernel.mockMultiDeviceKernel , testedWorkDim, nullptr , globalWorkSize, nullptr , 0 , nullptr , nullptr );
1587+ EXPECT_EQ (CL_SUCCESS, status);
1588+
1589+ globalWorkSize[1 ] = 1 ;
1590+ globalWorkSize[2 ] = (max32Bit + 1 ) * 4 ;
1591+
1592+ status = clEnqueueNDRangeKernel (pCmdQ, mockKernel.mockMultiDeviceKernel , testedWorkDim, nullptr , globalWorkSize, nullptr , 0 , nullptr , nullptr );
1593+ EXPECT_EQ (CL_SUCCESS, status);
1594+ }
1595+
15371596HWTEST_F (EnqueueKernelTest, givenVMEKernelWhenEnqueueKernelThenDispatchFlagsHaveMediaSamplerRequired) {
15381597 auto mockCsr = new MockCsrHw2<FamilyType>(*pDevice->executionEnvironment , pDevice->getRootDeviceIndex (), pDevice->getDeviceBitfield ());
15391598 mockCsr->overrideDispatchPolicy (DispatchMode::BatchedDispatch);
0 commit comments