clray

view 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 source
1 #ifndef OCL_H_
2 #define OCL_H_
4 #include <vector>
5 #include <string>
6 #ifndef __APPLE__
7 #include <CL/cl.h>
8 #include <CL/cl_gl.h>
9 #else
10 #include <OpenCL/opencl.h>
11 #endif
13 enum {
14 ARG_RD = CL_MEM_READ_ONLY,
15 ARG_WR = CL_MEM_WRITE_ONLY,
16 ARG_RDWR = CL_MEM_READ_WRITE
17 };
19 enum {
20 MAP_RD = CL_MAP_READ,
21 MAP_WR = CL_MAP_WRITE,
22 MAP_RDWR = CL_MAP_READ | CL_MAP_WRITE
23 };
25 struct CLMemBuffer {
26 cl_mem mem;
27 size_t size;
28 void *ptr;
29 unsigned int tex;
30 };
33 bool init_opencl();
35 CLMemBuffer *create_mem_buffer(int rdwr, size_t sz, const void *buf);
36 CLMemBuffer *create_mem_buffer(int rdwr, unsigned int tex);
37 void destroy_mem_buffer(CLMemBuffer *mbuf);
39 void *map_mem_buffer(CLMemBuffer *mbuf, int rdwr, cl_event *ev = 0);
40 void unmap_mem_buffer(CLMemBuffer *mbuf, cl_event *ev = 0);
42 bool write_mem_buffer(CLMemBuffer *mbuf, size_t sz, const void *src, cl_event *ev = 0);
43 bool read_mem_buffer(CLMemBuffer *mbuf, size_t sz, void *dest, cl_event *ev = 0);
45 bool acquire_gl_object(CLMemBuffer *mbuf, cl_event *ev = 0);
46 bool release_gl_object(CLMemBuffer *mbuf, cl_event *ev = 0);
48 enum {
49 ARGTYPE_NONE,
51 ARGTYPE_INT,
52 ARGTYPE_FLOAT,
53 ARGTYPE_FLOAT4,
54 ARGTYPE_MEM_BUF
55 };
57 struct CLArg {
58 int type;
59 union {
60 int ival;
61 float fval;
62 cl_float4 vval;
63 CLMemBuffer *mbuf;
64 } v;
66 CLArg();
67 };
70 class CLProgram {
71 private:
72 std::string kname;
73 cl_program prog;
74 cl_kernel kernel;
75 std::vector<CLArg> args;
76 bool built;
77 mutable cl_event wait_event;
78 mutable cl_event last_event;
80 public:
81 CLProgram(const char *kname);
82 ~CLProgram();
84 bool load(const char *fname);
86 bool set_argi(int arg, int val);
87 bool set_argf(int arg, float val);
88 bool set_arg_buffer(int arg, int rdwr, size_t sz, const void *buf = 0);
89 bool set_arg_texture(int arg, int rdwr, unsigned int tex);
90 CLMemBuffer *get_arg_buffer(int arg);
91 int get_num_args() const;
93 bool build();
95 bool run() const;
96 bool run(int dim, ...) const;
98 // sets an event that has to be completed before running the kernel
99 void set_wait_event(cl_event ev);
101 // gets the last event so that we can wait for it to finish
102 cl_event get_last_event() const;
103 };
105 #endif /* OCL_H_ */