Handle program's callbacks on API level

Related-To: NEO-5001
Change-Id: Ic73601f874a972c9c3fe6cc1a04edd5d7915f16e
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2020-10-27 12:43:48 +01:00
committed by sys_ocldev
parent e3ef10d57e
commit 4be05409a3
30 changed files with 489 additions and 277 deletions

View File

@@ -224,4 +224,89 @@ TEST_F(clBuildProgramTests, GivenNullAsInputWhenCreatingProgramThenInvalidProgra
nullptr);
EXPECT_EQ(CL_INVALID_PROGRAM, retVal);
}
TEST_F(clBuildProgramTests, GivenInvalidCallbackInputWhenBuildProgramThenInvalidValueErrorIsReturned) {
cl_program pProgram = nullptr;
cl_int binaryStatus = CL_SUCCESS;
size_t binarySize = 0;
std::string testFile;
retrieveBinaryKernelFilename(testFile, "CopyBuffer_simd16_", ".bin");
auto pBinary = loadDataFromFile(
testFile.c_str(),
binarySize);
ASSERT_NE(0u, binarySize);
ASSERT_NE(nullptr, pBinary);
const unsigned char *binaries[1] = {reinterpret_cast<const unsigned char *>(pBinary.get())};
pProgram = clCreateProgramWithBinary(
pContext,
1,
&testedClDevice,
&binarySize,
binaries,
&binaryStatus,
&retVal);
ASSERT_EQ(CL_SUCCESS, retVal);
EXPECT_NE(nullptr, pProgram);
retVal = clBuildProgram(
pProgram,
1,
&testedClDevice,
nullptr,
nullptr,
&retVal);
EXPECT_EQ(CL_INVALID_VALUE, retVal);
retVal = clReleaseProgram(pProgram);
EXPECT_EQ(CL_SUCCESS, retVal);
}
TEST_F(clBuildProgramTests, GivenValidCallbackInputWhenBuildProgramThenCallbackIsInvoked) {
cl_program pProgram = nullptr;
cl_int binaryStatus = CL_SUCCESS;
size_t binarySize = 0;
std::string testFile;
retrieveBinaryKernelFilename(testFile, "CopyBuffer_simd16_", ".bin");
auto pBinary = loadDataFromFile(
testFile.c_str(),
binarySize);
ASSERT_NE(0u, binarySize);
ASSERT_NE(nullptr, pBinary);
const unsigned char *binaries[1] = {reinterpret_cast<const unsigned char *>(pBinary.get())};
pProgram = clCreateProgramWithBinary(
pContext,
1,
&testedClDevice,
&binarySize,
binaries,
&binaryStatus,
&retVal);
ASSERT_EQ(CL_SUCCESS, retVal);
EXPECT_NE(nullptr, pProgram);
char userData = 0;
retVal = clBuildProgram(
pProgram,
1,
&testedClDevice,
nullptr,
notifyFuncProgram,
&userData);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ('a', userData);
retVal = clReleaseProgram(pProgram);
EXPECT_EQ(CL_SUCCESS, retVal);
}
} // namespace ULT