Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
52866 views
1
/*****************************************************************************
2
* opencl.h: OpenCL structures and defines
3
*****************************************************************************
4
* Copyright (C) 2012-2016 x264 project
5
*
6
* Authors: Steve Borho <[email protected]>
7
* Anton Mitrofanov <[email protected]>
8
*
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License as published by
11
* the Free Software Foundation; either version 2 of the License, or
12
* (at your option) any later version.
13
*
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
18
*
19
* You should have received a copy of the GNU General Public License
20
* along with this program; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
22
*
23
* This program is also available under a commercial proprietary license.
24
* For more information, contact us at [email protected].
25
*****************************************************************************/
26
27
#ifndef X264_OPENCL_H
28
#define X264_OPENCL_H
29
30
#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
31
#include "extras/cl.h"
32
33
#define OCL_API(ret, attr, name) typedef ret (attr *name##_func)
34
35
/* Platform API */
36
OCL_API(cl_int, CL_API_CALL, clGetPlatformIDs)
37
( cl_uint /* num_entries */,
38
cl_platform_id * /* platforms */,
39
cl_uint * /* num_platforms */);
40
41
OCL_API(cl_int, CL_API_CALL, clGetPlatformInfo)
42
( cl_platform_id /* platform */,
43
cl_platform_info /* param_name */,
44
size_t /* param_value_size */,
45
void * /* param_value */,
46
size_t * /* param_value_size_ret */);
47
48
/* Device APIs */
49
OCL_API(cl_int, CL_API_CALL, clGetDeviceIDs)
50
( cl_platform_id /* platform */,
51
cl_device_type /* device_type */,
52
cl_uint /* num_entries */,
53
cl_device_id * /* devices */,
54
cl_uint * /* num_devices */);
55
56
OCL_API(cl_int, CL_API_CALL, clGetDeviceInfo)
57
( cl_device_id /* device */,
58
cl_device_info /* param_name */,
59
size_t /* param_value_size */,
60
void * /* param_value */,
61
size_t * /* param_value_size_ret */);
62
63
OCL_API(cl_int, CL_API_CALL, clCreateSubDevices)
64
( cl_device_id /* in_device */,
65
const cl_device_partition_property * /* properties */,
66
cl_uint /* num_devices */,
67
cl_device_id * /* out_devices */,
68
cl_uint * /* num_devices_ret */);
69
70
OCL_API(cl_int, CL_API_CALL, clRetainDevice)
71
( cl_device_id /* device */);
72
73
OCL_API(cl_int, CL_API_CALL, clReleaseDevice)
74
( cl_device_id /* device */);
75
76
/* Context APIs */
77
OCL_API(cl_context, CL_API_CALL, clCreateContext)
78
( const cl_context_properties * /* properties */,
79
cl_uint /* num_devices */,
80
const cl_device_id * /* devices */,
81
void (CL_CALLBACK * /* pfn_notify */)(const char *, const void *, size_t, void *),
82
void * /* user_data */,
83
cl_int * /* errcode_ret */);
84
85
OCL_API(cl_context, CL_API_CALL, clCreateContextFromType)
86
( const cl_context_properties * /* properties */,
87
cl_device_type /* device_type */,
88
void (CL_CALLBACK * /* pfn_notify*/ )(const char *, const void *, size_t, void *),
89
void * /* user_data */,
90
cl_int * /* errcode_ret */);
91
92
OCL_API(cl_int, CL_API_CALL, clRetainContext)
93
( cl_context /* context */);
94
95
OCL_API(cl_int, CL_API_CALL, clReleaseContext)
96
( cl_context /* context */);
97
98
OCL_API(cl_int, CL_API_CALL, clGetContextInfo)
99
( cl_context /* context */,
100
cl_context_info /* param_name */,
101
size_t /* param_value_size */,
102
void * /* param_value */,
103
size_t * /* param_value_size_ret */);
104
105
/* Command Queue APIs */
106
OCL_API(cl_command_queue, CL_API_CALL, clCreateCommandQueue)
107
( cl_context /* context */,
108
cl_device_id /* device */,
109
cl_command_queue_properties /* properties */,
110
cl_int * /* errcode_ret */);
111
112
OCL_API(cl_int, CL_API_CALL, clRetainCommandQueue)
113
( cl_command_queue /* command_queue */);
114
115
OCL_API(cl_int, CL_API_CALL, clReleaseCommandQueue)
116
( cl_command_queue /* command_queue */);
117
118
OCL_API(cl_int, CL_API_CALL, clGetCommandQueueInfo)
119
( cl_command_queue /* command_queue */,
120
cl_command_queue_info /* param_name */,
121
size_t /* param_value_size */,
122
void * /* param_value */,
123
size_t * /* param_value_size_ret */);
124
125
/* Memory Object APIs */
126
OCL_API(cl_mem, CL_API_CALL, clCreateBuffer)
127
( cl_context /* context */,
128
cl_mem_flags /* flags */,
129
size_t /* size */,
130
void * /* host_ptr */,
131
cl_int * /* errcode_ret */);
132
133
OCL_API(cl_mem, CL_API_CALL, clCreateSubBuffer)
134
( cl_mem /* buffer */,
135
cl_mem_flags /* flags */,
136
cl_buffer_create_type /* buffer_create_type */,
137
const void * /* buffer_create_info */,
138
cl_int * /* errcode_ret */);
139
140
OCL_API(cl_mem, CL_API_CALL, clCreateImage)
141
( cl_context /* context */,
142
cl_mem_flags /* flags */,
143
const cl_image_format * /* image_format */,
144
const cl_image_desc * /* image_desc */,
145
void * /* host_ptr */,
146
cl_int * /* errcode_ret */);
147
148
OCL_API(cl_int, CL_API_CALL, clRetainMemObject)
149
( cl_mem /* memobj */);
150
151
OCL_API(cl_int, CL_API_CALL, clReleaseMemObject)
152
( cl_mem /* memobj */);
153
154
OCL_API(cl_int, CL_API_CALL, clGetSupportedImageFormats)
155
( cl_context /* context */,
156
cl_mem_flags /* flags */,
157
cl_mem_object_type /* image_type */,
158
cl_uint /* num_entries */,
159
cl_image_format * /* image_formats */,
160
cl_uint * /* num_image_formats */);
161
162
OCL_API(cl_int, CL_API_CALL, clGetMemObjectInfo)
163
( cl_mem /* memobj */,
164
cl_mem_info /* param_name */,
165
size_t /* param_value_size */,
166
void * /* param_value */,
167
size_t * /* param_value_size_ret */);
168
169
OCL_API(cl_int, CL_API_CALL, clGetImageInfo)
170
( cl_mem /* image */,
171
cl_image_info /* param_name */,
172
size_t /* param_value_size */,
173
void * /* param_value */,
174
size_t * /* param_value_size_ret */);
175
176
OCL_API(cl_int, CL_API_CALL, clSetMemObjectDestructorCallback)
177
( cl_mem /* memobj */,
178
void (CL_CALLBACK * /*pfn_notify*/)( cl_mem /* memobj */, void* /*user_data*/),
179
void * /*user_data */ );
180
181
/* Sampler APIs */
182
OCL_API(cl_sampler, CL_API_CALL, clCreateSampler)
183
( cl_context /* context */,
184
cl_bool /* normalized_coords */,
185
cl_addressing_mode /* addressing_mode */,
186
cl_filter_mode /* filter_mode */,
187
cl_int * /* errcode_ret */);
188
189
OCL_API(cl_int, CL_API_CALL, clRetainSampler)
190
( cl_sampler /* sampler */);
191
192
OCL_API(cl_int, CL_API_CALL, clReleaseSampler)
193
( cl_sampler /* sampler */);
194
195
OCL_API(cl_int, CL_API_CALL, clGetSamplerInfo)
196
( cl_sampler /* sampler */,
197
cl_sampler_info /* param_name */,
198
size_t /* param_value_size */,
199
void * /* param_value */,
200
size_t * /* param_value_size_ret */);
201
202
/* Program Object APIs */
203
OCL_API(cl_program, CL_API_CALL, clCreateProgramWithSource)
204
( cl_context /* context */,
205
cl_uint /* count */,
206
const char ** /* strings */,
207
const size_t * /* lengths */,
208
cl_int * /* errcode_ret */);
209
210
OCL_API(cl_program, CL_API_CALL, clCreateProgramWithBinary)
211
( cl_context /* context */,
212
cl_uint /* num_devices */,
213
const cl_device_id * /* device_list */,
214
const size_t * /* lengths */,
215
const unsigned char ** /* binaries */,
216
cl_int * /* binary_status */,
217
cl_int * /* errcode_ret */);
218
219
OCL_API(cl_program, CL_API_CALL, clCreateProgramWithBuiltInKernels)
220
( cl_context /* context */,
221
cl_uint /* num_devices */,
222
const cl_device_id * /* device_list */,
223
const char * /* kernel_names */,
224
cl_int * /* errcode_ret */);
225
226
OCL_API(cl_int, CL_API_CALL, clRetainProgram)
227
( cl_program /* program */);
228
229
OCL_API(cl_int, CL_API_CALL, clReleaseProgram)
230
( cl_program /* program */);
231
232
OCL_API(cl_int, CL_API_CALL, clBuildProgram)
233
( cl_program /* program */,
234
cl_uint /* num_devices */,
235
const cl_device_id * /* device_list */,
236
const char * /* options */,
237
void (CL_CALLBACK * /* pfn_notify */)(cl_program /* program */, void * /* user_data */),
238
void * /* user_data */);
239
240
OCL_API(cl_int, CL_API_CALL, clCompileProgram)
241
( cl_program /* program */,
242
cl_uint /* num_devices */,
243
const cl_device_id * /* device_list */,
244
const char * /* options */,
245
cl_uint /* num_input_headers */,
246
const cl_program * /* input_headers */,
247
const char ** /* header_include_names */,
248
void (CL_CALLBACK * /* pfn_notify */)(cl_program /* program */, void * /* user_data */),
249
void * /* user_data */);
250
251
OCL_API(cl_program, CL_API_CALL, clLinkProgram)
252
( cl_context /* context */,
253
cl_uint /* num_devices */,
254
const cl_device_id * /* device_list */,
255
const char * /* options */,
256
cl_uint /* num_input_programs */,
257
const cl_program * /* input_programs */,
258
void (CL_CALLBACK * /* pfn_notify */)(cl_program /* program */, void * /* user_data */),
259
void * /* user_data */,
260
cl_int * /* errcode_ret */ );
261
262
263
OCL_API(cl_int, CL_API_CALL, clUnloadPlatformCompiler)
264
( cl_platform_id /* platform */);
265
266
OCL_API(cl_int, CL_API_CALL, clGetProgramInfo)
267
( cl_program /* program */,
268
cl_program_info /* param_name */,
269
size_t /* param_value_size */,
270
void * /* param_value */,
271
size_t * /* param_value_size_ret */);
272
273
OCL_API(cl_int, CL_API_CALL, clGetProgramBuildInfo)
274
( cl_program /* program */,
275
cl_device_id /* device */,
276
cl_program_build_info /* param_name */,
277
size_t /* param_value_size */,
278
void * /* param_value */,
279
size_t * /* param_value_size_ret */);
280
281
/* Kernel Object APIs */
282
OCL_API(cl_kernel, CL_API_CALL, clCreateKernel)
283
( cl_program /* program */,
284
const char * /* kernel_name */,
285
cl_int * /* errcode_ret */);
286
287
OCL_API(cl_int, CL_API_CALL, clCreateKernelsInProgram)
288
( cl_program /* program */,
289
cl_uint /* num_kernels */,
290
cl_kernel * /* kernels */,
291
cl_uint * /* num_kernels_ret */);
292
293
OCL_API(cl_int, CL_API_CALL, clRetainKernel)
294
( cl_kernel /* kernel */);
295
296
OCL_API(cl_int, CL_API_CALL, clReleaseKernel)
297
( cl_kernel /* kernel */);
298
299
OCL_API(cl_int, CL_API_CALL, clSetKernelArg)
300
( cl_kernel /* kernel */,
301
cl_uint /* arg_index */,
302
size_t /* arg_size */,
303
const void * /* arg_value */);
304
305
OCL_API(cl_int, CL_API_CALL, clGetKernelInfo)
306
( cl_kernel /* kernel */,
307
cl_kernel_info /* param_name */,
308
size_t /* param_value_size */,
309
void * /* param_value */,
310
size_t * /* param_value_size_ret */);
311
312
OCL_API(cl_int, CL_API_CALL, clGetKernelArgInfo)
313
( cl_kernel /* kernel */,
314
cl_uint /* arg_indx */,
315
cl_kernel_arg_info /* param_name */,
316
size_t /* param_value_size */,
317
void * /* param_value */,
318
size_t * /* param_value_size_ret */);
319
320
OCL_API(cl_int, CL_API_CALL, clGetKernelWorkGroupInfo)
321
( cl_kernel /* kernel */,
322
cl_device_id /* device */,
323
cl_kernel_work_group_info /* param_name */,
324
size_t /* param_value_size */,
325
void * /* param_value */,
326
size_t * /* param_value_size_ret */);
327
328
/* Event Object APIs */
329
OCL_API(cl_int, CL_API_CALL, clWaitForEvents)
330
( cl_uint /* num_events */,
331
const cl_event * /* event_list */);
332
333
OCL_API(cl_int, CL_API_CALL, clGetEventInfo)
334
( cl_event /* event */,
335
cl_event_info /* param_name */,
336
size_t /* param_value_size */,
337
void * /* param_value */,
338
size_t * /* param_value_size_ret */);
339
340
OCL_API(cl_event, CL_API_CALL, clCreateUserEvent)
341
( cl_context /* context */,
342
cl_int * /* errcode_ret */);
343
344
OCL_API(cl_int, CL_API_CALL, clRetainEvent)
345
( cl_event /* event */);
346
347
OCL_API(cl_int, CL_API_CALL, clReleaseEvent)
348
( cl_event /* event */);
349
350
OCL_API(cl_int, CL_API_CALL, clSetUserEventStatus)
351
( cl_event /* event */,
352
cl_int /* execution_status */);
353
354
OCL_API(cl_int, CL_API_CALL, clSetEventCallback)
355
( cl_event /* event */,
356
cl_int /* command_exec_callback_type */,
357
void (CL_CALLBACK * /* pfn_notify */)(cl_event, cl_int, void *),
358
void * /* user_data */);
359
360
/* Profiling APIs */
361
OCL_API(cl_int, CL_API_CALL, clGetEventProfilingInfo)
362
( cl_event /* event */,
363
cl_profiling_info /* param_name */,
364
size_t /* param_value_size */,
365
void * /* param_value */,
366
size_t * /* param_value_size_ret */);
367
368
/* Flush and Finish APIs */
369
OCL_API(cl_int, CL_API_CALL, clFlush)
370
( cl_command_queue /* command_queue */);
371
372
OCL_API(cl_int, CL_API_CALL, clFinish)
373
( cl_command_queue /* command_queue */);
374
375
/* Enqueued Commands APIs */
376
OCL_API(cl_int, CL_API_CALL, clEnqueueReadBuffer)
377
( cl_command_queue /* command_queue */,
378
cl_mem /* buffer */,
379
cl_bool /* blocking_read */,
380
size_t /* offset */,
381
size_t /* size */,
382
void * /* ptr */,
383
cl_uint /* num_events_in_wait_list */,
384
const cl_event * /* event_wait_list */,
385
cl_event * /* event */);
386
387
OCL_API(cl_int, CL_API_CALL, clEnqueueReadBufferRect)
388
( cl_command_queue /* command_queue */,
389
cl_mem /* buffer */,
390
cl_bool /* blocking_read */,
391
const size_t * /* buffer_offset */,
392
const size_t * /* host_offset */,
393
const size_t * /* region */,
394
size_t /* buffer_row_pitch */,
395
size_t /* buffer_slice_pitch */,
396
size_t /* host_row_pitch */,
397
size_t /* host_slice_pitch */,
398
void * /* ptr */,
399
cl_uint /* num_events_in_wait_list */,
400
const cl_event * /* event_wait_list */,
401
cl_event * /* event */);
402
403
OCL_API(cl_int, CL_API_CALL, clEnqueueWriteBuffer)
404
( cl_command_queue /* command_queue */,
405
cl_mem /* buffer */,
406
cl_bool /* blocking_write */,
407
size_t /* offset */,
408
size_t /* size */,
409
const void * /* ptr */,
410
cl_uint /* num_events_in_wait_list */,
411
const cl_event * /* event_wait_list */,
412
cl_event * /* event */);
413
414
OCL_API(cl_int, CL_API_CALL, clEnqueueWriteBufferRect)
415
( cl_command_queue /* command_queue */,
416
cl_mem /* buffer */,
417
cl_bool /* blocking_write */,
418
const size_t * /* buffer_offset */,
419
const size_t * /* host_offset */,
420
const size_t * /* region */,
421
size_t /* buffer_row_pitch */,
422
size_t /* buffer_slice_pitch */,
423
size_t /* host_row_pitch */,
424
size_t /* host_slice_pitch */,
425
const void * /* ptr */,
426
cl_uint /* num_events_in_wait_list */,
427
const cl_event * /* event_wait_list */,
428
cl_event * /* event */);
429
430
OCL_API(cl_int, CL_API_CALL, clEnqueueFillBuffer)
431
( cl_command_queue /* command_queue */,
432
cl_mem /* buffer */,
433
const void * /* pattern */,
434
size_t /* pattern_size */,
435
size_t /* offset */,
436
size_t /* size */,
437
cl_uint /* num_events_in_wait_list */,
438
const cl_event * /* event_wait_list */,
439
cl_event * /* event */);
440
441
OCL_API(cl_int, CL_API_CALL, clEnqueueCopyBuffer)
442
( cl_command_queue /* command_queue */,
443
cl_mem /* src_buffer */,
444
cl_mem /* dst_buffer */,
445
size_t /* src_offset */,
446
size_t /* dst_offset */,
447
size_t /* size */,
448
cl_uint /* num_events_in_wait_list */,
449
const cl_event * /* event_wait_list */,
450
cl_event * /* event */);
451
452
OCL_API(cl_int, CL_API_CALL, clEnqueueCopyBufferRect)
453
( cl_command_queue /* command_queue */,
454
cl_mem /* src_buffer */,
455
cl_mem /* dst_buffer */,
456
const size_t * /* src_origin */,
457
const size_t * /* dst_origin */,
458
const size_t * /* region */,
459
size_t /* src_row_pitch */,
460
size_t /* src_slice_pitch */,
461
size_t /* dst_row_pitch */,
462
size_t /* dst_slice_pitch */,
463
cl_uint /* num_events_in_wait_list */,
464
const cl_event * /* event_wait_list */,
465
cl_event * /* event */);
466
467
OCL_API(cl_int, CL_API_CALL, clEnqueueReadImage)
468
( cl_command_queue /* command_queue */,
469
cl_mem /* image */,
470
cl_bool /* blocking_read */,
471
const size_t * /* origin[3] */,
472
const size_t * /* region[3] */,
473
size_t /* row_pitch */,
474
size_t /* slice_pitch */,
475
void * /* ptr */,
476
cl_uint /* num_events_in_wait_list */,
477
const cl_event * /* event_wait_list */,
478
cl_event * /* event */);
479
480
OCL_API(cl_int, CL_API_CALL, clEnqueueWriteImage)
481
( cl_command_queue /* command_queue */,
482
cl_mem /* image */,
483
cl_bool /* blocking_write */,
484
const size_t * /* origin[3] */,
485
const size_t * /* region[3] */,
486
size_t /* input_row_pitch */,
487
size_t /* input_slice_pitch */,
488
const void * /* ptr */,
489
cl_uint /* num_events_in_wait_list */,
490
const cl_event * /* event_wait_list */,
491
cl_event * /* event */);
492
493
OCL_API(cl_int, CL_API_CALL, clEnqueueFillImage)
494
( cl_command_queue /* command_queue */,
495
cl_mem /* image */,
496
const void * /* fill_color */,
497
const size_t * /* origin[3] */,
498
const size_t * /* region[3] */,
499
cl_uint /* num_events_in_wait_list */,
500
const cl_event * /* event_wait_list */,
501
cl_event * /* event */);
502
503
OCL_API(cl_int, CL_API_CALL, clEnqueueCopyImage)
504
( cl_command_queue /* command_queue */,
505
cl_mem /* src_image */,
506
cl_mem /* dst_image */,
507
const size_t * /* src_origin[3] */,
508
const size_t * /* dst_origin[3] */,
509
const size_t * /* region[3] */,
510
cl_uint /* num_events_in_wait_list */,
511
const cl_event * /* event_wait_list */,
512
cl_event * /* event */);
513
514
OCL_API(cl_int, CL_API_CALL, clEnqueueCopyImageToBuffer)
515
( cl_command_queue /* command_queue */,
516
cl_mem /* src_image */,
517
cl_mem /* dst_buffer */,
518
const size_t * /* src_origin[3] */,
519
const size_t * /* region[3] */,
520
size_t /* dst_offset */,
521
cl_uint /* num_events_in_wait_list */,
522
const cl_event * /* event_wait_list */,
523
cl_event * /* event */);
524
525
OCL_API(cl_int, CL_API_CALL, clEnqueueCopyBufferToImage)
526
( cl_command_queue /* command_queue */,
527
cl_mem /* src_buffer */,
528
cl_mem /* dst_image */,
529
size_t /* src_offset */,
530
const size_t * /* dst_origin[3] */,
531
const size_t * /* region[3] */,
532
cl_uint /* num_events_in_wait_list */,
533
const cl_event * /* event_wait_list */,
534
cl_event * /* event */);
535
536
OCL_API(void *, CL_API_CALL, clEnqueueMapBuffer)
537
( cl_command_queue /* command_queue */,
538
cl_mem /* buffer */,
539
cl_bool /* blocking_map */,
540
cl_map_flags /* map_flags */,
541
size_t /* offset */,
542
size_t /* size */,
543
cl_uint /* num_events_in_wait_list */,
544
const cl_event * /* event_wait_list */,
545
cl_event * /* event */,
546
cl_int * /* errcode_ret */);
547
548
OCL_API(void *, CL_API_CALL, clEnqueueMapImage)
549
( cl_command_queue /* command_queue */,
550
cl_mem /* image */,
551
cl_bool /* blocking_map */,
552
cl_map_flags /* map_flags */,
553
const size_t * /* origin[3] */,
554
const size_t * /* region[3] */,
555
size_t * /* image_row_pitch */,
556
size_t * /* image_slice_pitch */,
557
cl_uint /* num_events_in_wait_list */,
558
const cl_event * /* event_wait_list */,
559
cl_event * /* event */,
560
cl_int * /* errcode_ret */);
561
562
OCL_API(cl_int, CL_API_CALL, clEnqueueUnmapMemObject)
563
( cl_command_queue /* command_queue */,
564
cl_mem /* memobj */,
565
void * /* mapped_ptr */,
566
cl_uint /* num_events_in_wait_list */,
567
const cl_event * /* event_wait_list */,
568
cl_event * /* event */);
569
570
OCL_API(cl_int, CL_API_CALL, clEnqueueMigrateMemObjects)
571
( cl_command_queue /* command_queue */,
572
cl_uint /* num_mem_objects */,
573
const cl_mem * /* mem_objects */,
574
cl_mem_migration_flags /* flags */,
575
cl_uint /* num_events_in_wait_list */,
576
const cl_event * /* event_wait_list */,
577
cl_event * /* event */);
578
579
OCL_API(cl_int, CL_API_CALL, clEnqueueNDRangeKernel)
580
( cl_command_queue /* command_queue */,
581
cl_kernel /* kernel */,
582
cl_uint /* work_dim */,
583
const size_t * /* global_work_offset */,
584
const size_t * /* global_work_size */,
585
const size_t * /* local_work_size */,
586
cl_uint /* num_events_in_wait_list */,
587
const cl_event * /* event_wait_list */,
588
cl_event * /* event */);
589
590
OCL_API(cl_int, CL_API_CALL, clEnqueueTask)
591
( cl_command_queue /* command_queue */,
592
cl_kernel /* kernel */,
593
cl_uint /* num_events_in_wait_list */,
594
const cl_event * /* event_wait_list */,
595
cl_event * /* event */);
596
597
OCL_API(cl_int, CL_API_CALL, clEnqueueNativeKernel)
598
( cl_command_queue /* command_queue */,
599
void (CL_CALLBACK * /*user_func*/)(void *),
600
void * /* args */,
601
size_t /* cb_args */,
602
cl_uint /* num_mem_objects */,
603
const cl_mem * /* mem_list */,
604
const void ** /* args_mem_loc */,
605
cl_uint /* num_events_in_wait_list */,
606
const cl_event * /* event_wait_list */,
607
cl_event * /* event */);
608
609
OCL_API(cl_int, CL_API_CALL, clEnqueueMarkerWithWaitList)
610
( cl_command_queue /* command_queue */,
611
cl_uint /* num_events_in_wait_list */,
612
const cl_event * /* event_wait_list */,
613
cl_event * /* event */);
614
615
OCL_API(cl_int, CL_API_CALL, clEnqueueBarrierWithWaitList)
616
( cl_command_queue /* command_queue */,
617
cl_uint /* num_events_in_wait_list */,
618
const cl_event * /* event_wait_list */,
619
cl_event * /* event */);
620
621
622
/* Extension function access
623
*
624
* Returns the extension function address for the given function name,
625
* or NULL if a valid function can not be found. The client must
626
* check to make sure the address is not NULL, before using or
627
* calling the returned function address.
628
*/
629
OCL_API(void *, CL_API_CALL, clGetExtensionFunctionAddressForPlatform)
630
( cl_platform_id /* platform */,
631
const char * /* func_name */);
632
633
634
// Deprecated OpenCL 1.1 APIs
635
OCL_API(cl_mem, CL_API_CALL, clCreateImage2D)
636
( cl_context /* context */,
637
cl_mem_flags /* flags */,
638
const cl_image_format * /* image_format */,
639
size_t /* image_width */,
640
size_t /* image_height */,
641
size_t /* image_row_pitch */,
642
void * /* host_ptr */,
643
cl_int * /* errcode_ret */);
644
645
OCL_API(cl_mem, CL_API_CALL, clCreateImage3D)
646
( cl_context /* context */,
647
cl_mem_flags /* flags */,
648
const cl_image_format * /* image_format */,
649
size_t /* image_width */,
650
size_t /* image_height */,
651
size_t /* image_depth */,
652
size_t /* image_row_pitch */,
653
size_t /* image_slice_pitch */,
654
void * /* host_ptr */,
655
cl_int * /* errcode_ret */);
656
657
OCL_API(cl_int, CL_API_CALL, clEnqueueMarker)
658
( cl_command_queue /* command_queue */,
659
cl_event * /* event */);
660
661
OCL_API(cl_int, CL_API_CALL, clEnqueueWaitForEvents)
662
( cl_command_queue /* command_queue */,
663
cl_uint /* num_events */,
664
const cl_event * /* event_list */);
665
666
OCL_API(cl_int, CL_API_CALL, clEnqueueBarrier)
667
( cl_command_queue /* command_queue */);
668
669
OCL_API(cl_int, CL_API_CALL, clUnloadCompiler)
670
( void);
671
672
OCL_API(void *, CL_API_CALL, clGetExtensionFunctionAddress)
673
( const char * /* func_name */);
674
675
#define OCL_DECLARE_FUNC(name) name##_func name
676
677
typedef struct
678
{
679
void *library;
680
681
OCL_DECLARE_FUNC( clBuildProgram );
682
OCL_DECLARE_FUNC( clCreateBuffer );
683
OCL_DECLARE_FUNC( clCreateCommandQueue );
684
OCL_DECLARE_FUNC( clCreateContext );
685
OCL_DECLARE_FUNC( clCreateImage2D );
686
OCL_DECLARE_FUNC( clCreateKernel );
687
OCL_DECLARE_FUNC( clCreateProgramWithBinary );
688
OCL_DECLARE_FUNC( clCreateProgramWithSource );
689
OCL_DECLARE_FUNC( clEnqueueCopyBuffer );
690
OCL_DECLARE_FUNC( clEnqueueMapBuffer );
691
OCL_DECLARE_FUNC( clEnqueueNDRangeKernel );
692
OCL_DECLARE_FUNC( clEnqueueReadBuffer );
693
OCL_DECLARE_FUNC( clEnqueueWriteBuffer );
694
OCL_DECLARE_FUNC( clFinish );
695
OCL_DECLARE_FUNC( clGetCommandQueueInfo );
696
OCL_DECLARE_FUNC( clGetDeviceIDs );
697
OCL_DECLARE_FUNC( clGetDeviceInfo );
698
OCL_DECLARE_FUNC( clGetKernelWorkGroupInfo );
699
OCL_DECLARE_FUNC( clGetPlatformIDs );
700
OCL_DECLARE_FUNC( clGetProgramBuildInfo );
701
OCL_DECLARE_FUNC( clGetProgramInfo );
702
OCL_DECLARE_FUNC( clGetSupportedImageFormats );
703
OCL_DECLARE_FUNC( clReleaseCommandQueue );
704
OCL_DECLARE_FUNC( clReleaseContext );
705
OCL_DECLARE_FUNC( clReleaseKernel );
706
OCL_DECLARE_FUNC( clReleaseMemObject );
707
OCL_DECLARE_FUNC( clReleaseProgram );
708
OCL_DECLARE_FUNC( clSetKernelArg );
709
} x264_opencl_function_t;
710
711
/* Number of downscale resolutions to use for motion search */
712
#define NUM_IMAGE_SCALES 4
713
714
/* Number of PCIe copies that can be queued before requiring a flush */
715
#define MAX_FINISH_COPIES 1024
716
717
/* Size (in bytes) of the page-locked buffer used for PCIe xfers */
718
#define PAGE_LOCKED_BUF_SIZE 32 * 1024 * 1024
719
720
typedef struct
721
{
722
x264_opencl_function_t *ocl;
723
724
cl_context context;
725
cl_device_id device;
726
cl_command_queue queue;
727
728
cl_program lookahead_program;
729
cl_int last_buf;
730
731
cl_mem page_locked_buffer;
732
char *page_locked_ptr;
733
int pl_occupancy;
734
735
struct
736
{
737
void *src;
738
void *dest;
739
int bytes;
740
} copies[MAX_FINISH_COPIES];
741
int num_copies;
742
743
int b_device_AMD_SI;
744
int b_fatal_error;
745
int lookahead_thread_pri;
746
int opencl_thread_pri;
747
748
/* downscale lowres luma */
749
cl_kernel downscale_hpel_kernel;
750
cl_kernel downscale_kernel1;
751
cl_kernel downscale_kernel2;
752
cl_mem luma_16x16_image[2];
753
754
/* weightp filtering */
755
cl_kernel weightp_hpel_kernel;
756
cl_kernel weightp_scaled_images_kernel;
757
cl_mem weighted_scaled_images[NUM_IMAGE_SCALES];
758
cl_mem weighted_luma_hpel;
759
760
/* intra */
761
cl_kernel memset_kernel;
762
cl_kernel intra_kernel;
763
cl_kernel rowsum_intra_kernel;
764
cl_mem row_satds[2];
765
766
/* hierarchical motion estimation */
767
cl_kernel hme_kernel;
768
cl_kernel subpel_refine_kernel;
769
cl_mem mv_buffers[2];
770
cl_mem lowres_mv_costs;
771
cl_mem mvp_buffer;
772
773
/* bidir */
774
cl_kernel mode_select_kernel;
775
cl_kernel rowsum_inter_kernel;
776
cl_mem lowres_costs[2];
777
cl_mem frame_stats[2]; /* cost_est, cost_est_aq, intra_mbs */
778
} x264_opencl_t;
779
780
typedef struct
781
{
782
x264_opencl_function_t *ocl;
783
784
cl_mem scaled_image2Ds[NUM_IMAGE_SCALES];
785
cl_mem luma_hpel;
786
cl_mem inv_qscale_factor;
787
cl_mem intra_cost;
788
cl_mem lowres_mvs0;
789
cl_mem lowres_mvs1;
790
cl_mem lowres_mv_costs0;
791
cl_mem lowres_mv_costs1;
792
} x264_frame_opencl_t;
793
794
typedef struct x264_frame x264_frame;
795
796
x264_opencl_function_t *x264_opencl_load_library( void );
797
void x264_opencl_close_library( x264_opencl_function_t *ocl );
798
799
int x264_opencl_lookahead_init( x264_t *h );
800
void x264_opencl_lookahead_delete( x264_t *h );
801
802
void x264_opencl_frame_delete( x264_frame *frame );
803
804
#endif
805
806