clray
diff src/ocl.h @ 39:980bc07be868
Implemented OpenGL/OpenCL interop, and removed the texture copy
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Fri, 27 Aug 2010 18:30:09 +0100 |
parents | 97cfd9675310 |
children | 1bcbb53b3505 |
line diff
1.1 --- a/src/ocl.h Fri Aug 27 02:22:08 2010 +0100 1.2 +++ b/src/ocl.h Fri Aug 27 18:30:09 2010 +0100 1.3 @@ -5,6 +5,7 @@ 1.4 #include <string> 1.5 #ifndef __APPLE__ 1.6 #include <CL/cl.h> 1.7 +#include <CL/cl_gl.h> 1.8 #else 1.9 #include <OpenCL/opencl.h> 1.10 #endif 1.11 @@ -25,16 +26,24 @@ 1.12 cl_mem mem; 1.13 size_t size; 1.14 void *ptr; 1.15 + unsigned int tex; 1.16 }; 1.17 1.18 -CLMemBuffer *create_mem_buffer(int rdwr, size_t sz, const void *buf = 0); 1.19 + 1.20 +bool init_opencl(); 1.21 + 1.22 +CLMemBuffer *create_mem_buffer(int rdwr, size_t sz, const void *buf); 1.23 +CLMemBuffer *create_mem_buffer(int rdwr, unsigned int tex); 1.24 void destroy_mem_buffer(CLMemBuffer *mbuf); 1.25 1.26 -void *map_mem_buffer(CLMemBuffer *mbuf, int rdwr); 1.27 -void unmap_mem_buffer(CLMemBuffer *mbuf); 1.28 +void *map_mem_buffer(CLMemBuffer *mbuf, int rdwr, cl_event *ev = 0); 1.29 +void unmap_mem_buffer(CLMemBuffer *mbuf, cl_event *ev = 0); 1.30 1.31 -bool write_mem_buffer(CLMemBuffer *mbuf, size_t sz, const void *src); 1.32 -bool read_mem_buffer(CLMemBuffer *mbuf, size_t sz, void *dest); 1.33 +bool write_mem_buffer(CLMemBuffer *mbuf, size_t sz, const void *src, cl_event *ev = 0); 1.34 +bool read_mem_buffer(CLMemBuffer *mbuf, size_t sz, void *dest, cl_event *ev = 0); 1.35 + 1.36 +bool acquire_gl_object(CLMemBuffer *mbuf, cl_event *ev = 0); 1.37 +bool release_gl_object(CLMemBuffer *mbuf, cl_event *ev = 0); 1.38 1.39 enum { 1.40 ARGTYPE_NONE, 1.41 @@ -65,6 +74,8 @@ 1.42 cl_kernel kernel; 1.43 std::vector<CLArg> args; 1.44 bool built; 1.45 + mutable cl_event wait_event; 1.46 + mutable cl_event last_event; 1.47 1.48 public: 1.49 CLProgram(const char *kname); 1.50 @@ -75,6 +86,7 @@ 1.51 bool set_argi(int arg, int val); 1.52 bool set_argf(int arg, float val); 1.53 bool set_arg_buffer(int arg, int rdwr, size_t sz, const void *buf = 0); 1.54 + bool set_arg_texture(int arg, int rdwr, unsigned int tex); 1.55 CLMemBuffer *get_arg_buffer(int arg); 1.56 int get_num_args() const; 1.57 1.58 @@ -82,6 +94,12 @@ 1.59 1.60 bool run() const; 1.61 bool run(int dim, ...) const; 1.62 + 1.63 + // sets an event that has to be completed before running the kernel 1.64 + void set_wait_event(cl_event ev); 1.65 + 1.66 + // gets the last event so that we can wait for it to finish 1.67 + cl_event get_last_event() const; 1.68 }; 1.69 1.70 #endif /* OCL_H_ */