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_ */