summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorJunyan He <junyan.he@intel.com>2016-04-11 18:22:15 +0800
committerJunyan He <junyan.he@intel.com>2016-04-11 18:22:15 +0800
commit8096dfae2edf9a9a784ba7aa26bcb85872e05bdd (patch)
tree90216b6197629c7e4d9ec4e7fed691844298d5ce /backend
parent2ca0719a2d886c9af12d1ce501922a0272a1b68d (diff)
refine program
Diffstat (limited to 'backend')
-rw-r--r--backend/src/driver/cl_gen_command_queue.cpp2
-rw-r--r--backend/src/driver/cl_gen_device_id.cpp6
-rw-r--r--backend/src/driver/cl_gen_kernel.cpp18
-rw-r--r--backend/src/driver/cl_gen_program.cpp15
4 files changed, 23 insertions, 18 deletions
diff --git a/backend/src/driver/cl_gen_command_queue.cpp b/backend/src/driver/cl_gen_command_queue.cpp
index 57fee252..5ee7730e 100644
--- a/backend/src/driver/cl_gen_command_queue.cpp
+++ b/backend/src/driver/cl_gen_command_queue.cpp
@@ -266,7 +266,7 @@ cl_int GenReleaseCommandQueue(cl_command_queue queue)
return CL_INVALID_VALUE;
}
- GBE_FREE(gpuQueue);
+ GBE_DELETE(gpuQueue);
setGenCommandQueuePrivate(queue, NULL);
return CL_SUCCESS;
}
diff --git a/backend/src/driver/cl_gen_device_id.cpp b/backend/src/driver/cl_gen_device_id.cpp
index 005be34b..b665d6b9 100644
--- a/backend/src/driver/cl_gen_device_id.cpp
+++ b/backend/src/driver/cl_gen_device_id.cpp
@@ -818,7 +818,7 @@ cl_int GenDriverInit(cl_platform_id platform)
GenGPUDevice* gpuDev = GBE_NEW(GenGPUDevice);
if (gpuDev->gen_ver < 7) {
gen_device = NULL;
- GBE_FREE(gpuDev);
+ GBE_DELETE(gpuDev);
err = CL_DEVICE_NOT_FOUND;
return err;
}
@@ -826,7 +826,7 @@ cl_int GenDriverInit(cl_platform_id platform)
initGenDevice(gpuDev);
if (!gen_device) {
gen_device = NULL;
- GBE_FREE(gpuDev);
+ GBE_DELETE(gpuDev);
err = CL_DEVICE_NOT_FOUND;
return err;
}
@@ -838,7 +838,7 @@ cl_int GenDriverInit(cl_platform_id platform)
setGenDevicePrivate(gen_device, gpuDev);
/* Check and set the extension for device. */
if (!checkDeviceExtension(platform)) {
- GBE_FREE(gpuDev);
+ GBE_DELETE(gpuDev);
setGenDevicePrivate(gen_device, NULL);
gen_device = NULL;
err = CL_DEVICE_NOT_FOUND;
diff --git a/backend/src/driver/cl_gen_kernel.cpp b/backend/src/driver/cl_gen_kernel.cpp
index 5f828b29..cfde43e5 100644
--- a/backend/src/driver/cl_gen_kernel.cpp
+++ b/backend/src/driver/cl_gen_kernel.cpp
@@ -759,14 +759,14 @@ cl_int GenEnqueueNDRangeKernel(cl_command_queue queue, cl_kernel kernel, const u
err = genGPUBindSurfaces(*ndRange->gpuState, queue, kernel, ker);
if (err != CL_SUCCESS) {
- GBE_FREE(ndRange);
+ GBE_DELETE(ndRange);
return err;
}
if (ker->getImageSize()) {
err = genGPUBindImage(curbe, *ndRange->gpuState, kernel, ker);
if (err != CL_SUCCESS) {
- GBE_FREE(ndRange);
+ GBE_DELETE(ndRange);
return err;
}
}
@@ -774,13 +774,13 @@ cl_int GenEnqueueNDRangeKernel(cl_command_queue queue, cl_kernel kernel, const u
if (ker->getSamplerSize()) {
err = genGPUBindSamplers(*ndRange->gpuState, kernel, ker);
if (err != CL_SUCCESS) {
- GBE_FREE(ndRange);
+ GBE_DELETE(ndRange);
return err;
}
}
if (ndRange->gpuState->setScratch(scratch_sz) != 0) {
- GBE_FREE(ndRange);
+ GBE_DELETE(ndRange);
return CL_OUT_OF_RESOURCES;
}
@@ -788,7 +788,7 @@ cl_int GenEnqueueNDRangeKernel(cl_command_queue queue, cl_kernel kernel, const u
genGPUSetStack(*ndRange->gpuState, ker, queue->device, gpuDev);
if (genUploadConstantBuffer(queue, curbe, *ndRange->gpuState, kernel, ker, prog) != 0) {
- GBE_FREE(ndRange);
+ GBE_DELETE(ndRange);
return CL_OUT_OF_RESOURCES;
}
@@ -801,7 +801,7 @@ cl_int GenEnqueueNDRangeKernel(cl_command_queue queue, cl_kernel kernel, const u
GBE_ASSERT(cst_sz > 0);
char *final_curbe = (char*)alloca(thread_n * cst_sz);
if (final_curbe == NULL) {
- GBE_FREE(ndRange);
+ GBE_DELETE(ndRange);
return CL_OUT_OF_HOST_MEMORY;
}
@@ -810,12 +810,12 @@ cl_int GenEnqueueNDRangeKernel(cl_command_queue queue, cl_kernel kernel, const u
}
if (genSetVaryingPayload(ker, final_curbe, local_wk_sz, simd_sz, cst_sz, thread_n) != true) {
- GBE_FREE(ndRange);
+ GBE_DELETE(ndRange);
return CL_OUT_OF_HOST_MEMORY;
}
if (ndRange->gpuState->uploadCurbes(final_curbe, thread_n*cst_sz, thread_n, cst_sz) != true) {
- GBE_FREE(ndRange);
+ GBE_DELETE(ndRange);
return CL_OUT_OF_RESOURCES;
}
}
@@ -831,7 +831,7 @@ cl_int GenEnqueueNDRangeKernel(cl_command_queue queue, cl_kernel kernel, const u
/* Final,enqueue it in the queue worker thread. */
if (gpuQueue->enqueueWorkItem(ndRange) == false) {
- GBE_FREE(ndRange);
+ GBE_DELETE(ndRange);
return CL_INVALID_COMMAND_QUEUE;
}
diff --git a/backend/src/driver/cl_gen_program.cpp b/backend/src/driver/cl_gen_program.cpp
index 1da69cd3..49de5754 100644
--- a/backend/src/driver/cl_gen_program.cpp
+++ b/backend/src/driver/cl_gen_program.cpp
@@ -35,14 +35,20 @@ using namespace gbe;
extern "C"
cl_int GenBuildProgram(cl_program program, const cl_device_id device)
{
- GBE_ASSERT(getGenProgramPrivate(program, device) == NULL);
+ if (getGenProgramPrivate(program, device) != NULL) { // Rebuild ?
+ Program* prog = reinterpret_cast<Program*>(getGenProgramPrivate(program, device));
+ GBE_DELETE(prog);
+ setGenProgramPrivate(program, device, NULL);
+ }
int index = findIndexByDevice(program->ctx, device);
int device_id = (reinterpret_cast<GenGPUDevice*>(getGenDevicePrivate(device)))->device_id;
GBE_ASSERT(index >= 0);
- Program* p = ProgramNewFromSource(device_id, program->source, CL_BUILD_LOG_MAX_SZ, program->build_opts,
- program->build_log[index], &program->build_log_sz[index]);
+ Program* p = ProgramNewFromSource(device_id, program->source, CL_BUILD_LOG_MAX_SZ,
+ program->device_status[index].build_opts,
+ program->device_status[index].build_log,
+ &program->device_status[index].build_log_sz);
if (p == NULL) {
return CL_BUILD_PROGRAM_FAILURE;
}
@@ -94,8 +100,7 @@ cl_int GenReleaseProgram(cl_program program, const cl_device_id device)
if (p == NULL)
return CL_INVALID_VALUE;
- GBE_FREE(p);
-
+ GBE_DELETE(p);
setGenProgramPrivate(program, device, NULL);
return CL_SUCCESS;
}