mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-22 10:17:01 +08:00
Forbid to rebuild program
Change-Id: I0fe5d8c9b39b3fc857bba0bde77ed4d9a4bb95af Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
22831f40e9
commit
aa957370da
@@ -1467,7 +1467,11 @@ cl_int CL_API_CALL clBuildProgram(cl_program program,
|
|||||||
auto pProgram = castToObject<Program>(program);
|
auto pProgram = castToObject<Program>(program);
|
||||||
|
|
||||||
if (pProgram) {
|
if (pProgram) {
|
||||||
retVal = pProgram->build(numDevices, deviceList, options, funcNotify, userData, clCacheEnabled);
|
if (pProgram->getBuildStatus() == CL_BUILD_SUCCESS) {
|
||||||
|
retVal = CL_INVALID_OPERATION;
|
||||||
|
} else {
|
||||||
|
retVal = pProgram->build(numDevices, deviceList, options, funcNotify, userData, clCacheEnabled);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACING_EXIT(clBuildProgram, &retVal);
|
TRACING_EXIT(clBuildProgram, &retVal);
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ TEST_F(clCreateProgramWithILKHRTests, GivenCorrectParametersWhenCreatingProgramW
|
|||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(clCreateProgramWithILKHRTests, GivenProgramCreatedWithILWhenBuildAfterBuildIsCalledThenReturnSuccess) {
|
TEST_F(clCreateProgramWithILKHRTests, GivenProgramCreatedWithILWhenBuildAfterBuildIsCalledThenReturnInvalidOperation) {
|
||||||
const uint32_t spirv[16] = {0x03022307};
|
const uint32_t spirv[16] = {0x03022307};
|
||||||
cl_int err = CL_INVALID_VALUE;
|
cl_int err = CL_INVALID_VALUE;
|
||||||
cl_program program = clCreateProgramWithIL(pContext, spirv, sizeof(spirv), &err);
|
cl_program program = clCreateProgramWithIL(pContext, spirv, sizeof(spirv), &err);
|
||||||
@@ -127,7 +127,7 @@ TEST_F(clCreateProgramWithILKHRTests, GivenProgramCreatedWithILWhenBuildAfterBui
|
|||||||
err = clBuildProgram(program, 0, nullptr, "", nullptr, nullptr);
|
err = clBuildProgram(program, 0, nullptr, "", nullptr, nullptr);
|
||||||
EXPECT_EQ(CL_SUCCESS, err);
|
EXPECT_EQ(CL_SUCCESS, err);
|
||||||
err = clBuildProgram(program, 0, nullptr, "", nullptr, nullptr);
|
err = clBuildProgram(program, 0, nullptr, "", nullptr, nullptr);
|
||||||
EXPECT_EQ(CL_SUCCESS, err);
|
EXPECT_EQ(CL_INVALID_OPERATION, err);
|
||||||
retVal = clReleaseProgram(program);
|
retVal = clReleaseProgram(program);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,59 +43,82 @@ TEST_F(clGetProgramBuildInfoTests, givenSourceWhenclGetProgramBuildInfoIsCalledT
|
|||||||
ASSERT_NE(0u, sourceSize);
|
ASSERT_NE(0u, sourceSize);
|
||||||
ASSERT_NE(nullptr, pSource);
|
ASSERT_NE(nullptr, pSource);
|
||||||
|
|
||||||
const char *sources[1] = {pSource.get()};
|
{
|
||||||
pProgram = clCreateProgramWithSource(
|
const char *sources[1] = {pSource.get()};
|
||||||
pContext,
|
pProgram = clCreateProgramWithSource(
|
||||||
1,
|
pContext,
|
||||||
sources,
|
1,
|
||||||
&sourceSize,
|
sources,
|
||||||
&retVal);
|
&sourceSize,
|
||||||
|
&retVal);
|
||||||
|
|
||||||
EXPECT_NE(nullptr, pProgram);
|
EXPECT_NE(nullptr, pProgram);
|
||||||
ASSERT_EQ(CL_SUCCESS, retVal);
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
||||||
|
|
||||||
cl_build_status buildStatus;
|
cl_build_status buildStatus;
|
||||||
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
|
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
EXPECT_EQ(CL_BUILD_NONE, buildStatus);
|
EXPECT_EQ(CL_BUILD_NONE, buildStatus);
|
||||||
|
|
||||||
retVal = clCompileProgram(
|
retVal = clCompileProgram(
|
||||||
pProgram,
|
pProgram,
|
||||||
num_devices,
|
num_devices,
|
||||||
devices,
|
devices,
|
||||||
nullptr,
|
nullptr,
|
||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
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);
|
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
EXPECT_EQ(CL_BUILD_SUCCESS, buildStatus);
|
EXPECT_EQ(CL_BUILD_SUCCESS, buildStatus);
|
||||||
|
|
||||||
retVal = clBuildProgram(
|
retVal = clReleaseProgram(pProgram);
|
||||||
pProgram,
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||||
num_devices,
|
}
|
||||||
devices,
|
|
||||||
nullptr,
|
|
||||||
nullptr,
|
|
||||||
nullptr);
|
|
||||||
|
|
||||||
ASSERT_EQ(CL_SUCCESS, retVal);
|
{
|
||||||
|
const char *sources[1] = {pSource.get()};
|
||||||
|
pProgram = clCreateProgramWithSource(
|
||||||
|
pContext,
|
||||||
|
1,
|
||||||
|
sources,
|
||||||
|
&sourceSize,
|
||||||
|
&retVal);
|
||||||
|
|
||||||
retVal = clGetProgramBuildInfo(pProgram, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, sizeof(buildStatus), &buildStatus, NULL);
|
EXPECT_NE(nullptr, pProgram);
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
||||||
EXPECT_EQ(CL_BUILD_SUCCESS, 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 = 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);
|
||||||
|
}
|
||||||
|
|
||||||
// try to get program build info for invalid program object - should fail
|
// try to get program build info for invalid program object - should fail
|
||||||
retVal = clGetProgramBuildInfo(nullptr, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, 0, nullptr, nullptr);
|
retVal = clGetProgramBuildInfo(nullptr, devices[testedRootDeviceIndex], CL_PROGRAM_BUILD_STATUS, 0, nullptr, nullptr);
|
||||||
EXPECT_EQ(CL_INVALID_PROGRAM, retVal);
|
EXPECT_EQ(CL_INVALID_PROGRAM, retVal);
|
||||||
|
|
||||||
retVal = clReleaseProgram(pProgram);
|
|
||||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(clGetProgramBuildInfoTests, givenElfBinaryWhenclGetProgramBuildInfoIsCalledThenReturnClBuildNone) {
|
TEST_F(clGetProgramBuildInfoTests, givenElfBinaryWhenclGetProgramBuildInfoIsCalledThenReturnClBuildNone) {
|
||||||
|
|||||||
Reference in New Issue
Block a user