| 61 | } |
| 62 | |
| 63 | void kernel(cl::Buffer& devOut, cl::CommandQueue& queue, cl::Device& device) |
| 64 | { |
| 65 | static bool compileFlag = true; |
| 66 | static cl::Program prog; |
| 67 | static cl::Kernel kern; |
| 68 | |
| 69 | if (compileFlag) { |
| 70 | try { |
| 71 | prog = cl::Program(queue.getInfo<CL_QUEUE_CONTEXT>(), sin_surf_kernel, false); |
| 72 | |
| 73 | std::vector<cl::Device> devs; |
| 74 | devs.push_back(device); |
| 75 | prog.build(devs); |
| 76 | |
| 77 | kern = cl::Kernel(prog, "surf"); |
| 78 | } catch (cl::Error err) { |
| 79 | std::cout << "Compile Errors: " << std::endl; |
| 80 | std::cout << err.what() << err.err() << std::endl; |
| 81 | std::cout << prog.getBuildInfo<CL_PROGRAM_BUILD_LOG>(device) << std::endl; |
| 82 | exit(255); |
| 83 | } |
| 84 | std::cout<< "Kernels compiled successfully" << std::endl; |
| 85 | compileFlag = false; |
| 86 | } |
| 87 | |
| 88 | NDRange local(8, 8); |
| 89 | NDRange global(local[0]*divup(XSIZE, (int)(local[0])), |
| 90 | local[1]*divup(YSIZE, (int)(local[1]))); |
| 91 | |
| 92 | kern.setArg(0, devOut); |
| 93 | kern.setArg(1, DX); |
| 94 | kern.setArg(2, XMIN); |
| 95 | kern.setArg(3, YMIN); |
| 96 | kern.setArg(4, XSIZE); |
| 97 | kern.setArg(5, YSIZE); |
| 98 | queue.enqueueNDRangeKernel(kern, cl::NullRange, global, local); |
| 99 | } |
| 100 | |
| 101 | int main(void) |
| 102 | { |