1 #ifndef OPENCL_KERNEL_H 2 #define OPENCL_KERNEL_H 5 #include "opencl_buffer.h" 34 explicit Kernel(
Program* program,
const QString& name, QObject* parent =
nullptr);
40 void setSizes(cl_uint dimension, qint64 globalSize, qint64 localSize);
41 template<
class T>
void setArgument(cl_uint index, T value);
59 size_t* _offsets {
nullptr};
64 size_t* _globalSizes {
nullptr};
69 size_t* _localSizes {
nullptr};
79 bool _isLocked {
false};
100 EDEBUG_FUNC(
this,index,value)
106 e.setTitle(tr(
"Logic Error"));
107 e.setDetails(tr(
"Cannot set OpenCL kernel parameters without locking the object first."));
113 cl_int code {clSetKernelArg(_id,index,
sizeof(T),&value)};
114 if ( code != CL_SUCCESS )
140 EDEBUG_FUNC(
this,index,buffer)
146 e.setTitle(tr(
"Logic Error"));
147 e.setDetails(tr(
"Cannot set OpenCL kernel parameters without locking the object first."));
153 cl_mem
id {buffer->
id()};
154 cl_int code {clSetKernelArg(_id,index,
sizeof(cl_mem),&
id)};
155 if ( code != CL_SUCCESS )
183 EDEBUG_FUNC(
this,index,size)
190 e.setTitle(tr(
"Logic Error"));
191 e.setDetails(tr(
"Cannot set OpenCL kernel parameters without locking the object first."));
197 e.setTitle(tr(
"Invalid Argument"));
198 e.setDetails(tr(
"Cannot set local memory argument of OpenCL kernel with a size of less than 1."));
204 cl_int code {clSetKernelArg(_id,index,
sizeof(T)*size,
nullptr)};
205 if ( code != CL_SUCCESS )
void setSizes(cl_uint dimension, qint64 globalSize, qint64 localSize)
Definition: opencl_kernel.cpp:303
virtual ~Kernel() override
Definition: opencl_kernel.cpp:24
Kernel::Locker lock()
Definition: opencl_kernel.cpp:116
Definition: opencl_buffer.h:27
void setDimensions(cl_uint size)
Definition: opencl_kernel.cpp:251
Definition: opencl_commandqueue.h:18
Definition: opencl_event.h:18
Definition: opencl_kernel.h:26
Definition: opencl_kernel_locker.h:17
void setLocalMemory(cl_uint index, qint64 size)
Definition: opencl_kernel.h:181
cl_mem id() const
Definition: opencl_buffer.h:286
Definition: opencl_device.h:19
void fillException(EException *exception, cl_int code)
Definition: opencl_common.cpp:24
Kernel(Program *program, const QString &name, QObject *parent=nullptr)
Definition: opencl_kernel.cpp:85
int workGroupMultiple(Device *device) const
Definition: opencl_kernel.cpp:205
void setBuffer(cl_uint index, Buffer< T > *buffer)
Definition: opencl_kernel.h:138
void unlock()
Definition: opencl_kernel.cpp:136
int maxWorkGroupSize(Device *device) const
Definition: opencl_kernel.cpp:158
Definition: opencl_program.h:19
void setArgument(cl_uint index, T value)
Definition: opencl_kernel.h:98
Event execute(CommandQueue *queue)
Definition: opencl_kernel.cpp:47