Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/libGLESv2/cl_stubs.cpp
1693 views
1
//
2
// Copyright 2021 The ANGLE Project Authors. All rights reserved.
3
// Use of this source code is governed by a BSD-style license that can be
4
// found in the LICENSE file.
5
//
6
// cl_stubs.cpp: Stubs for CL entry points.
7
8
#include "libGLESv2/cl_stubs_autogen.h"
9
10
#include "libGLESv2/proc_table_cl.h"
11
12
#include "libANGLE/CLBuffer.h"
13
#include "libANGLE/CLCommandQueue.h"
14
#include "libANGLE/CLContext.h"
15
#include "libANGLE/CLDevice.h"
16
#include "libANGLE/CLEvent.h"
17
#include "libANGLE/CLImage.h"
18
#include "libANGLE/CLKernel.h"
19
#include "libANGLE/CLMemory.h"
20
#include "libANGLE/CLPlatform.h"
21
#include "libANGLE/CLProgram.h"
22
#include "libANGLE/CLSampler.h"
23
24
#define WARN_NOT_SUPPORTED(command) \
25
do \
26
{ \
27
static bool sWarned = false; \
28
if (!sWarned) \
29
{ \
30
sWarned = true; \
31
WARN() << "OpenCL command " #command " is not (yet) supported"; \
32
} \
33
} while (0)
34
35
namespace cl
36
{
37
38
cl_int IcdGetPlatformIDsKHR(cl_uint num_entries, cl_platform_id *platforms, cl_uint *num_platforms)
39
{
40
return Platform::GetPlatformIDs(num_entries, platforms, num_platforms);
41
}
42
43
cl_int GetPlatformIDs(cl_uint num_entries, cl_platform_id *platforms, cl_uint *num_platforms)
44
{
45
return Platform::GetPlatformIDs(num_entries, platforms, num_platforms);
46
}
47
48
cl_int GetPlatformInfo(cl_platform_id platform,
49
PlatformInfo param_name,
50
size_t param_value_size,
51
void *param_value,
52
size_t *param_value_size_ret)
53
{
54
return Platform::CastOrDefault(platform)->getInfo(param_name, param_value_size, param_value,
55
param_value_size_ret);
56
}
57
58
cl_int GetDeviceIDs(cl_platform_id platform,
59
DeviceType device_type,
60
cl_uint num_entries,
61
cl_device_id *devices,
62
cl_uint *num_devices)
63
{
64
return Platform::CastOrDefault(platform)->getDeviceIDs(device_type, num_entries, devices,
65
num_devices);
66
}
67
68
cl_int GetDeviceInfo(cl_device_id device,
69
DeviceInfo param_name,
70
size_t param_value_size,
71
void *param_value,
72
size_t *param_value_size_ret)
73
{
74
return device->cast<Device>().getInfo(param_name, param_value_size, param_value,
75
param_value_size_ret);
76
}
77
78
cl_int CreateSubDevices(cl_device_id in_device,
79
const cl_device_partition_property *properties,
80
cl_uint num_devices,
81
cl_device_id *out_devices,
82
cl_uint *num_devices_ret)
83
{
84
return in_device->cast<Device>().createSubDevices(properties, num_devices, out_devices,
85
num_devices_ret);
86
}
87
88
cl_int RetainDevice(cl_device_id device)
89
{
90
Device &dev = device->cast<Device>();
91
if (!dev.isRoot())
92
{
93
dev.retain();
94
}
95
return CL_SUCCESS;
96
}
97
98
cl_int ReleaseDevice(cl_device_id device)
99
{
100
Device &dev = device->cast<Device>();
101
if (!dev.isRoot() && dev.release())
102
{
103
delete &dev;
104
}
105
return CL_SUCCESS;
106
}
107
108
cl_int SetDefaultDeviceCommandQueue(cl_context context,
109
cl_device_id device,
110
cl_command_queue command_queue)
111
{
112
WARN_NOT_SUPPORTED(SetDefaultDeviceCommandQueue);
113
return 0;
114
}
115
116
cl_int GetDeviceAndHostTimer(cl_device_id device,
117
cl_ulong *device_timestamp,
118
cl_ulong *host_timestamp)
119
{
120
WARN_NOT_SUPPORTED(GetDeviceAndHostTimer);
121
return 0;
122
}
123
124
cl_int GetHostTimer(cl_device_id device, cl_ulong *host_timestamp)
125
{
126
WARN_NOT_SUPPORTED(GetHostTimer);
127
return 0;
128
}
129
130
cl_context CreateContext(const cl_context_properties *properties,
131
cl_uint num_devices,
132
const cl_device_id *devices,
133
void(CL_CALLBACK *pfn_notify)(const char *errinfo,
134
const void *private_info,
135
size_t cb,
136
void *user_data),
137
void *user_data,
138
cl_int &errorCode)
139
{
140
return Platform::CreateContext(properties, num_devices, devices, pfn_notify, user_data,
141
errorCode);
142
}
143
144
cl_context CreateContextFromType(const cl_context_properties *properties,
145
DeviceType device_type,
146
void(CL_CALLBACK *pfn_notify)(const char *errinfo,
147
const void *private_info,
148
size_t cb,
149
void *user_data),
150
void *user_data,
151
cl_int &errorCode)
152
{
153
return Platform::CreateContextFromType(properties, device_type, pfn_notify, user_data,
154
errorCode);
155
}
156
157
cl_int RetainContext(cl_context context)
158
{
159
context->cast<Context>().retain();
160
return CL_SUCCESS;
161
}
162
163
cl_int ReleaseContext(cl_context context)
164
{
165
Context &ctx = context->cast<Context>();
166
if (ctx.release())
167
{
168
delete &ctx;
169
}
170
return CL_SUCCESS;
171
}
172
173
cl_int GetContextInfo(cl_context context,
174
ContextInfo param_name,
175
size_t param_value_size,
176
void *param_value,
177
size_t *param_value_size_ret)
178
{
179
return context->cast<Context>().getInfo(param_name, param_value_size, param_value,
180
param_value_size_ret);
181
}
182
183
cl_int SetContextDestructorCallback(cl_context context,
184
void(CL_CALLBACK *pfn_notify)(cl_context context,
185
void *user_data),
186
void *user_data)
187
{
188
WARN_NOT_SUPPORTED(SetContextDestructorCallback);
189
return 0;
190
}
191
192
cl_command_queue CreateCommandQueueWithProperties(cl_context context,
193
cl_device_id device,
194
const cl_queue_properties *properties,
195
cl_int &errorCode)
196
{
197
return context->cast<Context>().createCommandQueueWithProperties(device, properties, errorCode);
198
}
199
200
cl_int RetainCommandQueue(cl_command_queue command_queue)
201
{
202
command_queue->cast<CommandQueue>().retain();
203
return CL_SUCCESS;
204
}
205
206
cl_int ReleaseCommandQueue(cl_command_queue command_queue)
207
{
208
CommandQueue &queue = command_queue->cast<CommandQueue>();
209
if (queue.release())
210
{
211
delete &queue;
212
}
213
return CL_SUCCESS;
214
}
215
216
cl_int GetCommandQueueInfo(cl_command_queue command_queue,
217
CommandQueueInfo param_name,
218
size_t param_value_size,
219
void *param_value,
220
size_t *param_value_size_ret)
221
{
222
return command_queue->cast<CommandQueue>().getInfo(param_name, param_value_size, param_value,
223
param_value_size_ret);
224
}
225
226
cl_mem CreateBuffer(cl_context context,
227
MemFlags flags,
228
size_t size,
229
void *host_ptr,
230
cl_int &errorCode)
231
{
232
return context->cast<Context>().createBuffer(nullptr, flags, size, host_ptr, errorCode);
233
}
234
235
cl_mem CreateBufferWithProperties(cl_context context,
236
const cl_mem_properties *properties,
237
MemFlags flags,
238
size_t size,
239
void *host_ptr,
240
cl_int &errorCode)
241
{
242
return context->cast<Context>().createBuffer(properties, flags, size, host_ptr, errorCode);
243
}
244
245
cl_mem CreateSubBuffer(cl_mem buffer,
246
MemFlags flags,
247
cl_buffer_create_type buffer_create_type,
248
const void *buffer_create_info,
249
cl_int &errorCode)
250
{
251
return buffer->cast<Buffer>().createSubBuffer(flags, buffer_create_type, buffer_create_info,
252
errorCode);
253
}
254
255
cl_mem CreateImage(cl_context context,
256
MemFlags flags,
257
const cl_image_format *image_format,
258
const cl_image_desc *image_desc,
259
void *host_ptr,
260
cl_int &errorCode)
261
{
262
return context->cast<Context>().createImage(nullptr, flags, image_format, image_desc, host_ptr,
263
errorCode);
264
}
265
266
cl_mem CreateImageWithProperties(cl_context context,
267
const cl_mem_properties *properties,
268
MemFlags flags,
269
const cl_image_format *image_format,
270
const cl_image_desc *image_desc,
271
void *host_ptr,
272
cl_int &errorCode)
273
{
274
return context->cast<Context>().createImage(properties, flags, image_format, image_desc,
275
host_ptr, errorCode);
276
}
277
278
cl_mem CreatePipe(cl_context context,
279
MemFlags flags,
280
cl_uint pipe_packet_size,
281
cl_uint pipe_max_packets,
282
const cl_pipe_properties *properties,
283
cl_int &errorCode)
284
{
285
WARN_NOT_SUPPORTED(CreatePipe);
286
return 0;
287
}
288
289
cl_int RetainMemObject(cl_mem memobj)
290
{
291
memobj->cast<Memory>().retain();
292
return CL_SUCCESS;
293
}
294
295
cl_int ReleaseMemObject(cl_mem memobj)
296
{
297
Memory &memory = memobj->cast<Memory>();
298
if (memory.release())
299
{
300
delete &memory;
301
}
302
return CL_SUCCESS;
303
}
304
305
cl_int GetSupportedImageFormats(cl_context context,
306
MemFlags flags,
307
MemObjectType image_type,
308
cl_uint num_entries,
309
cl_image_format *image_formats,
310
cl_uint *num_image_formats)
311
{
312
return context->cast<Context>().getSupportedImageFormats(flags, image_type, num_entries,
313
image_formats, num_image_formats);
314
}
315
316
cl_int GetMemObjectInfo(cl_mem memobj,
317
MemInfo param_name,
318
size_t param_value_size,
319
void *param_value,
320
size_t *param_value_size_ret)
321
{
322
return memobj->cast<Memory>().getInfo(param_name, param_value_size, param_value,
323
param_value_size_ret);
324
}
325
326
cl_int GetImageInfo(cl_mem image,
327
ImageInfo param_name,
328
size_t param_value_size,
329
void *param_value,
330
size_t *param_value_size_ret)
331
{
332
return image->cast<Image>().getInfo(param_name, param_value_size, param_value,
333
param_value_size_ret);
334
}
335
336
cl_int GetPipeInfo(cl_mem pipe,
337
PipeInfo param_name,
338
size_t param_value_size,
339
void *param_value,
340
size_t *param_value_size_ret)
341
{
342
WARN_NOT_SUPPORTED(GetPipeInfo);
343
return 0;
344
}
345
346
cl_int SetMemObjectDestructorCallback(cl_mem memobj,
347
void(CL_CALLBACK *pfn_notify)(cl_mem memobj, void *user_data),
348
void *user_data)
349
{
350
return memobj->cast<Memory>().setDestructorCallback(pfn_notify, user_data);
351
}
352
353
void *SVMAlloc(cl_context context, SVM_MemFlags flags, size_t size, cl_uint alignment)
354
{
355
WARN_NOT_SUPPORTED(SVMAlloc);
356
return 0;
357
}
358
359
void SVMFree(cl_context context, void *svm_pointer)
360
{
361
WARN_NOT_SUPPORTED(SVMFree);
362
}
363
364
cl_sampler CreateSamplerWithProperties(cl_context context,
365
const cl_sampler_properties *sampler_properties,
366
cl_int &errorCode)
367
{
368
return context->cast<Context>().createSamplerWithProperties(sampler_properties, errorCode);
369
}
370
371
cl_int RetainSampler(cl_sampler sampler)
372
{
373
sampler->cast<Sampler>().retain();
374
return CL_SUCCESS;
375
}
376
377
cl_int ReleaseSampler(cl_sampler sampler)
378
{
379
Sampler &smplr = sampler->cast<Sampler>();
380
if (smplr.release())
381
{
382
delete &smplr;
383
}
384
return CL_SUCCESS;
385
}
386
387
cl_int GetSamplerInfo(cl_sampler sampler,
388
SamplerInfo param_name,
389
size_t param_value_size,
390
void *param_value,
391
size_t *param_value_size_ret)
392
{
393
return sampler->cast<Sampler>().getInfo(param_name, param_value_size, param_value,
394
param_value_size_ret);
395
}
396
397
cl_program CreateProgramWithSource(cl_context context,
398
cl_uint count,
399
const char **strings,
400
const size_t *lengths,
401
cl_int &errorCode)
402
{
403
return context->cast<Context>().createProgramWithSource(count, strings, lengths, errorCode);
404
}
405
406
cl_program CreateProgramWithBinary(cl_context context,
407
cl_uint num_devices,
408
const cl_device_id *device_list,
409
const size_t *lengths,
410
const unsigned char **binaries,
411
cl_int *binary_status,
412
cl_int &errorCode)
413
{
414
return context->cast<Context>().createProgramWithBinary(num_devices, device_list, lengths,
415
binaries, binary_status, errorCode);
416
}
417
418
cl_program CreateProgramWithBuiltInKernels(cl_context context,
419
cl_uint num_devices,
420
const cl_device_id *device_list,
421
const char *kernel_names,
422
cl_int &errorCode)
423
{
424
return context->cast<Context>().createProgramWithBuiltInKernels(num_devices, device_list,
425
kernel_names, errorCode);
426
}
427
428
cl_program CreateProgramWithIL(cl_context context, const void *il, size_t length, cl_int &errorCode)
429
{
430
return context->cast<Context>().createProgramWithIL(il, length, errorCode);
431
}
432
433
cl_int RetainProgram(cl_program program)
434
{
435
program->cast<Program>().retain();
436
return CL_SUCCESS;
437
}
438
439
cl_int ReleaseProgram(cl_program program)
440
{
441
Program &prog = program->cast<Program>();
442
if (prog.release())
443
{
444
delete &prog;
445
}
446
return CL_SUCCESS;
447
}
448
449
cl_int BuildProgram(cl_program program,
450
cl_uint num_devices,
451
const cl_device_id *device_list,
452
const char *options,
453
void(CL_CALLBACK *pfn_notify)(cl_program program, void *user_data),
454
void *user_data)
455
{
456
return program->cast<Program>().build(num_devices, device_list, options, pfn_notify, user_data);
457
}
458
459
cl_int CompileProgram(cl_program program,
460
cl_uint num_devices,
461
const cl_device_id *device_list,
462
const char *options,
463
cl_uint num_input_headers,
464
const cl_program *input_headers,
465
const char **header_include_names,
466
void(CL_CALLBACK *pfn_notify)(cl_program program, void *user_data),
467
void *user_data)
468
{
469
return program->cast<Program>().compile(num_devices, device_list, options, num_input_headers,
470
input_headers, header_include_names, pfn_notify,
471
user_data);
472
}
473
474
cl_program LinkProgram(cl_context context,
475
cl_uint num_devices,
476
const cl_device_id *device_list,
477
const char *options,
478
cl_uint num_input_programs,
479
const cl_program *input_programs,
480
void(CL_CALLBACK *pfn_notify)(cl_program program, void *user_data),
481
void *user_data,
482
cl_int &errorCode)
483
{
484
return context->cast<Context>().linkProgram(num_devices, device_list, options,
485
num_input_programs, input_programs, pfn_notify,
486
user_data, errorCode);
487
}
488
489
cl_int SetProgramReleaseCallback(cl_program program,
490
void(CL_CALLBACK *pfn_notify)(cl_program program, void *user_data),
491
void *user_data)
492
{
493
WARN_NOT_SUPPORTED(SetProgramReleaseCallback);
494
return 0;
495
}
496
497
cl_int SetProgramSpecializationConstant(cl_program program,
498
cl_uint spec_id,
499
size_t spec_size,
500
const void *spec_value)
501
{
502
WARN_NOT_SUPPORTED(SetProgramSpecializationConstant);
503
return 0;
504
}
505
506
cl_int UnloadPlatformCompiler(cl_platform_id platform)
507
{
508
return platform->cast<Platform>().unloadCompiler();
509
}
510
511
cl_int GetProgramInfo(cl_program program,
512
ProgramInfo param_name,
513
size_t param_value_size,
514
void *param_value,
515
size_t *param_value_size_ret)
516
{
517
return program->cast<Program>().getInfo(param_name, param_value_size, param_value,
518
param_value_size_ret);
519
}
520
521
cl_int GetProgramBuildInfo(cl_program program,
522
cl_device_id device,
523
ProgramBuildInfo param_name,
524
size_t param_value_size,
525
void *param_value,
526
size_t *param_value_size_ret)
527
{
528
return program->cast<Program>().getBuildInfo(device, param_name, param_value_size, param_value,
529
param_value_size_ret);
530
}
531
532
cl_kernel CreateKernel(cl_program program, const char *kernel_name, cl_int &errorCode)
533
{
534
return program->cast<Program>().createKernel(kernel_name, errorCode);
535
}
536
537
cl_int CreateKernelsInProgram(cl_program program,
538
cl_uint num_kernels,
539
cl_kernel *kernels,
540
cl_uint *num_kernels_ret)
541
{
542
return program->cast<Program>().createKernels(num_kernels, kernels, num_kernels_ret);
543
}
544
545
cl_kernel CloneKernel(cl_kernel source_kernel, cl_int &errorCode)
546
{
547
WARN_NOT_SUPPORTED(CloneKernel);
548
return 0;
549
}
550
551
cl_int RetainKernel(cl_kernel kernel)
552
{
553
kernel->cast<Kernel>().retain();
554
return CL_SUCCESS;
555
}
556
557
cl_int ReleaseKernel(cl_kernel kernel)
558
{
559
Kernel &krnl = kernel->cast<Kernel>();
560
if (krnl.release())
561
{
562
delete &krnl;
563
}
564
return CL_SUCCESS;
565
}
566
567
cl_int SetKernelArg(cl_kernel kernel, cl_uint arg_index, size_t arg_size, const void *arg_value)
568
{
569
return kernel->cast<Kernel>().setArg(arg_index, arg_size, arg_value);
570
}
571
572
cl_int SetKernelArgSVMPointer(cl_kernel kernel, cl_uint arg_index, const void *arg_value)
573
{
574
WARN_NOT_SUPPORTED(SetKernelArgSVMPointer);
575
return 0;
576
}
577
578
cl_int SetKernelExecInfo(cl_kernel kernel,
579
KernelExecInfo param_name,
580
size_t param_value_size,
581
const void *param_value)
582
{
583
WARN_NOT_SUPPORTED(SetKernelExecInfo);
584
return 0;
585
}
586
587
cl_int GetKernelInfo(cl_kernel kernel,
588
KernelInfo param_name,
589
size_t param_value_size,
590
void *param_value,
591
size_t *param_value_size_ret)
592
{
593
return kernel->cast<Kernel>().getInfo(param_name, param_value_size, param_value,
594
param_value_size_ret);
595
}
596
597
cl_int GetKernelArgInfo(cl_kernel kernel,
598
cl_uint arg_index,
599
KernelArgInfo param_name,
600
size_t param_value_size,
601
void *param_value,
602
size_t *param_value_size_ret)
603
{
604
return kernel->cast<Kernel>().getArgInfo(arg_index, param_name, param_value_size, param_value,
605
param_value_size_ret);
606
}
607
608
cl_int GetKernelWorkGroupInfo(cl_kernel kernel,
609
cl_device_id device,
610
KernelWorkGroupInfo param_name,
611
size_t param_value_size,
612
void *param_value,
613
size_t *param_value_size_ret)
614
{
615
return kernel->cast<Kernel>().getWorkGroupInfo(device, param_name, param_value_size,
616
param_value, param_value_size_ret);
617
}
618
619
cl_int GetKernelSubGroupInfo(cl_kernel kernel,
620
cl_device_id device,
621
KernelSubGroupInfo param_name,
622
size_t input_value_size,
623
const void *input_value,
624
size_t param_value_size,
625
void *param_value,
626
size_t *param_value_size_ret)
627
{
628
WARN_NOT_SUPPORTED(GetKernelSubGroupInfo);
629
return 0;
630
}
631
632
cl_int WaitForEvents(cl_uint num_events, const cl_event *event_list)
633
{
634
return (*event_list)->cast<Event>().getContext().waitForEvents(num_events, event_list);
635
}
636
637
cl_int GetEventInfo(cl_event event,
638
EventInfo param_name,
639
size_t param_value_size,
640
void *param_value,
641
size_t *param_value_size_ret)
642
{
643
return event->cast<Event>().getInfo(param_name, param_value_size, param_value,
644
param_value_size_ret);
645
}
646
647
cl_event CreateUserEvent(cl_context context, cl_int &errorCode)
648
{
649
return context->cast<Context>().createUserEvent(errorCode);
650
}
651
652
cl_int RetainEvent(cl_event event)
653
{
654
event->cast<Event>().retain();
655
return CL_SUCCESS;
656
}
657
658
cl_int ReleaseEvent(cl_event event)
659
{
660
Event &evt = event->cast<Event>();
661
if (evt.release())
662
{
663
delete &evt;
664
}
665
return CL_SUCCESS;
666
}
667
668
cl_int SetUserEventStatus(cl_event event, cl_int execution_status)
669
{
670
return event->cast<Event>().setUserEventStatus(execution_status);
671
}
672
673
cl_int SetEventCallback(cl_event event,
674
cl_int command_exec_callback_type,
675
void(CL_CALLBACK *pfn_notify)(cl_event event,
676
cl_int event_command_status,
677
void *user_data),
678
void *user_data)
679
{
680
return event->cast<Event>().setCallback(command_exec_callback_type, pfn_notify, user_data);
681
}
682
683
cl_int GetEventProfilingInfo(cl_event event,
684
ProfilingInfo param_name,
685
size_t param_value_size,
686
void *param_value,
687
size_t *param_value_size_ret)
688
{
689
return event->cast<Event>().getProfilingInfo(param_name, param_value_size, param_value,
690
param_value_size_ret);
691
}
692
693
cl_int Flush(cl_command_queue command_queue)
694
{
695
return command_queue->cast<CommandQueue>().flush();
696
}
697
698
cl_int Finish(cl_command_queue command_queue)
699
{
700
return command_queue->cast<CommandQueue>().finish();
701
}
702
703
cl_int EnqueueReadBuffer(cl_command_queue command_queue,
704
cl_mem buffer,
705
cl_bool blocking_read,
706
size_t offset,
707
size_t size,
708
void *ptr,
709
cl_uint num_events_in_wait_list,
710
const cl_event *event_wait_list,
711
cl_event *event)
712
{
713
return command_queue->cast<CommandQueue>().enqueueReadBuffer(
714
buffer, blocking_read, offset, size, ptr, num_events_in_wait_list, event_wait_list, event);
715
}
716
717
cl_int EnqueueReadBufferRect(cl_command_queue command_queue,
718
cl_mem buffer,
719
cl_bool blocking_read,
720
const size_t *buffer_origin,
721
const size_t *host_origin,
722
const size_t *region,
723
size_t buffer_row_pitch,
724
size_t buffer_slice_pitch,
725
size_t host_row_pitch,
726
size_t host_slice_pitch,
727
void *ptr,
728
cl_uint num_events_in_wait_list,
729
const cl_event *event_wait_list,
730
cl_event *event)
731
{
732
return command_queue->cast<CommandQueue>().enqueueReadBufferRect(
733
buffer, blocking_read, buffer_origin, host_origin, region, buffer_row_pitch,
734
buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events_in_wait_list,
735
event_wait_list, event);
736
}
737
738
cl_int EnqueueWriteBuffer(cl_command_queue command_queue,
739
cl_mem buffer,
740
cl_bool blocking_write,
741
size_t offset,
742
size_t size,
743
const void *ptr,
744
cl_uint num_events_in_wait_list,
745
const cl_event *event_wait_list,
746
cl_event *event)
747
{
748
return command_queue->cast<CommandQueue>().enqueueWriteBuffer(
749
buffer, blocking_write, offset, size, ptr, num_events_in_wait_list, event_wait_list, event);
750
}
751
752
cl_int EnqueueWriteBufferRect(cl_command_queue command_queue,
753
cl_mem buffer,
754
cl_bool blocking_write,
755
const size_t *buffer_origin,
756
const size_t *host_origin,
757
const size_t *region,
758
size_t buffer_row_pitch,
759
size_t buffer_slice_pitch,
760
size_t host_row_pitch,
761
size_t host_slice_pitch,
762
const void *ptr,
763
cl_uint num_events_in_wait_list,
764
const cl_event *event_wait_list,
765
cl_event *event)
766
{
767
return command_queue->cast<CommandQueue>().enqueueWriteBufferRect(
768
buffer, blocking_write, buffer_origin, host_origin, region, buffer_row_pitch,
769
buffer_slice_pitch, host_row_pitch, host_slice_pitch, ptr, num_events_in_wait_list,
770
event_wait_list, event);
771
}
772
773
cl_int EnqueueFillBuffer(cl_command_queue command_queue,
774
cl_mem buffer,
775
const void *pattern,
776
size_t pattern_size,
777
size_t offset,
778
size_t size,
779
cl_uint num_events_in_wait_list,
780
const cl_event *event_wait_list,
781
cl_event *event)
782
{
783
return command_queue->cast<CommandQueue>().enqueueFillBuffer(
784
buffer, pattern, pattern_size, offset, size, num_events_in_wait_list, event_wait_list,
785
event);
786
}
787
788
cl_int EnqueueCopyBuffer(cl_command_queue command_queue,
789
cl_mem src_buffer,
790
cl_mem dst_buffer,
791
size_t src_offset,
792
size_t dst_offset,
793
size_t size,
794
cl_uint num_events_in_wait_list,
795
const cl_event *event_wait_list,
796
cl_event *event)
797
{
798
return command_queue->cast<CommandQueue>().enqueueCopyBuffer(
799
src_buffer, dst_buffer, src_offset, dst_offset, size, num_events_in_wait_list,
800
event_wait_list, event);
801
}
802
803
cl_int EnqueueCopyBufferRect(cl_command_queue command_queue,
804
cl_mem src_buffer,
805
cl_mem dst_buffer,
806
const size_t *src_origin,
807
const size_t *dst_origin,
808
const size_t *region,
809
size_t src_row_pitch,
810
size_t src_slice_pitch,
811
size_t dst_row_pitch,
812
size_t dst_slice_pitch,
813
cl_uint num_events_in_wait_list,
814
const cl_event *event_wait_list,
815
cl_event *event)
816
{
817
return command_queue->cast<CommandQueue>().enqueueCopyBufferRect(
818
src_buffer, dst_buffer, src_origin, dst_origin, region, src_row_pitch, src_slice_pitch,
819
dst_row_pitch, dst_slice_pitch, num_events_in_wait_list, event_wait_list, event);
820
}
821
822
cl_int EnqueueReadImage(cl_command_queue command_queue,
823
cl_mem image,
824
cl_bool blocking_read,
825
const size_t *origin,
826
const size_t *region,
827
size_t row_pitch,
828
size_t slice_pitch,
829
void *ptr,
830
cl_uint num_events_in_wait_list,
831
const cl_event *event_wait_list,
832
cl_event *event)
833
{
834
return command_queue->cast<CommandQueue>().enqueueReadImage(
835
image, blocking_read, origin, region, row_pitch, slice_pitch, ptr, num_events_in_wait_list,
836
event_wait_list, event);
837
}
838
839
cl_int EnqueueWriteImage(cl_command_queue command_queue,
840
cl_mem image,
841
cl_bool blocking_write,
842
const size_t *origin,
843
const size_t *region,
844
size_t input_row_pitch,
845
size_t input_slice_pitch,
846
const void *ptr,
847
cl_uint num_events_in_wait_list,
848
const cl_event *event_wait_list,
849
cl_event *event)
850
{
851
return command_queue->cast<CommandQueue>().enqueueWriteImage(
852
image, blocking_write, origin, region, input_row_pitch, input_slice_pitch, ptr,
853
num_events_in_wait_list, event_wait_list, event);
854
}
855
856
cl_int EnqueueFillImage(cl_command_queue command_queue,
857
cl_mem image,
858
const void *fill_color,
859
const size_t *origin,
860
const size_t *region,
861
cl_uint num_events_in_wait_list,
862
const cl_event *event_wait_list,
863
cl_event *event)
864
{
865
return command_queue->cast<CommandQueue>().enqueueFillImage(
866
image, fill_color, origin, region, num_events_in_wait_list, event_wait_list, event);
867
}
868
869
cl_int EnqueueCopyImage(cl_command_queue command_queue,
870
cl_mem src_image,
871
cl_mem dst_image,
872
const size_t *src_origin,
873
const size_t *dst_origin,
874
const size_t *region,
875
cl_uint num_events_in_wait_list,
876
const cl_event *event_wait_list,
877
cl_event *event)
878
{
879
return command_queue->cast<CommandQueue>().enqueueCopyImage(
880
src_image, dst_image, src_origin, dst_origin, region, num_events_in_wait_list,
881
event_wait_list, event);
882
}
883
884
cl_int EnqueueCopyImageToBuffer(cl_command_queue command_queue,
885
cl_mem src_image,
886
cl_mem dst_buffer,
887
const size_t *src_origin,
888
const size_t *region,
889
size_t dst_offset,
890
cl_uint num_events_in_wait_list,
891
const cl_event *event_wait_list,
892
cl_event *event)
893
{
894
return command_queue->cast<CommandQueue>().enqueueCopyImageToBuffer(
895
src_image, dst_buffer, src_origin, region, dst_offset, num_events_in_wait_list,
896
event_wait_list, event);
897
}
898
899
cl_int EnqueueCopyBufferToImage(cl_command_queue command_queue,
900
cl_mem src_buffer,
901
cl_mem dst_image,
902
size_t src_offset,
903
const size_t *dst_origin,
904
const size_t *region,
905
cl_uint num_events_in_wait_list,
906
const cl_event *event_wait_list,
907
cl_event *event)
908
{
909
return command_queue->cast<CommandQueue>().enqueueCopyBufferToImage(
910
src_buffer, dst_image, src_offset, dst_origin, region, num_events_in_wait_list,
911
event_wait_list, event);
912
}
913
914
void *EnqueueMapBuffer(cl_command_queue command_queue,
915
cl_mem buffer,
916
cl_bool blocking_map,
917
MapFlags map_flags,
918
size_t offset,
919
size_t size,
920
cl_uint num_events_in_wait_list,
921
const cl_event *event_wait_list,
922
cl_event *event,
923
cl_int &errorCode)
924
{
925
return command_queue->cast<CommandQueue>().enqueueMapBuffer(
926
buffer, blocking_map, map_flags, offset, size, num_events_in_wait_list, event_wait_list,
927
event, errorCode);
928
}
929
930
void *EnqueueMapImage(cl_command_queue command_queue,
931
cl_mem image,
932
cl_bool blocking_map,
933
MapFlags map_flags,
934
const size_t *origin,
935
const size_t *region,
936
size_t *image_row_pitch,
937
size_t *image_slice_pitch,
938
cl_uint num_events_in_wait_list,
939
const cl_event *event_wait_list,
940
cl_event *event,
941
cl_int &errorCode)
942
{
943
return command_queue->cast<CommandQueue>().enqueueMapImage(
944
image, blocking_map, map_flags, origin, region, image_row_pitch, image_slice_pitch,
945
num_events_in_wait_list, event_wait_list, event, errorCode);
946
}
947
948
cl_int EnqueueUnmapMemObject(cl_command_queue command_queue,
949
cl_mem memobj,
950
void *mapped_ptr,
951
cl_uint num_events_in_wait_list,
952
const cl_event *event_wait_list,
953
cl_event *event)
954
{
955
return command_queue->cast<CommandQueue>().enqueueUnmapMemObject(
956
memobj, mapped_ptr, num_events_in_wait_list, event_wait_list, event);
957
}
958
959
cl_int EnqueueMigrateMemObjects(cl_command_queue command_queue,
960
cl_uint num_mem_objects,
961
const cl_mem *mem_objects,
962
MemMigrationFlags flags,
963
cl_uint num_events_in_wait_list,
964
const cl_event *event_wait_list,
965
cl_event *event)
966
{
967
return command_queue->cast<CommandQueue>().enqueueMigrateMemObjects(
968
num_mem_objects, mem_objects, flags, num_events_in_wait_list, event_wait_list, event);
969
}
970
971
cl_int EnqueueNDRangeKernel(cl_command_queue command_queue,
972
cl_kernel kernel,
973
cl_uint work_dim,
974
const size_t *global_work_offset,
975
const size_t *global_work_size,
976
const size_t *local_work_size,
977
cl_uint num_events_in_wait_list,
978
const cl_event *event_wait_list,
979
cl_event *event)
980
{
981
return command_queue->cast<CommandQueue>().enqueueNDRangeKernel(
982
kernel, work_dim, global_work_offset, global_work_size, local_work_size,
983
num_events_in_wait_list, event_wait_list, event);
984
}
985
986
cl_int EnqueueNativeKernel(cl_command_queue command_queue,
987
void(CL_CALLBACK *user_func)(void *),
988
void *args,
989
size_t cb_args,
990
cl_uint num_mem_objects,
991
const cl_mem *mem_list,
992
const void **args_mem_loc,
993
cl_uint num_events_in_wait_list,
994
const cl_event *event_wait_list,
995
cl_event *event)
996
{
997
return command_queue->cast<CommandQueue>().enqueueNativeKernel(
998
user_func, args, cb_args, num_mem_objects, mem_list, args_mem_loc, num_events_in_wait_list,
999
event_wait_list, event);
1000
}
1001
1002
cl_int EnqueueMarkerWithWaitList(cl_command_queue command_queue,
1003
cl_uint num_events_in_wait_list,
1004
const cl_event *event_wait_list,
1005
cl_event *event)
1006
{
1007
return command_queue->cast<CommandQueue>().enqueueMarkerWithWaitList(num_events_in_wait_list,
1008
event_wait_list, event);
1009
}
1010
1011
cl_int EnqueueBarrierWithWaitList(cl_command_queue command_queue,
1012
cl_uint num_events_in_wait_list,
1013
const cl_event *event_wait_list,
1014
cl_event *event)
1015
{
1016
return command_queue->cast<CommandQueue>().enqueueBarrierWithWaitList(num_events_in_wait_list,
1017
event_wait_list, event);
1018
}
1019
1020
cl_int EnqueueSVMFree(cl_command_queue command_queue,
1021
cl_uint num_svm_pointers,
1022
void *svm_pointers[],
1023
void(CL_CALLBACK *pfn_free_func)(cl_command_queue queue,
1024
cl_uint num_svm_pointers,
1025
void *svm_pointers[],
1026
void *user_data),
1027
void *user_data,
1028
cl_uint num_events_in_wait_list,
1029
const cl_event *event_wait_list,
1030
cl_event *event)
1031
{
1032
WARN_NOT_SUPPORTED(EnqueueSVMFree);
1033
return 0;
1034
}
1035
1036
cl_int EnqueueSVMMemcpy(cl_command_queue command_queue,
1037
cl_bool blocking_copy,
1038
void *dst_ptr,
1039
const void *src_ptr,
1040
size_t size,
1041
cl_uint num_events_in_wait_list,
1042
const cl_event *event_wait_list,
1043
cl_event *event)
1044
{
1045
WARN_NOT_SUPPORTED(EnqueueSVMMemcpy);
1046
return 0;
1047
}
1048
1049
cl_int EnqueueSVMMemFill(cl_command_queue command_queue,
1050
void *svm_ptr,
1051
const void *pattern,
1052
size_t pattern_size,
1053
size_t size,
1054
cl_uint num_events_in_wait_list,
1055
const cl_event *event_wait_list,
1056
cl_event *event)
1057
{
1058
WARN_NOT_SUPPORTED(EnqueueSVMMemFill);
1059
return 0;
1060
}
1061
1062
cl_int EnqueueSVMMap(cl_command_queue command_queue,
1063
cl_bool blocking_map,
1064
MapFlags flags,
1065
void *svm_ptr,
1066
size_t size,
1067
cl_uint num_events_in_wait_list,
1068
const cl_event *event_wait_list,
1069
cl_event *event)
1070
{
1071
WARN_NOT_SUPPORTED(EnqueueSVMMap);
1072
return 0;
1073
}
1074
1075
cl_int EnqueueSVMUnmap(cl_command_queue command_queue,
1076
void *svm_ptr,
1077
cl_uint num_events_in_wait_list,
1078
const cl_event *event_wait_list,
1079
cl_event *event)
1080
{
1081
WARN_NOT_SUPPORTED(EnqueueSVMUnmap);
1082
return 0;
1083
}
1084
1085
cl_int EnqueueSVMMigrateMem(cl_command_queue command_queue,
1086
cl_uint num_svm_pointers,
1087
const void **svm_pointers,
1088
const size_t *sizes,
1089
MemMigrationFlags flags,
1090
cl_uint num_events_in_wait_list,
1091
const cl_event *event_wait_list,
1092
cl_event *event)
1093
{
1094
WARN_NOT_SUPPORTED(EnqueueSVMMigrateMem);
1095
return 0;
1096
}
1097
1098
void *GetExtensionFunctionAddressForPlatform(cl_platform_id platform, const char *func_name)
1099
{
1100
return GetExtensionFunctionAddress(func_name);
1101
}
1102
1103
cl_int SetCommandQueueProperty(cl_command_queue command_queue,
1104
CommandQueueProperties properties,
1105
cl_bool enable,
1106
cl_command_queue_properties *old_properties)
1107
{
1108
return command_queue->cast<CommandQueue>().setProperty(properties, enable, old_properties);
1109
}
1110
1111
cl_mem CreateImage2D(cl_context context,
1112
MemFlags flags,
1113
const cl_image_format *image_format,
1114
size_t image_width,
1115
size_t image_height,
1116
size_t image_row_pitch,
1117
void *host_ptr,
1118
cl_int &errorCode)
1119
{
1120
return context->cast<Context>().createImage2D(flags, image_format, image_width, image_height,
1121
image_row_pitch, host_ptr, errorCode);
1122
}
1123
1124
cl_mem CreateImage3D(cl_context context,
1125
MemFlags flags,
1126
const cl_image_format *image_format,
1127
size_t image_width,
1128
size_t image_height,
1129
size_t image_depth,
1130
size_t image_row_pitch,
1131
size_t image_slice_pitch,
1132
void *host_ptr,
1133
cl_int &errorCode)
1134
{
1135
return context->cast<Context>().createImage3D(flags, image_format, image_width, image_height,
1136
image_depth, image_row_pitch, image_slice_pitch,
1137
host_ptr, errorCode);
1138
}
1139
1140
cl_int EnqueueMarker(cl_command_queue command_queue, cl_event *event)
1141
{
1142
return command_queue->cast<CommandQueue>().enqueueMarker(event);
1143
}
1144
1145
cl_int EnqueueWaitForEvents(cl_command_queue command_queue,
1146
cl_uint num_events,
1147
const cl_event *event_list)
1148
{
1149
return command_queue->cast<CommandQueue>().enqueueWaitForEvents(num_events, event_list);
1150
}
1151
1152
cl_int EnqueueBarrier(cl_command_queue command_queue)
1153
{
1154
return command_queue->cast<CommandQueue>().enqueueBarrier();
1155
}
1156
1157
cl_int UnloadCompiler()
1158
{
1159
Platform *const platform = Platform::GetDefault();
1160
return platform != nullptr ? platform->unloadCompiler() : CL_SUCCESS;
1161
}
1162
1163
void *GetExtensionFunctionAddress(const char *func_name)
1164
{
1165
if (func_name == nullptr)
1166
{
1167
return nullptr;
1168
}
1169
const ProcTable &procTable = GetProcTable();
1170
const auto it = procTable.find(func_name);
1171
return it != procTable.cend() ? it->second : nullptr;
1172
}
1173
1174
cl_command_queue CreateCommandQueue(cl_context context,
1175
cl_device_id device,
1176
CommandQueueProperties properties,
1177
cl_int &errorCode)
1178
{
1179
return context->cast<Context>().createCommandQueue(device, properties, errorCode);
1180
}
1181
1182
cl_sampler CreateSampler(cl_context context,
1183
cl_bool normalized_coords,
1184
AddressingMode addressing_mode,
1185
FilterMode filter_mode,
1186
cl_int &errorCode)
1187
{
1188
return context->cast<Context>().createSampler(normalized_coords, addressing_mode, filter_mode,
1189
errorCode);
1190
}
1191
1192
cl_int EnqueueTask(cl_command_queue command_queue,
1193
cl_kernel kernel,
1194
cl_uint num_events_in_wait_list,
1195
const cl_event *event_wait_list,
1196
cl_event *event)
1197
{
1198
return command_queue->cast<CommandQueue>().enqueueTask(kernel, num_events_in_wait_list,
1199
event_wait_list, event);
1200
}
1201
1202
} // namespace cl
1203
1204