-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathImageGenerater_OpenCL.h
55 lines (47 loc) · 1.39 KB
/
ImageGenerater_OpenCL.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#ifndef IMAGEGENERATER_OPENCL_H
#define IMAGEGENERATER_OPENCL_H
#include <CL\opencl.h>
class ImageGenerater_OpenCL
{
private:
template<typename ...TArgs>
struct FillArray;
template<>
struct FillArray<>
{
static void Invoke(const void *ptrArray[], size_t sizeArray[]) {}
};
template<typename T, typename ...TArgs>
struct FillArray<T, TArgs...>
{
static void Invoke(const void *ptrArray[], size_t sizeArray[], T *arg, TArgs* ...args)
{
ptrArray[0] = arg;
sizeArray[0] = sizeof(*arg);
FillArray<TArgs...>::Invoke(ptrArray + 1 , sizeArray + 1, args...);
}
};
public:
ImageGenerater_OpenCL(char const *sourceFile, char const *kernelName, int width, int height);
~ImageGenerater_OpenCL();
template<typename ...TArgs>
void Run(int *buffer, TArgs ...args)
{
const void* ptrArray[sizeof ...(args)];
size_t sizeArray[sizeof ...(args)];
FillArray<TArgs...>::Invoke(ptrArray, sizeArray, &args...);
RunImpl(buffer, ptrArray, sizeArray, sizeof...(args));
}
private:
void RunImpl(int *buffer, const void* args[], size_t sizes[], int count);
private:
cl_platform_id mPlatform;
cl_device_id mDevice;
cl_context mContext;
cl_program mProgram;
cl_command_queue mQueue;
cl_kernel mKernel;
cl_mem mMem;
int mWidth, mHeight;
};
#endif