void OpenCLRidgeDetector::setKernelArgsForStream() { cl_int err; additional_output_image_memory = clCreateImage2D(context, CL_MEM_WRITE_ONLY, &output_image_format, width, height, 0, NULL, &err); ASSERT_OPENCL_ERR(err, "Can't create additional image for OpenCLRidgeDetector"); err = setKernelArg(2, &additional_output_image_memory); ASSERT_OPENCL_ERR(err, "Can't set kernel arg 2 for OpenCLRidgeDetector"); }
/*! @brief Sets all arguments for a kernel in a single function. @detailed The wrapped function requires pointers to the buffers and sizes. */ void setKernelArgs(cl_kernel kernel, int numArgs, buffer** buffers, const char* kernelName){ uint arg=0; for(arg=0; arg<numArgs; arg++){ setKernelArg(kernel, arg, buffers[arg], kernelName); /* if(buffers[arg]->mem != NULL){ /\* For global memory *\/ */ /* /\* Wants the size of the cl_mem object, i.e. the size on the CPU, not the GPU *\/ */ /* /\* I guess the cl_mem object contains that information somewhere *\/ */ /* status = clSetKernelArg(kernel, arg, sizeof(buffers[arg]->mem), &buffers[arg]->mem); */ /* } */ /* else{ /\* For local memory *\/ */ /* /\* In the case of making a local buffer (I have set cl_mem to NULL), *\/ */ /* /\* we need the size of the buffer we want to create on the GPU in bytes. *\/ */ /* status = clSetKernelArg(kernel, arg, buffers[arg]->size, NULL); */ /* } */ /* /\* Opencl error checking *\/ */ /* sprintf(errorDescription, "setKernelArg %d %s", arg, kernelName); */ /* statusCheck(status, errorDescription); */ } }
void btGpuDemo3dOCLWrap::initKernels() { initKernel(GPUDEMO3D_KERNEL_CLEAR_ACCUM_IMPULSE, "kClearAccumImpulse"); setKernelArg(GPUDEMO3D_KERNEL_CLEAR_ACCUM_IMPULSE, 1, sizeof(cl_mem), (void*)&m_dLambdaDtBox); setKernelArg(GPUDEMO3D_KERNEL_CLEAR_ACCUM_IMPULSE, 2, sizeof(int), (void*)&m_maxPointsPerConstr); initKernel(GPUDEMO3D_KERNEL_COLLISION_WITH_WALL, "kCollisionWithWallBox"); setKernelArg(GPUDEMO3D_KERNEL_COLLISION_WITH_WALL, 1, sizeof(cl_mem), (void*)&m_dTrans); setKernelArg(GPUDEMO3D_KERNEL_COLLISION_WITH_WALL, 2, sizeof(cl_mem), (void*)&m_dVel); setKernelArg(GPUDEMO3D_KERNEL_COLLISION_WITH_WALL, 3, sizeof(cl_mem), (void*)&m_dAngVel); setKernelArg(GPUDEMO3D_KERNEL_COLLISION_WITH_WALL, 4, sizeof(cl_mem), (void*)&m_dParams); initKernel(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, "kSolveConstraint"); setKernelArg(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, 1, sizeof(cl_mem), (void*)&m_dIds); setKernelArg(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, 2, sizeof(cl_mem), (void*)&m_dBatchIds); setKernelArg(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, 3, sizeof(cl_mem), (void*)&m_dTrans); setKernelArg(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, 4, sizeof(cl_mem), (void*)&m_dVel); setKernelArg(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, 5, sizeof(cl_mem), (void*)&m_dAngVel); setKernelArg(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, 6, sizeof(cl_mem), (void*)&m_dLambdaDtBox); setKernelArg(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, 7, sizeof(cl_mem), (void*)&m_dPositionConstraint); setKernelArg(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, 8, sizeof(cl_mem), (void*)&m_dNormal); setKernelArg(GPUDEMO3D_KERNEL_SOLVE_CONSTRAINTS, 9, sizeof(cl_mem), (void*)&m_dContact); initKernel(GPUDEMO3D_KERNEL_INTEGRATE_VELOCITIES, "kIntegrateVelocities"); setKernelArg(GPUDEMO3D_KERNEL_INTEGRATE_VELOCITIES, 1, sizeof(cl_mem), (void*)&m_dForceTorqueDamp); setKernelArg(GPUDEMO3D_KERNEL_INTEGRATE_VELOCITIES, 2, sizeof(cl_mem), (void*)&m_dInvInertiaMass); setKernelArg(GPUDEMO3D_KERNEL_INTEGRATE_VELOCITIES, 3, sizeof(cl_mem), (void*)&m_dVel); setKernelArg(GPUDEMO3D_KERNEL_INTEGRATE_VELOCITIES, 4, sizeof(cl_mem), (void*)&m_dAngVel); initKernel(GPUDEMO3D_KERNEL_INTEGRATE_TRANSFORMS, "kIntegrateTransforms"); setKernelArg(GPUDEMO3D_KERNEL_INTEGRATE_TRANSFORMS, 1, sizeof(cl_mem), (void*)&m_dTrans); setKernelArg(GPUDEMO3D_KERNEL_INTEGRATE_TRANSFORMS, 2, sizeof(cl_mem), (void*)&m_dVel); setKernelArg(GPUDEMO3D_KERNEL_INTEGRATE_TRANSFORMS, 3, sizeof(cl_mem), (void*)&m_dAngVel); setKernelArg(GPUDEMO3D_KERNEL_INTEGRATE_TRANSFORMS, 4, sizeof(cl_mem), (void*)&m_dInvInertiaMass); }
int setKernelArg(int argid, double arg) {return setKernelArg(argid, sizeof(double), &arg);}
int setKernelArg(int argid, float arg) {return setKernelArg(argid, sizeof(float), &arg);}
int setKernelArg(int argid, size_t arg) {return setKernelArg(argid, sizeof(size_t), &arg);}