Correct callback API functions

Add implementation to clSetProgramReleaseCallback and
clSetContextDestructorCallback functions.

Resolves: NEO-4962, NEO-5051

Change-Id: Iad6fffc663665a3cf16b96aa90065140cf8c5477
Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
Filip Hazubski
2020-09-07 19:44:29 +02:00
committed by sys_ocldev
parent 5358f2cf9c
commit d889c599b2
13 changed files with 171 additions and 41 deletions

View File

@@ -3121,3 +3121,35 @@ TEST(ProgramReplaceDeviceBinary, GivenBinaryZebinThenUseAsBothPackedAndUnpackedB
EXPECT_EQ(0, memcmp(program.packedDeviceBinary.get(), zebin.storage.data(), program.packedDeviceBinarySize));
EXPECT_EQ(0, memcmp(program.unpackedDeviceBinary.get(), zebin.storage.data(), program.unpackedDeviceBinarySize));
}
TEST(Program, WhenSettingProgramReleaseCallbackThenCallOrderIsPreserved) {
struct UserDataType {
cl_program expectedProgram;
std::vector<size_t> &vectorToModify;
size_t valueToAdd;
};
auto callback = [](cl_program program, void *userData) -> void {
auto pUserData = reinterpret_cast<UserDataType *>(userData);
EXPECT_EQ(pUserData->expectedProgram, program);
pUserData->vectorToModify.push_back(pUserData->valueToAdd);
};
MockExecutionEnvironment executionEnvironment;
auto pProgram = new MockProgram{executionEnvironment};
std::vector<size_t> callbacksReturnValues;
UserDataType userDataArray[]{
{pProgram, callbacksReturnValues, 1},
{pProgram, callbacksReturnValues, 2},
{pProgram, callbacksReturnValues, 3}};
for (auto &userData : userDataArray) {
cl_int retVal = clSetProgramReleaseCallback(pProgram, callback, &userData);
ASSERT_EQ(CL_SUCCESS, retVal);
}
delete pProgram;
ASSERT_EQ(3u, callbacksReturnValues.size());
EXPECT_EQ(3u, callbacksReturnValues[0]);
EXPECT_EQ(2u, callbacksReturnValues[1]);
EXPECT_EQ(1u, callbacksReturnValues[2]);
}