Revert "Forbid to rebuild program"

This reverts commit aa957370da.

Change-Id: Ie935cfe1b3b70023e520042bce5f341ae6b39271
This commit is contained in:
Jobczyk, Lukasz 2020-04-21 23:20:59 -07:00 committed by sys_ocldev
parent 324b1f5c60
commit 23601a8c59
3 changed files with 44 additions and 71 deletions

View File

@ -1467,11 +1467,7 @@ cl_int CL_API_CALL clBuildProgram(cl_program program,
auto pProgram = castToObject<Program>(program);
if (pProgram) {
if (pProgram->getBuildStatus() == CL_BUILD_SUCCESS) {
retVal = CL_INVALID_OPERATION;
} else {
retVal = pProgram->build(numDevices, deviceList, options, funcNotify, userData, clCacheEnabled);
}
retVal = pProgram->build(numDevices, deviceList, options, funcNotify, userData, clCacheEnabled);
}
TRACING_EXIT(clBuildProgram, &retVal);

View File

@ -118,7 +118,7 @@ TEST_F(clCreateProgramWithILKHRTests, GivenCorrectParametersWhenCreatingProgramW
EXPECT_EQ(CL_SUCCESS, retVal);
}
TEST_F(clCreateProgramWithILKHRTests, GivenProgramCreatedWithILWhenBuildAfterBuildIsCalledThenReturnInvalidOperation) {
TEST_F(clCreateProgramWithILKHRTests, GivenProgramCreatedWithILWhenBuildAfterBuildIsCalledThenReturnSuccess) {
const uint32_t spirv[16] = {0x03022307};
cl_int err = CL_INVALID_VALUE;
cl_program program = clCreateProgramWithIL(pContext, spirv, sizeof(spirv), &err);
@ -127,7 +127,7 @@ TEST_F(clCreateProgramWithILKHRTests, GivenProgramCreatedWithILWhenBuildAfterBui
err = clBuildProgram(program, 0, nullptr, "", nullptr, nullptr);
EXPECT_EQ(CL_SUCCESS, err);
err = clBuildProgram(program, 0, nullptr, "", nullptr, nullptr);
EXPECT_EQ(CL_INVALID_OPERATION, err);
EXPECT_EQ(CL_SUCCESS, err);
retVal = clReleaseProgram(program);
EXPECT_EQ(CL_SUCCESS, retVal);
}

View File

@ -43,82 +43,59 @@ TEST_F(clGetProgramBuildInfoTests, givenSourceWhenclGetProgramBuildInfoIsCalledT
ASSERT_NE(0u, sourceSize);
ASSERT_NE(nullptr, pSource);
{
const char *sources[1] = {pSource.get()};
pProgram = clCreateProgramWithSource(
pContext,
1,
sources,
&sourceSize,
&retVal);
const char *sources[1] = {pSource.get()};
pProgram = clCreateProgramWithSource(
pContext,
1,
sources,
&sourceSize,
&retVal);
EXPECT_NE(nullptr, pProgram);
ASSERT_EQ(CL_SUCCESS, retVal);
EXPECT_NE(nullptr, pProgram);
ASSERT_EQ(CL_SUCCESS, retVal);
cl_build_status buildStatus;
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(CL_BUILD_NONE, buildStatus);
cl_build_status buildStatus;
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(CL_BUILD_NONE, buildStatus);
retVal = clCompileProgram(
pProgram,
num_devices,
devices,
nullptr,
0,
nullptr,
nullptr,
nullptr,
nullptr);
retVal = clCompileProgram(
pProgram,
num_devices,
devices,
nullptr,
0,
nullptr,
nullptr,
nullptr,
nullptr);
ASSERT_EQ(CL_SUCCESS, retVal);
ASSERT_EQ(CL_SUCCESS, retVal);
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(CL_BUILD_SUCCESS, buildStatus);
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(CL_BUILD_SUCCESS, buildStatus);
retVal = clReleaseProgram(pProgram);
EXPECT_EQ(CL_SUCCESS, retVal);
}
retVal = clBuildProgram(
pProgram,
num_devices,
devices,
nullptr,
nullptr,
nullptr);
{
const char *sources[1] = {pSource.get()};
pProgram = clCreateProgramWithSource(
pContext,
1,
sources,
&sourceSize,
&retVal);
ASSERT_EQ(CL_SUCCESS, retVal);
EXPECT_NE(nullptr, pProgram);
ASSERT_EQ(CL_SUCCESS, retVal);
cl_build_status buildStatus;
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(CL_BUILD_NONE, buildStatus);
retVal = clBuildProgram(
pProgram,
num_devices,
devices,
nullptr,
nullptr,
nullptr);
ASSERT_EQ(CL_SUCCESS, retVal);
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(CL_BUILD_SUCCESS, buildStatus);
retVal = clReleaseProgram(pProgram);
EXPECT_EQ(CL_SUCCESS, retVal);
}
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(CL_BUILD_SUCCESS, buildStatus);
// try to get program build info for invalid program object - should fail
retVal = clGetProgramBuildInfo(nullptr, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, 0, nullptr, nullptr);
EXPECT_EQ(CL_INVALID_PROGRAM, retVal);
retVal = clReleaseProgram(pProgram);
EXPECT_EQ(CL_SUCCESS, retVal);
}
TEST_F(clGetProgramBuildInfoTests, givenElfBinaryWhenclGetProgramBuildInfoIsCalledThenReturnClBuildNone) {