summaryrefslogtreecommitdiff
path: root/src/opencl_mesh_kit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/opencl_mesh_kit.cpp')
-rw-r--r--src/opencl_mesh_kit.cpp44
1 files changed, 24 insertions, 20 deletions
diff --git a/src/opencl_mesh_kit.cpp b/src/opencl_mesh_kit.cpp
index abdf04d..8ad18b3 100644
--- a/src/opencl_mesh_kit.cpp
+++ b/src/opencl_mesh_kit.cpp
@@ -157,13 +157,13 @@ cl_int OpenCLMeshKit::compileKernels(std::list<std::string> names, const char so
cl_int OpenCLMeshKit::execKernel(std::string kernelName, float karg_time) {
- cl_int res;
+ //cl_int res;
cl_event eventND[1];
size_t globalWorkSize[2], localWorkSize[2];
cl_kernel kernel;
- struct timespec before, after;
+ //struct timespec before, after;
- clock_gettime(CLOCK_MONOTONIC_RAW, &before);
+ //clock_gettime(CLOCK_MONOTONIC_RAW, &before);
std::map<std::string,cl_kernel>::iterator ii=this->kernels.find(kernelName);
if ( ii==this->kernels.end() ) {
@@ -180,32 +180,36 @@ cl_int OpenCLMeshKit::execKernel(std::string kernelName, float karg_time) {
localWorkSize[0]=this->groupSize;
localWorkSize[1]=1;
- res=clEnqueueAcquireGLObjects(this->cl_cq, 1, &(this->cl_vbo), 0, 0, NULL);
+ CL_RETURN_VAL_IF_FAIL(1,
+ clEnqueueAcquireGLObjects(this->cl_cq, 1, &(this->cl_vbo), 0, 0, NULL)
+ );
- res=clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&(this->cl_vbo)); // float4 *pos
- res=clSetKernelArg(kernel, 1, sizeof(cl_uint), (void *)&(this->meshWidth));
- res=clSetKernelArg(kernel, 2, sizeof(cl_uint), (void *)&(this->meshHeight));
- res=clSetKernelArg(kernel, 3, sizeof(float), (void *)&karg_time);
+ clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&(this->cl_vbo)); // float4 *pos
+ clSetKernelArg(kernel, 1, sizeof(cl_uint), (void *)&(this->meshWidth));
+ clSetKernelArg(kernel, 2, sizeof(cl_uint), (void *)&(this->meshHeight));
+ clSetKernelArg(kernel, 3, sizeof(float), (void *)&karg_time);
// Execute kernel on given device
- res=clEnqueueNDRangeKernel(this->cl_cq, kernel, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, eventND);
- if ( res != CL_SUCCESS ) {
- std::cerr << "clEnqueueNDRangeKernel() failed" << std::endl;
- return 1;
- }
+ CL_RETURN_VAL_IF_FAIL(2,
+ clEnqueueNDRangeKernel(this->cl_cq, kernel, 2, NULL, globalWorkSize, localWorkSize, 0, NULL, eventND)
+ );
//TODO : return values checking
- res=clFlush(this->cl_cq);
+ CL_RETURN_VAL_IF_FAIL(3,
+ clFlush(this->cl_cq)
+ );
// (CPU) Wait until GPU kernel execution end
- res=clWaitForEvents(1,eventND); //XXX: SimpleGL utilise une attente active, pourquoi ?
- res=clReleaseEvent(eventND[0]);
- res=clEnqueueReleaseGLObjects(this->cl_cq, 1, &(this->cl_vbo), 0, 0, 0);
- res=clFinish(this->cl_cq);
+ CL_RETURN_VAL_IF_FAIL(4, clWaitForEvents(1,eventND) ); //XXX: SimpleGL utilise une attente active, pourquoi ?
+ CL_RETURN_VAL_IF_FAIL(5, clReleaseEvent(eventND[0]) );
+ CL_RETURN_VAL_IF_FAIL(6,
+ clEnqueueReleaseGLObjects(this->cl_cq, 1, &(this->cl_vbo), 0, 0, 0)
+ );
+ CL_RETURN_VAL_IF_FAIL(7, clFinish(this->cl_cq) );
- clock_gettime(CLOCK_MONOTONIC_RAW, &after);
+ //clock_gettime(CLOCK_MONOTONIC_RAW, &after);
//TODO : remove this debug hint
- std::cout << "execTime : " << after.tv_nsec - before.tv_nsec << std::cout;
+ //std::cout << "kernel exec time : " << after.tv_nsec - before.tv_nsec << std::endl;
return CL_SUCCESS;
}