2 * Authors.....: Jens Steube <jens.steube@gmail.com>
3 * Gabriele Gristina <matrix@hashcat.net>
13 #define CL_USE_DEPRECATED_OPENCL_1_2_APIS
14 #define CL_USE_DEPRECATED_OPENCL_2_0_APIS
17 #include <OpenCL/cl.h>
34 typedef cl_int (CL_API_CALL
*OCL_CLBUILDPROGRAM
) (cl_program
, cl_uint
, const cl_device_id
*, const char *, void (CL_CALLBACK
*)(cl_program
, void *), void *);
35 typedef cl_mem (CL_API_CALL
*OCL_CLCREATEBUFFER
) (cl_context
, cl_mem_flags
, size_t, void *, cl_int
*);
36 typedef cl_command_queue (CL_API_CALL
*OCL_CLCREATECOMMANDQUEUE
) (cl_context
, cl_device_id
, cl_command_queue_properties
, cl_int
*);
37 typedef cl_context (CL_API_CALL
*OCL_CLCREATECONTEXT
) (const cl_context_properties
*, cl_uint
, const cl_device_id
*, void (CL_CALLBACK
*)(const char *, const void *, size_t, void *), void *, cl_int
*);
38 typedef cl_kernel (CL_API_CALL
*OCL_CLCREATEKERNEL
) (cl_program
, const char *, cl_int
*);
39 typedef cl_program (CL_API_CALL
*OCL_CLCREATEPROGRAMWITHBINARY
) (cl_context
, cl_uint
, const cl_device_id
*, const size_t *, const unsigned char **, cl_int
*, cl_int
*);
40 typedef cl_program (CL_API_CALL
*OCL_CLCREATEPROGRAMWITHSOURCE
) (cl_context
, cl_uint
, const char **, const size_t *, cl_int
*);
41 typedef cl_int (CL_API_CALL
*OCL_CLENQUEUECOPYBUFFER
) (cl_command_queue
, cl_mem
, cl_mem
, size_t, size_t, size_t, cl_uint
, const cl_event
*, cl_event
*);
42 typedef void * (CL_API_CALL
*OCL_CLENQUEUEMAPBUFFER
) (cl_command_queue
, cl_mem
, cl_bool
, cl_map_flags
, size_t, size_t, cl_uint
, const cl_event
*, cl_event
*, cl_int
*);
43 typedef cl_int (CL_API_CALL
*OCL_CLENQUEUENDRANGEKERNEL
) (cl_command_queue
, cl_kernel
, cl_uint
, const size_t *, const size_t *, const size_t *, cl_uint
, const cl_event
*, cl_event
*);
44 typedef cl_int (CL_API_CALL
*OCL_CLENQUEUEREADBUFFER
) (cl_command_queue
, cl_mem
, cl_bool
, size_t, size_t, const void *, cl_uint
, const cl_event
*, cl_event
*);
45 typedef cl_int (CL_API_CALL
*OCL_CLENQUEUEUNMAPMEMOBJECT
) (cl_command_queue
, cl_mem
, void *, cl_uint
, const cl_event
*, cl_event
*);
46 typedef cl_int (CL_API_CALL
*OCL_CLENQUEUEWRITEBUFFER
) (cl_command_queue
, cl_mem
, cl_bool
, size_t, size_t, const void *, cl_uint
, const cl_event
*, cl_event
*);
47 typedef cl_int (CL_API_CALL
*OCL_CLFINISH
) (cl_command_queue
);
48 typedef cl_int (CL_API_CALL
*OCL_CLFLUSH
) (cl_command_queue
);
49 typedef cl_int (CL_API_CALL
*OCL_CLGETDEVICEIDS
) (cl_platform_id
, cl_device_type
, cl_uint
, cl_device_id
*, cl_uint
*);
50 typedef cl_int (CL_API_CALL
*OCL_CLGETDEVICEINFO
) (cl_device_id
, cl_device_info
, size_t, void *, size_t *);
51 typedef cl_int (CL_API_CALL
*OCL_CLGETEVENTINFO
) (cl_event
, cl_event_info
, size_t, void *, size_t *);
52 typedef cl_int (CL_API_CALL
*OCL_CLGETEVENTPROFILINGINFO
) (cl_event
, cl_profiling_info
, size_t, void *, size_t *);
53 typedef cl_int (CL_API_CALL
*OCL_CLGETKERNELWORKGROUPINFO
) (cl_kernel
, cl_device_id
, cl_kernel_work_group_info
, size_t, void *, size_t *);
54 typedef cl_int (CL_API_CALL
*OCL_CLGETPLATFORMIDS
) (cl_uint
, cl_platform_id
*, cl_uint
*);
55 typedef cl_int (CL_API_CALL
*OCL_CLGETPLATFORMINFO
) (cl_platform_id
, cl_platform_info
, size_t, void *, size_t *);
56 typedef cl_int (CL_API_CALL
*OCL_CLGETPROGRAMBUILDINFO
) (cl_program
, cl_device_id
, cl_program_build_info
, size_t, void *, size_t *);
57 typedef cl_int (CL_API_CALL
*OCL_CLGETPROGRAMINFO
) (cl_program
, cl_program_info
, size_t, void *, size_t *);
58 typedef cl_int (CL_API_CALL
*OCL_CLRELEASECOMMANDQUEUE
) (cl_command_queue
);
59 typedef cl_int (CL_API_CALL
*OCL_CLRELEASECONTEXT
) (cl_context
);
60 typedef cl_int (CL_API_CALL
*OCL_CLRELEASEEVENT
) (cl_event
);
61 typedef cl_int (CL_API_CALL
*OCL_CLRELEASEKERNEL
) (cl_kernel
);
62 typedef cl_int (CL_API_CALL
*OCL_CLRELEASEMEMOBJECT
) (cl_mem
);
63 typedef cl_int (CL_API_CALL
*OCL_CLRELEASEPROGRAM
) (cl_program
);
64 typedef cl_int (CL_API_CALL
*OCL_CLSETKERNELARG
) (cl_kernel
, cl_uint
, size_t, const void *);
65 typedef cl_int (CL_API_CALL
*OCL_CLWAITFOREVENTS
) (cl_uint
, const cl_event
*);
71 OCL_CLBUILDPROGRAM clBuildProgram
;
72 OCL_CLCREATEBUFFER clCreateBuffer
;
73 OCL_CLCREATECOMMANDQUEUE clCreateCommandQueue
;
74 OCL_CLCREATECONTEXT clCreateContext
;
75 OCL_CLCREATEKERNEL clCreateKernel
;
76 OCL_CLCREATEPROGRAMWITHBINARY clCreateProgramWithBinary
;
77 OCL_CLCREATEPROGRAMWITHSOURCE clCreateProgramWithSource
;
78 OCL_CLENQUEUECOPYBUFFER clEnqueueCopyBuffer
;
79 OCL_CLENQUEUEMAPBUFFER clEnqueueMapBuffer
;
80 OCL_CLENQUEUENDRANGEKERNEL clEnqueueNDRangeKernel
;
81 OCL_CLENQUEUEREADBUFFER clEnqueueReadBuffer
;
82 OCL_CLENQUEUEUNMAPMEMOBJECT clEnqueueUnmapMemObject
;
83 OCL_CLENQUEUEWRITEBUFFER clEnqueueWriteBuffer
;
84 OCL_CLFINISH clFinish
;
86 OCL_CLGETDEVICEIDS clGetDeviceIDs
;
87 OCL_CLGETDEVICEINFO clGetDeviceInfo
;
88 OCL_CLGETEVENTINFO clGetEventInfo
;
89 OCL_CLGETEVENTPROFILINGINFO clGetEventProfilingInfo
;
90 OCL_CLGETKERNELWORKGROUPINFO clGetKernelWorkGroupInfo
;
91 OCL_CLGETPLATFORMIDS clGetPlatformIDs
;
92 OCL_CLGETPLATFORMINFO clGetPlatformInfo
;
93 OCL_CLGETPROGRAMBUILDINFO clGetProgramBuildInfo
;
94 OCL_CLGETPROGRAMINFO clGetProgramInfo
;
95 OCL_CLRELEASECOMMANDQUEUE clReleaseCommandQueue
;
96 OCL_CLRELEASECONTEXT clReleaseContext
;
97 OCL_CLRELEASEEVENT clReleaseEvent
;
98 OCL_CLRELEASEKERNEL clReleaseKernel
;
99 OCL_CLRELEASEMEMOBJECT clReleaseMemObject
;
100 OCL_CLRELEASEPROGRAM clReleaseProgram
;
101 OCL_CLSETKERNELARG clSetKernelArg
;
102 OCL_CLWAITFOREVENTS clWaitForEvents
;
106 #define OCL_PTR hc_opencl_lib_t
108 const char *val2cstr_cl (cl_int CL_err
);
110 int ocl_init (OCL_PTR
*ocl
);
111 void ocl_close (OCL_PTR
*ocl
);
113 cl_int
hc_clBuildProgram (OCL_PTR
*ocl
, cl_program program
, cl_uint num_devices
, const cl_device_id
*device_list
, const char *options
, void (CL_CALLBACK
*pfn_notify
) (cl_program program
, void *user_data
), void *user_data
);
114 cl_int
hc_clCreateBuffer (OCL_PTR
*ocl
, cl_context context
, cl_mem_flags flags
, size_t size
, void *host_ptr
, cl_mem
*mem
);
115 cl_int
hc_clCreateCommandQueue (OCL_PTR
*ocl
, cl_context context
, cl_device_id device
, cl_command_queue_properties properties
, cl_command_queue
*command_queue
);
116 cl_int
hc_clCreateContext (OCL_PTR
*ocl
, cl_context_properties
*properties
, cl_uint num_devices
, const cl_device_id
*devices
, void (CL_CALLBACK
*pfn_notify
) (const char *, const void *, size_t, void *), void *user_data
, cl_context
*context
);
117 cl_int
hc_clCreateKernel (OCL_PTR
*ocl
, cl_program program
, const char *kernel_name
, cl_kernel
*kernel
);
118 cl_int
hc_clCreateProgramWithBinary (OCL_PTR
*ocl
, cl_context context
, cl_uint num_devices
, const cl_device_id
*device_list
, const size_t *lengths
, const unsigned char **binaries
, cl_int
*binary_status
, cl_program
*program
);
119 cl_int
hc_clCreateProgramWithSource (OCL_PTR
*ocl
, cl_context context
, cl_uint count
, const char **strings
, const size_t *lengths
, cl_program
*program
);
120 cl_int
hc_clEnqueueCopyBuffer (OCL_PTR
*ocl
, cl_command_queue command_queue
, cl_mem src_buffer
, cl_mem dst_buffer
, size_t src_offset
, size_t dst_offset
, size_t cb
, cl_uint num_events_in_wait_list
, const cl_event
*event_wait_list
, cl_event
*event
);
121 cl_int
hc_clEnqueueMapBuffer (OCL_PTR
*ocl
, cl_command_queue command_queue
, cl_mem buffer
, cl_bool blocking_map
, cl_map_flags map_flags
, size_t offset
, size_t cb
, cl_uint num_events_in_wait_list
, const cl_event
*event_wait_list
, cl_event
*event
, void **buf
);
122 cl_int
hc_clEnqueueNDRangeKernel (OCL_PTR
*ocl
, cl_command_queue command_queue
, cl_kernel kernel
, cl_uint work_dim
, const size_t *global_work_offset
, const size_t *global_work_size
, const size_t *local_work_size
, cl_uint num_events_in_wait_list
, const cl_event
*event_wait_list
, cl_event
*event
);
123 cl_int
hc_clEnqueueReadBuffer (OCL_PTR
*ocl
, cl_command_queue command_queue
, cl_mem buffer
, cl_bool blocking_read
, size_t offset
, size_t cb
, void *ptr
, cl_uint num_events_in_wait_list
, const cl_event
*event_wait_list
, cl_event
*event
);
124 cl_int
hc_clEnqueueUnmapMemObject (OCL_PTR
*ocl
, cl_command_queue command_queue
, cl_mem memobj
, void *mapped_ptr
, cl_uint num_events_in_wait_list
, const cl_event
*event_wait_list
, cl_event
*event
);
125 cl_int
hc_clEnqueueWriteBuffer (OCL_PTR
*ocl
, cl_command_queue command_queue
, cl_mem buffer
, cl_bool blocking_write
, size_t offset
, size_t cb
, const void *ptr
, cl_uint num_events_in_wait_list
, const cl_event
*event_wait_list
, cl_event
*event
);
126 cl_int
hc_clFinish (OCL_PTR
*ocl
, cl_command_queue command_queue
);
127 cl_int
hc_clFlush (OCL_PTR
*ocl
, cl_command_queue command_queue
);
128 cl_int
hc_clGetDeviceIDs (OCL_PTR
*ocl
, cl_platform_id platform
, cl_device_type device_type
, cl_uint num_entries
, cl_device_id
*devices
, cl_uint
*num_devices
);
129 cl_int
hc_clGetDeviceInfo (OCL_PTR
*ocl
, cl_device_id device
, cl_device_info param_name
, size_t param_value_size
, void *param_value
, size_t *param_value_size_ret
);
130 cl_int
hc_clGetEventInfo (OCL_PTR
*ocl
, cl_event event
, cl_event_info param_name
, size_t param_value_size
, void *param_value
, size_t *param_value_size_ret
);
131 cl_int
hc_clGetEventProfilingInfo (OCL_PTR
*ocl
, cl_event event
, cl_profiling_info param_name
, size_t param_value_size
, void *param_value
, size_t *param_value_size_ret
);
132 cl_int
hc_clGetKernelWorkGroupInfo (OCL_PTR
*ocl
, cl_kernel kernel
, cl_device_id device
, cl_kernel_work_group_info param_name
, size_t param_value_size
, void *param_value
, size_t *param_value_size_ret
);
133 cl_int
hc_clGetPlatformIDs (OCL_PTR
*ocl
, cl_uint num_entries
, cl_platform_id
*platforms
, cl_uint
*num_platforms
);
134 cl_int
hc_clGetPlatformInfo (OCL_PTR
*ocl
, cl_platform_id platform
, cl_platform_info param_name
, size_t param_value_size
, void *param_value
, size_t *param_value_size_ret
);
135 cl_int
hc_clGetProgramBuildInfo (OCL_PTR
*ocl
, cl_program program
, cl_device_id device
, cl_program_build_info param_name
, size_t param_value_size
, void *param_value
, size_t *param_value_size_ret
);
136 cl_int
hc_clGetProgramInfo (OCL_PTR
*ocl
, cl_program program
, cl_program_info param_name
, size_t param_value_size
, void *param_value
, size_t * param_value_size_ret
);
137 cl_int
hc_clReleaseCommandQueue (OCL_PTR
*ocl
, cl_command_queue command_queue
);
138 cl_int
hc_clReleaseContext (OCL_PTR
*ocl
, cl_context context
);
139 cl_int
hc_clReleaseEvent (OCL_PTR
*ocl
, cl_event event
);
140 cl_int
hc_clReleaseKernel (OCL_PTR
*ocl
, cl_kernel kernel
);
141 cl_int
hc_clReleaseMemObject (OCL_PTR
*ocl
, cl_mem mem
);
142 cl_int
hc_clReleaseProgram (OCL_PTR
*ocl
, cl_program program
);
143 cl_int
hc_clSetKernelArg (OCL_PTR
*ocl
, cl_kernel kernel
, cl_uint arg_index
, size_t arg_size
, const void *arg_value
);
144 cl_int
hc_clWaitForEvents (OCL_PTR
*ocl
, cl_uint num_events
, const cl_event
*event_list
);