xref: /aosp_15_r20/external/angle/src/common/PackedCLEnums_autogen.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_packed_gl_enums.py using data from packed_cl_enums.json.
3 //
4 // Copyright 2017 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // PackedCLEnums_autogen.cpp:
9 //   Implements ANGLE-specific enums classes for CLenums and functions operating
10 //   on them.
11 
12 #include "common/PackedCLEnums_autogen.h"
13 #include "common/debug.h"
14 
15 namespace cl
16 {
17 
18 template <>
FromCLenum(CLenum from)19 AddressingMode FromCLenum<AddressingMode>(CLenum from)
20 {
21     switch (from)
22     {
23         case CL_ADDRESS_NONE:
24             return AddressingMode::None;
25         case CL_ADDRESS_CLAMP_TO_EDGE:
26             return AddressingMode::ClampToEdge;
27         case CL_ADDRESS_CLAMP:
28             return AddressingMode::Clamp;
29         case CL_ADDRESS_REPEAT:
30             return AddressingMode::Repeat;
31         case CL_ADDRESS_MIRRORED_REPEAT:
32             return AddressingMode::MirroredRepeat;
33         default:
34             return AddressingMode::InvalidEnum;
35     }
36 }
37 
ToCLenum(AddressingMode from)38 CLenum ToCLenum(AddressingMode from)
39 {
40     switch (from)
41     {
42         case AddressingMode::None:
43             return CL_ADDRESS_NONE;
44         case AddressingMode::ClampToEdge:
45             return CL_ADDRESS_CLAMP_TO_EDGE;
46         case AddressingMode::Clamp:
47             return CL_ADDRESS_CLAMP;
48         case AddressingMode::Repeat:
49             return CL_ADDRESS_REPEAT;
50         case AddressingMode::MirroredRepeat:
51             return CL_ADDRESS_MIRRORED_REPEAT;
52         default:
53             UNREACHABLE();
54             return 0;
55     }
56 }
57 
operator <<(std::ostream & os,AddressingMode value)58 std::ostream &operator<<(std::ostream &os, AddressingMode value)
59 {
60     switch (value)
61     {
62         case AddressingMode::None:
63             os << "CL_ADDRESS_NONE";
64             break;
65         case AddressingMode::ClampToEdge:
66             os << "CL_ADDRESS_CLAMP_TO_EDGE";
67             break;
68         case AddressingMode::Clamp:
69             os << "CL_ADDRESS_CLAMP";
70             break;
71         case AddressingMode::Repeat:
72             os << "CL_ADDRESS_REPEAT";
73             break;
74         case AddressingMode::MirroredRepeat:
75             os << "CL_ADDRESS_MIRRORED_REPEAT";
76             break;
77         default:
78             os << "GL_INVALID_ENUM";
79             break;
80     }
81     return os;
82 }
83 
84 template <>
FromCLenum(CLenum from)85 CommandQueueInfo FromCLenum<CommandQueueInfo>(CLenum from)
86 {
87     switch (from)
88     {
89         case CL_QUEUE_CONTEXT:
90             return CommandQueueInfo::Context;
91         case CL_QUEUE_DEVICE:
92             return CommandQueueInfo::Device;
93         case CL_QUEUE_REFERENCE_COUNT:
94             return CommandQueueInfo::ReferenceCount;
95         case CL_QUEUE_PROPERTIES:
96             return CommandQueueInfo::Properties;
97         case CL_QUEUE_SIZE:
98             return CommandQueueInfo::Size;
99         case CL_QUEUE_DEVICE_DEFAULT:
100             return CommandQueueInfo::DeviceDefault;
101         case CL_QUEUE_PROPERTIES_ARRAY:
102             return CommandQueueInfo::PropertiesArray;
103         default:
104             return CommandQueueInfo::InvalidEnum;
105     }
106 }
107 
ToCLenum(CommandQueueInfo from)108 CLenum ToCLenum(CommandQueueInfo from)
109 {
110     switch (from)
111     {
112         case CommandQueueInfo::Context:
113             return CL_QUEUE_CONTEXT;
114         case CommandQueueInfo::Device:
115             return CL_QUEUE_DEVICE;
116         case CommandQueueInfo::ReferenceCount:
117             return CL_QUEUE_REFERENCE_COUNT;
118         case CommandQueueInfo::Properties:
119             return CL_QUEUE_PROPERTIES;
120         case CommandQueueInfo::Size:
121             return CL_QUEUE_SIZE;
122         case CommandQueueInfo::DeviceDefault:
123             return CL_QUEUE_DEVICE_DEFAULT;
124         case CommandQueueInfo::PropertiesArray:
125             return CL_QUEUE_PROPERTIES_ARRAY;
126         default:
127             UNREACHABLE();
128             return 0;
129     }
130 }
131 
operator <<(std::ostream & os,CommandQueueInfo value)132 std::ostream &operator<<(std::ostream &os, CommandQueueInfo value)
133 {
134     switch (value)
135     {
136         case CommandQueueInfo::Context:
137             os << "CL_QUEUE_CONTEXT";
138             break;
139         case CommandQueueInfo::Device:
140             os << "CL_QUEUE_DEVICE";
141             break;
142         case CommandQueueInfo::ReferenceCount:
143             os << "CL_QUEUE_REFERENCE_COUNT";
144             break;
145         case CommandQueueInfo::Properties:
146             os << "CL_QUEUE_PROPERTIES";
147             break;
148         case CommandQueueInfo::Size:
149             os << "CL_QUEUE_SIZE";
150             break;
151         case CommandQueueInfo::DeviceDefault:
152             os << "CL_QUEUE_DEVICE_DEFAULT";
153             break;
154         case CommandQueueInfo::PropertiesArray:
155             os << "CL_QUEUE_PROPERTIES_ARRAY";
156             break;
157         default:
158             os << "GL_INVALID_ENUM";
159             break;
160     }
161     return os;
162 }
163 
164 template <>
FromCLenum(CLenum from)165 ContextInfo FromCLenum<ContextInfo>(CLenum from)
166 {
167     switch (from)
168     {
169         case CL_CONTEXT_REFERENCE_COUNT:
170             return ContextInfo::ReferenceCount;
171         case CL_CONTEXT_DEVICES:
172             return ContextInfo::Devices;
173         case CL_CONTEXT_PROPERTIES:
174             return ContextInfo::Properties;
175         case CL_CONTEXT_NUM_DEVICES:
176             return ContextInfo::NumDevices;
177         default:
178             return ContextInfo::InvalidEnum;
179     }
180 }
181 
ToCLenum(ContextInfo from)182 CLenum ToCLenum(ContextInfo from)
183 {
184     switch (from)
185     {
186         case ContextInfo::ReferenceCount:
187             return CL_CONTEXT_REFERENCE_COUNT;
188         case ContextInfo::Devices:
189             return CL_CONTEXT_DEVICES;
190         case ContextInfo::Properties:
191             return CL_CONTEXT_PROPERTIES;
192         case ContextInfo::NumDevices:
193             return CL_CONTEXT_NUM_DEVICES;
194         default:
195             UNREACHABLE();
196             return 0;
197     }
198 }
199 
operator <<(std::ostream & os,ContextInfo value)200 std::ostream &operator<<(std::ostream &os, ContextInfo value)
201 {
202     switch (value)
203     {
204         case ContextInfo::ReferenceCount:
205             os << "CL_CONTEXT_REFERENCE_COUNT";
206             break;
207         case ContextInfo::Devices:
208             os << "CL_CONTEXT_DEVICES";
209             break;
210         case ContextInfo::Properties:
211             os << "CL_CONTEXT_PROPERTIES";
212             break;
213         case ContextInfo::NumDevices:
214             os << "CL_CONTEXT_NUM_DEVICES";
215             break;
216         default:
217             os << "GL_INVALID_ENUM";
218             break;
219     }
220     return os;
221 }
222 
223 template <>
FromCLenum(CLenum from)224 DeviceInfo FromCLenum<DeviceInfo>(CLenum from)
225 {
226     switch (from)
227     {
228         case CL_DEVICE_TYPE:
229             return DeviceInfo::Type;
230         case CL_DEVICE_VENDOR_ID:
231             return DeviceInfo::VendorID;
232         case CL_DEVICE_MAX_COMPUTE_UNITS:
233             return DeviceInfo::MaxComputeUnits;
234         case CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:
235             return DeviceInfo::MaxWorkItemDimensions;
236         case CL_DEVICE_MAX_WORK_GROUP_SIZE:
237             return DeviceInfo::MaxWorkGroupSize;
238         case CL_DEVICE_MAX_WORK_ITEM_SIZES:
239             return DeviceInfo::MaxWorkItemSizes;
240         case CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR:
241             return DeviceInfo::PreferredVectorWidthChar;
242         case CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT:
243             return DeviceInfo::PreferredVectorWidthShort;
244         case CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT:
245             return DeviceInfo::PreferredVectorWidthInt;
246         case CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG:
247             return DeviceInfo::PreferredVectorWidthLong;
248         case CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT:
249             return DeviceInfo::PreferredVectorWidthFloat;
250         case CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE:
251             return DeviceInfo::PreferredVectorWidthDouble;
252         case CL_DEVICE_MAX_CLOCK_FREQUENCY:
253             return DeviceInfo::MaxClockFrequency;
254         case CL_DEVICE_ADDRESS_BITS:
255             return DeviceInfo::AddressBits;
256         case CL_DEVICE_MAX_READ_IMAGE_ARGS:
257             return DeviceInfo::MaxReadImageArgs;
258         case CL_DEVICE_MAX_WRITE_IMAGE_ARGS:
259             return DeviceInfo::MaxWriteImageArgs;
260         case CL_DEVICE_MAX_MEM_ALLOC_SIZE:
261             return DeviceInfo::MaxMemAllocSize;
262         case CL_DEVICE_IMAGE2D_MAX_WIDTH:
263             return DeviceInfo::Image2D_MaxWidth;
264         case CL_DEVICE_IMAGE2D_MAX_HEIGHT:
265             return DeviceInfo::Image2D_MaxHeight;
266         case CL_DEVICE_IMAGE3D_MAX_WIDTH:
267             return DeviceInfo::Image3D_MaxWidth;
268         case CL_DEVICE_IMAGE3D_MAX_HEIGHT:
269             return DeviceInfo::Image3D_MaxHeight;
270         case CL_DEVICE_IMAGE3D_MAX_DEPTH:
271             return DeviceInfo::Image3D_MaxDepth;
272         case CL_DEVICE_IMAGE_SUPPORT:
273             return DeviceInfo::ImageSupport;
274         case CL_DEVICE_MAX_PARAMETER_SIZE:
275             return DeviceInfo::MaxParameterSize;
276         case CL_DEVICE_MAX_SAMPLERS:
277             return DeviceInfo::MaxSamplers;
278         case CL_DEVICE_MEM_BASE_ADDR_ALIGN:
279             return DeviceInfo::MemBaseAddrAlign;
280         case CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE:
281             return DeviceInfo::MinDataTypeAlignSize;
282         case CL_DEVICE_SINGLE_FP_CONFIG:
283             return DeviceInfo::SingleFpConfig;
284         case CL_DEVICE_GLOBAL_MEM_CACHE_TYPE:
285             return DeviceInfo::GlobalMemCacheType;
286         case CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE:
287             return DeviceInfo::GlobalMemCachelineSize;
288         case CL_DEVICE_GLOBAL_MEM_CACHE_SIZE:
289             return DeviceInfo::GlobalMemCacheSize;
290         case CL_DEVICE_GLOBAL_MEM_SIZE:
291             return DeviceInfo::GlobalMemSize;
292         case CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:
293             return DeviceInfo::MaxConstantBufferSize;
294         case CL_DEVICE_MAX_CONSTANT_ARGS:
295             return DeviceInfo::MaxConstantArgs;
296         case CL_DEVICE_LOCAL_MEM_TYPE:
297             return DeviceInfo::LocalMemType;
298         case CL_DEVICE_LOCAL_MEM_SIZE:
299             return DeviceInfo::LocalMemSize;
300         case CL_DEVICE_ERROR_CORRECTION_SUPPORT:
301             return DeviceInfo::ErrorCorrectionSupport;
302         case CL_DEVICE_PROFILING_TIMER_RESOLUTION:
303             return DeviceInfo::ProfilingTimerResolution;
304         case CL_DEVICE_ENDIAN_LITTLE:
305             return DeviceInfo::EndianLittle;
306         case CL_DEVICE_AVAILABLE:
307             return DeviceInfo::Available;
308         case CL_DEVICE_COMPILER_AVAILABLE:
309             return DeviceInfo::CompilerAvailable;
310         case CL_DEVICE_EXECUTION_CAPABILITIES:
311             return DeviceInfo::ExecutionCapabilities;
312         case CL_DEVICE_QUEUE_ON_HOST_PROPERTIES:
313             return DeviceInfo::QueueOnHostProperties;
314         case CL_DEVICE_NAME:
315             return DeviceInfo::Name;
316         case CL_DEVICE_VENDOR:
317             return DeviceInfo::Vendor;
318         case CL_DRIVER_VERSION:
319             return DeviceInfo::DriverVersion;
320         case CL_DEVICE_PROFILE:
321             return DeviceInfo::Profile;
322         case CL_DEVICE_VERSION:
323             return DeviceInfo::Version;
324         case CL_DEVICE_EXTENSIONS:
325             return DeviceInfo::Extensions;
326         case CL_DEVICE_PLATFORM:
327             return DeviceInfo::Platform;
328         case CL_DEVICE_DOUBLE_FP_CONFIG:
329             return DeviceInfo::DoubleFpConfig;
330         case CL_DEVICE_HALF_FP_CONFIG:
331             return DeviceInfo::HalfFpConfig;
332         case CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF:
333             return DeviceInfo::PreferredVectorWidthHalf;
334         case CL_DEVICE_HOST_UNIFIED_MEMORY:
335             return DeviceInfo::HostUnifiedMemory;
336         case CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR:
337             return DeviceInfo::NativeVectorWidthChar;
338         case CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT:
339             return DeviceInfo::NativeVectorWidthShort;
340         case CL_DEVICE_NATIVE_VECTOR_WIDTH_INT:
341             return DeviceInfo::NativeVectorWidthInt;
342         case CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG:
343             return DeviceInfo::NativeVectorWidthLong;
344         case CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT:
345             return DeviceInfo::NativeVectorWidthFloat;
346         case CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE:
347             return DeviceInfo::NativeVectorWidthDouble;
348         case CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF:
349             return DeviceInfo::NativeVectorWidthHalf;
350         case CL_DEVICE_OPENCL_C_VERSION:
351             return DeviceInfo::OpenCL_C_Version;
352         case CL_DEVICE_LINKER_AVAILABLE:
353             return DeviceInfo::LinkerAvailable;
354         case CL_DEVICE_BUILT_IN_KERNELS:
355             return DeviceInfo::BuiltInKernels;
356         case CL_DEVICE_IMAGE_MAX_BUFFER_SIZE:
357             return DeviceInfo::ImageMaxBufferSize;
358         case CL_DEVICE_IMAGE_MAX_ARRAY_SIZE:
359             return DeviceInfo::ImageMaxArraySize;
360         case CL_DEVICE_PARENT_DEVICE:
361             return DeviceInfo::ParentDevice;
362         case CL_DEVICE_PARTITION_MAX_SUB_DEVICES:
363             return DeviceInfo::PartitionMaxSubDevices;
364         case CL_DEVICE_PARTITION_PROPERTIES:
365             return DeviceInfo::PartitionProperties;
366         case CL_DEVICE_PARTITION_AFFINITY_DOMAIN:
367             return DeviceInfo::PartitionAffinityDomain;
368         case CL_DEVICE_PARTITION_TYPE:
369             return DeviceInfo::PartitionType;
370         case CL_DEVICE_REFERENCE_COUNT:
371             return DeviceInfo::ReferenceCount;
372         case CL_DEVICE_PREFERRED_INTEROP_USER_SYNC:
373             return DeviceInfo::PreferredInteropUserSync;
374         case CL_DEVICE_PRINTF_BUFFER_SIZE:
375             return DeviceInfo::PrintfBufferSize;
376         case CL_DEVICE_IMAGE_PITCH_ALIGNMENT:
377             return DeviceInfo::ImagePitchAlignment;
378         case CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT:
379             return DeviceInfo::ImageBaseAddressAlignment;
380         case CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS:
381             return DeviceInfo::MaxReadWriteImageArgs;
382         case CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE:
383             return DeviceInfo::MaxGlobalVariableSize;
384         case CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES:
385             return DeviceInfo::QueueOnDeviceProperties;
386         case CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE:
387             return DeviceInfo::QueueOnDevicePreferredSize;
388         case CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE:
389             return DeviceInfo::QueueOnDeviceMaxSize;
390         case CL_DEVICE_MAX_ON_DEVICE_QUEUES:
391             return DeviceInfo::MaxOnDeviceQueues;
392         case CL_DEVICE_MAX_ON_DEVICE_EVENTS:
393             return DeviceInfo::MaxOnDeviceEvents;
394         case CL_DEVICE_SVM_CAPABILITIES:
395             return DeviceInfo::SVM_Capabilities;
396         case CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE:
397             return DeviceInfo::GlobalVariablePreferredTotalSize;
398         case CL_DEVICE_MAX_PIPE_ARGS:
399             return DeviceInfo::MaxPipeArgs;
400         case CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS:
401             return DeviceInfo::PipeMaxActiveReservations;
402         case CL_DEVICE_PIPE_MAX_PACKET_SIZE:
403             return DeviceInfo::PipeMaxPacketSize;
404         case CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT:
405             return DeviceInfo::PreferredPlatformAtomicAlignment;
406         case CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT:
407             return DeviceInfo::PreferredGlobalAtomicAlignment;
408         case CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT:
409             return DeviceInfo::PreferredLocalAtomicAlignment;
410         case CL_DEVICE_IL_VERSION:
411             return DeviceInfo::IL_Version;
412         case CL_DEVICE_MAX_NUM_SUB_GROUPS:
413             return DeviceInfo::MaxNumSubGroups;
414         case CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS:
415             return DeviceInfo::SubGroupIndependentForwardProgress;
416         case CL_DEVICE_NUMERIC_VERSION:
417             return DeviceInfo::NumericVersion;
418         case CL_DEVICE_EXTENSIONS_WITH_VERSION:
419             return DeviceInfo::ExtensionsWithVersion;
420         case CL_DEVICE_ILS_WITH_VERSION:
421             return DeviceInfo::ILsWithVersion;
422         case CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION:
423             return DeviceInfo::BuiltInKernelsWithVersion;
424         case CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES:
425             return DeviceInfo::AtomicMemoryCapabilities;
426         case CL_DEVICE_ATOMIC_FENCE_CAPABILITIES:
427             return DeviceInfo::AtomicFenceCapabilities;
428         case CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT:
429             return DeviceInfo::NonUniformWorkGroupSupport;
430         case CL_DEVICE_OPENCL_C_ALL_VERSIONS:
431             return DeviceInfo::OpenCL_C_AllVersions;
432         case CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE:
433             return DeviceInfo::PreferredWorkGroupSizeMultiple;
434         case CL_DEVICE_WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT:
435             return DeviceInfo::WorkGroupCollectiveFunctionsSupport;
436         case CL_DEVICE_GENERIC_ADDRESS_SPACE_SUPPORT:
437             return DeviceInfo::GenericAddressSpaceSupport;
438         case CL_DEVICE_OPENCL_C_FEATURES:
439             return DeviceInfo::OpenCL_C_Features;
440         case CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES:
441             return DeviceInfo::DeviceEnqueueCapabilities;
442         case CL_DEVICE_PIPE_SUPPORT:
443             return DeviceInfo::PipeSupport;
444         case CL_DEVICE_LATEST_CONFORMANCE_VERSION_PASSED:
445             return DeviceInfo::LatestConformanceVersionPassed;
446         default:
447             return DeviceInfo::InvalidEnum;
448     }
449 }
450 
ToCLenum(DeviceInfo from)451 CLenum ToCLenum(DeviceInfo from)
452 {
453     switch (from)
454     {
455         case DeviceInfo::Type:
456             return CL_DEVICE_TYPE;
457         case DeviceInfo::VendorID:
458             return CL_DEVICE_VENDOR_ID;
459         case DeviceInfo::MaxComputeUnits:
460             return CL_DEVICE_MAX_COMPUTE_UNITS;
461         case DeviceInfo::MaxWorkItemDimensions:
462             return CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS;
463         case DeviceInfo::MaxWorkGroupSize:
464             return CL_DEVICE_MAX_WORK_GROUP_SIZE;
465         case DeviceInfo::MaxWorkItemSizes:
466             return CL_DEVICE_MAX_WORK_ITEM_SIZES;
467         case DeviceInfo::PreferredVectorWidthChar:
468             return CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR;
469         case DeviceInfo::PreferredVectorWidthShort:
470             return CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT;
471         case DeviceInfo::PreferredVectorWidthInt:
472             return CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT;
473         case DeviceInfo::PreferredVectorWidthLong:
474             return CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG;
475         case DeviceInfo::PreferredVectorWidthFloat:
476             return CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT;
477         case DeviceInfo::PreferredVectorWidthDouble:
478             return CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE;
479         case DeviceInfo::MaxClockFrequency:
480             return CL_DEVICE_MAX_CLOCK_FREQUENCY;
481         case DeviceInfo::AddressBits:
482             return CL_DEVICE_ADDRESS_BITS;
483         case DeviceInfo::MaxReadImageArgs:
484             return CL_DEVICE_MAX_READ_IMAGE_ARGS;
485         case DeviceInfo::MaxWriteImageArgs:
486             return CL_DEVICE_MAX_WRITE_IMAGE_ARGS;
487         case DeviceInfo::MaxMemAllocSize:
488             return CL_DEVICE_MAX_MEM_ALLOC_SIZE;
489         case DeviceInfo::Image2D_MaxWidth:
490             return CL_DEVICE_IMAGE2D_MAX_WIDTH;
491         case DeviceInfo::Image2D_MaxHeight:
492             return CL_DEVICE_IMAGE2D_MAX_HEIGHT;
493         case DeviceInfo::Image3D_MaxWidth:
494             return CL_DEVICE_IMAGE3D_MAX_WIDTH;
495         case DeviceInfo::Image3D_MaxHeight:
496             return CL_DEVICE_IMAGE3D_MAX_HEIGHT;
497         case DeviceInfo::Image3D_MaxDepth:
498             return CL_DEVICE_IMAGE3D_MAX_DEPTH;
499         case DeviceInfo::ImageSupport:
500             return CL_DEVICE_IMAGE_SUPPORT;
501         case DeviceInfo::MaxParameterSize:
502             return CL_DEVICE_MAX_PARAMETER_SIZE;
503         case DeviceInfo::MaxSamplers:
504             return CL_DEVICE_MAX_SAMPLERS;
505         case DeviceInfo::MemBaseAddrAlign:
506             return CL_DEVICE_MEM_BASE_ADDR_ALIGN;
507         case DeviceInfo::MinDataTypeAlignSize:
508             return CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE;
509         case DeviceInfo::SingleFpConfig:
510             return CL_DEVICE_SINGLE_FP_CONFIG;
511         case DeviceInfo::GlobalMemCacheType:
512             return CL_DEVICE_GLOBAL_MEM_CACHE_TYPE;
513         case DeviceInfo::GlobalMemCachelineSize:
514             return CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE;
515         case DeviceInfo::GlobalMemCacheSize:
516             return CL_DEVICE_GLOBAL_MEM_CACHE_SIZE;
517         case DeviceInfo::GlobalMemSize:
518             return CL_DEVICE_GLOBAL_MEM_SIZE;
519         case DeviceInfo::MaxConstantBufferSize:
520             return CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE;
521         case DeviceInfo::MaxConstantArgs:
522             return CL_DEVICE_MAX_CONSTANT_ARGS;
523         case DeviceInfo::LocalMemType:
524             return CL_DEVICE_LOCAL_MEM_TYPE;
525         case DeviceInfo::LocalMemSize:
526             return CL_DEVICE_LOCAL_MEM_SIZE;
527         case DeviceInfo::ErrorCorrectionSupport:
528             return CL_DEVICE_ERROR_CORRECTION_SUPPORT;
529         case DeviceInfo::ProfilingTimerResolution:
530             return CL_DEVICE_PROFILING_TIMER_RESOLUTION;
531         case DeviceInfo::EndianLittle:
532             return CL_DEVICE_ENDIAN_LITTLE;
533         case DeviceInfo::Available:
534             return CL_DEVICE_AVAILABLE;
535         case DeviceInfo::CompilerAvailable:
536             return CL_DEVICE_COMPILER_AVAILABLE;
537         case DeviceInfo::ExecutionCapabilities:
538             return CL_DEVICE_EXECUTION_CAPABILITIES;
539         case DeviceInfo::QueueOnHostProperties:
540             return CL_DEVICE_QUEUE_ON_HOST_PROPERTIES;
541         case DeviceInfo::Name:
542             return CL_DEVICE_NAME;
543         case DeviceInfo::Vendor:
544             return CL_DEVICE_VENDOR;
545         case DeviceInfo::DriverVersion:
546             return CL_DRIVER_VERSION;
547         case DeviceInfo::Profile:
548             return CL_DEVICE_PROFILE;
549         case DeviceInfo::Version:
550             return CL_DEVICE_VERSION;
551         case DeviceInfo::Extensions:
552             return CL_DEVICE_EXTENSIONS;
553         case DeviceInfo::Platform:
554             return CL_DEVICE_PLATFORM;
555         case DeviceInfo::DoubleFpConfig:
556             return CL_DEVICE_DOUBLE_FP_CONFIG;
557         case DeviceInfo::HalfFpConfig:
558             return CL_DEVICE_HALF_FP_CONFIG;
559         case DeviceInfo::PreferredVectorWidthHalf:
560             return CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF;
561         case DeviceInfo::HostUnifiedMemory:
562             return CL_DEVICE_HOST_UNIFIED_MEMORY;
563         case DeviceInfo::NativeVectorWidthChar:
564             return CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR;
565         case DeviceInfo::NativeVectorWidthShort:
566             return CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT;
567         case DeviceInfo::NativeVectorWidthInt:
568             return CL_DEVICE_NATIVE_VECTOR_WIDTH_INT;
569         case DeviceInfo::NativeVectorWidthLong:
570             return CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG;
571         case DeviceInfo::NativeVectorWidthFloat:
572             return CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT;
573         case DeviceInfo::NativeVectorWidthDouble:
574             return CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE;
575         case DeviceInfo::NativeVectorWidthHalf:
576             return CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF;
577         case DeviceInfo::OpenCL_C_Version:
578             return CL_DEVICE_OPENCL_C_VERSION;
579         case DeviceInfo::LinkerAvailable:
580             return CL_DEVICE_LINKER_AVAILABLE;
581         case DeviceInfo::BuiltInKernels:
582             return CL_DEVICE_BUILT_IN_KERNELS;
583         case DeviceInfo::ImageMaxBufferSize:
584             return CL_DEVICE_IMAGE_MAX_BUFFER_SIZE;
585         case DeviceInfo::ImageMaxArraySize:
586             return CL_DEVICE_IMAGE_MAX_ARRAY_SIZE;
587         case DeviceInfo::ParentDevice:
588             return CL_DEVICE_PARENT_DEVICE;
589         case DeviceInfo::PartitionMaxSubDevices:
590             return CL_DEVICE_PARTITION_MAX_SUB_DEVICES;
591         case DeviceInfo::PartitionProperties:
592             return CL_DEVICE_PARTITION_PROPERTIES;
593         case DeviceInfo::PartitionAffinityDomain:
594             return CL_DEVICE_PARTITION_AFFINITY_DOMAIN;
595         case DeviceInfo::PartitionType:
596             return CL_DEVICE_PARTITION_TYPE;
597         case DeviceInfo::ReferenceCount:
598             return CL_DEVICE_REFERENCE_COUNT;
599         case DeviceInfo::PreferredInteropUserSync:
600             return CL_DEVICE_PREFERRED_INTEROP_USER_SYNC;
601         case DeviceInfo::PrintfBufferSize:
602             return CL_DEVICE_PRINTF_BUFFER_SIZE;
603         case DeviceInfo::ImagePitchAlignment:
604             return CL_DEVICE_IMAGE_PITCH_ALIGNMENT;
605         case DeviceInfo::ImageBaseAddressAlignment:
606             return CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT;
607         case DeviceInfo::MaxReadWriteImageArgs:
608             return CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS;
609         case DeviceInfo::MaxGlobalVariableSize:
610             return CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE;
611         case DeviceInfo::QueueOnDeviceProperties:
612             return CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES;
613         case DeviceInfo::QueueOnDevicePreferredSize:
614             return CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE;
615         case DeviceInfo::QueueOnDeviceMaxSize:
616             return CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE;
617         case DeviceInfo::MaxOnDeviceQueues:
618             return CL_DEVICE_MAX_ON_DEVICE_QUEUES;
619         case DeviceInfo::MaxOnDeviceEvents:
620             return CL_DEVICE_MAX_ON_DEVICE_EVENTS;
621         case DeviceInfo::SVM_Capabilities:
622             return CL_DEVICE_SVM_CAPABILITIES;
623         case DeviceInfo::GlobalVariablePreferredTotalSize:
624             return CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE;
625         case DeviceInfo::MaxPipeArgs:
626             return CL_DEVICE_MAX_PIPE_ARGS;
627         case DeviceInfo::PipeMaxActiveReservations:
628             return CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS;
629         case DeviceInfo::PipeMaxPacketSize:
630             return CL_DEVICE_PIPE_MAX_PACKET_SIZE;
631         case DeviceInfo::PreferredPlatformAtomicAlignment:
632             return CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT;
633         case DeviceInfo::PreferredGlobalAtomicAlignment:
634             return CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT;
635         case DeviceInfo::PreferredLocalAtomicAlignment:
636             return CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT;
637         case DeviceInfo::IL_Version:
638             return CL_DEVICE_IL_VERSION;
639         case DeviceInfo::MaxNumSubGroups:
640             return CL_DEVICE_MAX_NUM_SUB_GROUPS;
641         case DeviceInfo::SubGroupIndependentForwardProgress:
642             return CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS;
643         case DeviceInfo::NumericVersion:
644             return CL_DEVICE_NUMERIC_VERSION;
645         case DeviceInfo::ExtensionsWithVersion:
646             return CL_DEVICE_EXTENSIONS_WITH_VERSION;
647         case DeviceInfo::ILsWithVersion:
648             return CL_DEVICE_ILS_WITH_VERSION;
649         case DeviceInfo::BuiltInKernelsWithVersion:
650             return CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION;
651         case DeviceInfo::AtomicMemoryCapabilities:
652             return CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES;
653         case DeviceInfo::AtomicFenceCapabilities:
654             return CL_DEVICE_ATOMIC_FENCE_CAPABILITIES;
655         case DeviceInfo::NonUniformWorkGroupSupport:
656             return CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT;
657         case DeviceInfo::OpenCL_C_AllVersions:
658             return CL_DEVICE_OPENCL_C_ALL_VERSIONS;
659         case DeviceInfo::PreferredWorkGroupSizeMultiple:
660             return CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE;
661         case DeviceInfo::WorkGroupCollectiveFunctionsSupport:
662             return CL_DEVICE_WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT;
663         case DeviceInfo::GenericAddressSpaceSupport:
664             return CL_DEVICE_GENERIC_ADDRESS_SPACE_SUPPORT;
665         case DeviceInfo::OpenCL_C_Features:
666             return CL_DEVICE_OPENCL_C_FEATURES;
667         case DeviceInfo::DeviceEnqueueCapabilities:
668             return CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES;
669         case DeviceInfo::PipeSupport:
670             return CL_DEVICE_PIPE_SUPPORT;
671         case DeviceInfo::LatestConformanceVersionPassed:
672             return CL_DEVICE_LATEST_CONFORMANCE_VERSION_PASSED;
673         default:
674             UNREACHABLE();
675             return 0;
676     }
677 }
678 
operator <<(std::ostream & os,DeviceInfo value)679 std::ostream &operator<<(std::ostream &os, DeviceInfo value)
680 {
681     switch (value)
682     {
683         case DeviceInfo::Type:
684             os << "CL_DEVICE_TYPE";
685             break;
686         case DeviceInfo::VendorID:
687             os << "CL_DEVICE_VENDOR_ID";
688             break;
689         case DeviceInfo::MaxComputeUnits:
690             os << "CL_DEVICE_MAX_COMPUTE_UNITS";
691             break;
692         case DeviceInfo::MaxWorkItemDimensions:
693             os << "CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS";
694             break;
695         case DeviceInfo::MaxWorkGroupSize:
696             os << "CL_DEVICE_MAX_WORK_GROUP_SIZE";
697             break;
698         case DeviceInfo::MaxWorkItemSizes:
699             os << "CL_DEVICE_MAX_WORK_ITEM_SIZES";
700             break;
701         case DeviceInfo::PreferredVectorWidthChar:
702             os << "CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR";
703             break;
704         case DeviceInfo::PreferredVectorWidthShort:
705             os << "CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT";
706             break;
707         case DeviceInfo::PreferredVectorWidthInt:
708             os << "CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT";
709             break;
710         case DeviceInfo::PreferredVectorWidthLong:
711             os << "CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG";
712             break;
713         case DeviceInfo::PreferredVectorWidthFloat:
714             os << "CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT";
715             break;
716         case DeviceInfo::PreferredVectorWidthDouble:
717             os << "CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE";
718             break;
719         case DeviceInfo::MaxClockFrequency:
720             os << "CL_DEVICE_MAX_CLOCK_FREQUENCY";
721             break;
722         case DeviceInfo::AddressBits:
723             os << "CL_DEVICE_ADDRESS_BITS";
724             break;
725         case DeviceInfo::MaxReadImageArgs:
726             os << "CL_DEVICE_MAX_READ_IMAGE_ARGS";
727             break;
728         case DeviceInfo::MaxWriteImageArgs:
729             os << "CL_DEVICE_MAX_WRITE_IMAGE_ARGS";
730             break;
731         case DeviceInfo::MaxMemAllocSize:
732             os << "CL_DEVICE_MAX_MEM_ALLOC_SIZE";
733             break;
734         case DeviceInfo::Image2D_MaxWidth:
735             os << "CL_DEVICE_IMAGE2D_MAX_WIDTH";
736             break;
737         case DeviceInfo::Image2D_MaxHeight:
738             os << "CL_DEVICE_IMAGE2D_MAX_HEIGHT";
739             break;
740         case DeviceInfo::Image3D_MaxWidth:
741             os << "CL_DEVICE_IMAGE3D_MAX_WIDTH";
742             break;
743         case DeviceInfo::Image3D_MaxHeight:
744             os << "CL_DEVICE_IMAGE3D_MAX_HEIGHT";
745             break;
746         case DeviceInfo::Image3D_MaxDepth:
747             os << "CL_DEVICE_IMAGE3D_MAX_DEPTH";
748             break;
749         case DeviceInfo::ImageSupport:
750             os << "CL_DEVICE_IMAGE_SUPPORT";
751             break;
752         case DeviceInfo::MaxParameterSize:
753             os << "CL_DEVICE_MAX_PARAMETER_SIZE";
754             break;
755         case DeviceInfo::MaxSamplers:
756             os << "CL_DEVICE_MAX_SAMPLERS";
757             break;
758         case DeviceInfo::MemBaseAddrAlign:
759             os << "CL_DEVICE_MEM_BASE_ADDR_ALIGN";
760             break;
761         case DeviceInfo::MinDataTypeAlignSize:
762             os << "CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE";
763             break;
764         case DeviceInfo::SingleFpConfig:
765             os << "CL_DEVICE_SINGLE_FP_CONFIG";
766             break;
767         case DeviceInfo::GlobalMemCacheType:
768             os << "CL_DEVICE_GLOBAL_MEM_CACHE_TYPE";
769             break;
770         case DeviceInfo::GlobalMemCachelineSize:
771             os << "CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE";
772             break;
773         case DeviceInfo::GlobalMemCacheSize:
774             os << "CL_DEVICE_GLOBAL_MEM_CACHE_SIZE";
775             break;
776         case DeviceInfo::GlobalMemSize:
777             os << "CL_DEVICE_GLOBAL_MEM_SIZE";
778             break;
779         case DeviceInfo::MaxConstantBufferSize:
780             os << "CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE";
781             break;
782         case DeviceInfo::MaxConstantArgs:
783             os << "CL_DEVICE_MAX_CONSTANT_ARGS";
784             break;
785         case DeviceInfo::LocalMemType:
786             os << "CL_DEVICE_LOCAL_MEM_TYPE";
787             break;
788         case DeviceInfo::LocalMemSize:
789             os << "CL_DEVICE_LOCAL_MEM_SIZE";
790             break;
791         case DeviceInfo::ErrorCorrectionSupport:
792             os << "CL_DEVICE_ERROR_CORRECTION_SUPPORT";
793             break;
794         case DeviceInfo::ProfilingTimerResolution:
795             os << "CL_DEVICE_PROFILING_TIMER_RESOLUTION";
796             break;
797         case DeviceInfo::EndianLittle:
798             os << "CL_DEVICE_ENDIAN_LITTLE";
799             break;
800         case DeviceInfo::Available:
801             os << "CL_DEVICE_AVAILABLE";
802             break;
803         case DeviceInfo::CompilerAvailable:
804             os << "CL_DEVICE_COMPILER_AVAILABLE";
805             break;
806         case DeviceInfo::ExecutionCapabilities:
807             os << "CL_DEVICE_EXECUTION_CAPABILITIES";
808             break;
809         case DeviceInfo::QueueOnHostProperties:
810             os << "CL_DEVICE_QUEUE_ON_HOST_PROPERTIES";
811             break;
812         case DeviceInfo::Name:
813             os << "CL_DEVICE_NAME";
814             break;
815         case DeviceInfo::Vendor:
816             os << "CL_DEVICE_VENDOR";
817             break;
818         case DeviceInfo::DriverVersion:
819             os << "CL_DRIVER_VERSION";
820             break;
821         case DeviceInfo::Profile:
822             os << "CL_DEVICE_PROFILE";
823             break;
824         case DeviceInfo::Version:
825             os << "CL_DEVICE_VERSION";
826             break;
827         case DeviceInfo::Extensions:
828             os << "CL_DEVICE_EXTENSIONS";
829             break;
830         case DeviceInfo::Platform:
831             os << "CL_DEVICE_PLATFORM";
832             break;
833         case DeviceInfo::DoubleFpConfig:
834             os << "CL_DEVICE_DOUBLE_FP_CONFIG";
835             break;
836         case DeviceInfo::HalfFpConfig:
837             os << "CL_DEVICE_HALF_FP_CONFIG";
838             break;
839         case DeviceInfo::PreferredVectorWidthHalf:
840             os << "CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF";
841             break;
842         case DeviceInfo::HostUnifiedMemory:
843             os << "CL_DEVICE_HOST_UNIFIED_MEMORY";
844             break;
845         case DeviceInfo::NativeVectorWidthChar:
846             os << "CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR";
847             break;
848         case DeviceInfo::NativeVectorWidthShort:
849             os << "CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT";
850             break;
851         case DeviceInfo::NativeVectorWidthInt:
852             os << "CL_DEVICE_NATIVE_VECTOR_WIDTH_INT";
853             break;
854         case DeviceInfo::NativeVectorWidthLong:
855             os << "CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG";
856             break;
857         case DeviceInfo::NativeVectorWidthFloat:
858             os << "CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT";
859             break;
860         case DeviceInfo::NativeVectorWidthDouble:
861             os << "CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE";
862             break;
863         case DeviceInfo::NativeVectorWidthHalf:
864             os << "CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF";
865             break;
866         case DeviceInfo::OpenCL_C_Version:
867             os << "CL_DEVICE_OPENCL_C_VERSION";
868             break;
869         case DeviceInfo::LinkerAvailable:
870             os << "CL_DEVICE_LINKER_AVAILABLE";
871             break;
872         case DeviceInfo::BuiltInKernels:
873             os << "CL_DEVICE_BUILT_IN_KERNELS";
874             break;
875         case DeviceInfo::ImageMaxBufferSize:
876             os << "CL_DEVICE_IMAGE_MAX_BUFFER_SIZE";
877             break;
878         case DeviceInfo::ImageMaxArraySize:
879             os << "CL_DEVICE_IMAGE_MAX_ARRAY_SIZE";
880             break;
881         case DeviceInfo::ParentDevice:
882             os << "CL_DEVICE_PARENT_DEVICE";
883             break;
884         case DeviceInfo::PartitionMaxSubDevices:
885             os << "CL_DEVICE_PARTITION_MAX_SUB_DEVICES";
886             break;
887         case DeviceInfo::PartitionProperties:
888             os << "CL_DEVICE_PARTITION_PROPERTIES";
889             break;
890         case DeviceInfo::PartitionAffinityDomain:
891             os << "CL_DEVICE_PARTITION_AFFINITY_DOMAIN";
892             break;
893         case DeviceInfo::PartitionType:
894             os << "CL_DEVICE_PARTITION_TYPE";
895             break;
896         case DeviceInfo::ReferenceCount:
897             os << "CL_DEVICE_REFERENCE_COUNT";
898             break;
899         case DeviceInfo::PreferredInteropUserSync:
900             os << "CL_DEVICE_PREFERRED_INTEROP_USER_SYNC";
901             break;
902         case DeviceInfo::PrintfBufferSize:
903             os << "CL_DEVICE_PRINTF_BUFFER_SIZE";
904             break;
905         case DeviceInfo::ImagePitchAlignment:
906             os << "CL_DEVICE_IMAGE_PITCH_ALIGNMENT";
907             break;
908         case DeviceInfo::ImageBaseAddressAlignment:
909             os << "CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT";
910             break;
911         case DeviceInfo::MaxReadWriteImageArgs:
912             os << "CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS";
913             break;
914         case DeviceInfo::MaxGlobalVariableSize:
915             os << "CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE";
916             break;
917         case DeviceInfo::QueueOnDeviceProperties:
918             os << "CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES";
919             break;
920         case DeviceInfo::QueueOnDevicePreferredSize:
921             os << "CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE";
922             break;
923         case DeviceInfo::QueueOnDeviceMaxSize:
924             os << "CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE";
925             break;
926         case DeviceInfo::MaxOnDeviceQueues:
927             os << "CL_DEVICE_MAX_ON_DEVICE_QUEUES";
928             break;
929         case DeviceInfo::MaxOnDeviceEvents:
930             os << "CL_DEVICE_MAX_ON_DEVICE_EVENTS";
931             break;
932         case DeviceInfo::SVM_Capabilities:
933             os << "CL_DEVICE_SVM_CAPABILITIES";
934             break;
935         case DeviceInfo::GlobalVariablePreferredTotalSize:
936             os << "CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE";
937             break;
938         case DeviceInfo::MaxPipeArgs:
939             os << "CL_DEVICE_MAX_PIPE_ARGS";
940             break;
941         case DeviceInfo::PipeMaxActiveReservations:
942             os << "CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS";
943             break;
944         case DeviceInfo::PipeMaxPacketSize:
945             os << "CL_DEVICE_PIPE_MAX_PACKET_SIZE";
946             break;
947         case DeviceInfo::PreferredPlatformAtomicAlignment:
948             os << "CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT";
949             break;
950         case DeviceInfo::PreferredGlobalAtomicAlignment:
951             os << "CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT";
952             break;
953         case DeviceInfo::PreferredLocalAtomicAlignment:
954             os << "CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT";
955             break;
956         case DeviceInfo::IL_Version:
957             os << "CL_DEVICE_IL_VERSION";
958             break;
959         case DeviceInfo::MaxNumSubGroups:
960             os << "CL_DEVICE_MAX_NUM_SUB_GROUPS";
961             break;
962         case DeviceInfo::SubGroupIndependentForwardProgress:
963             os << "CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS";
964             break;
965         case DeviceInfo::NumericVersion:
966             os << "CL_DEVICE_NUMERIC_VERSION";
967             break;
968         case DeviceInfo::ExtensionsWithVersion:
969             os << "CL_DEVICE_EXTENSIONS_WITH_VERSION";
970             break;
971         case DeviceInfo::ILsWithVersion:
972             os << "CL_DEVICE_ILS_WITH_VERSION";
973             break;
974         case DeviceInfo::BuiltInKernelsWithVersion:
975             os << "CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION";
976             break;
977         case DeviceInfo::AtomicMemoryCapabilities:
978             os << "CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES";
979             break;
980         case DeviceInfo::AtomicFenceCapabilities:
981             os << "CL_DEVICE_ATOMIC_FENCE_CAPABILITIES";
982             break;
983         case DeviceInfo::NonUniformWorkGroupSupport:
984             os << "CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT";
985             break;
986         case DeviceInfo::OpenCL_C_AllVersions:
987             os << "CL_DEVICE_OPENCL_C_ALL_VERSIONS";
988             break;
989         case DeviceInfo::PreferredWorkGroupSizeMultiple:
990             os << "CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE";
991             break;
992         case DeviceInfo::WorkGroupCollectiveFunctionsSupport:
993             os << "CL_DEVICE_WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT";
994             break;
995         case DeviceInfo::GenericAddressSpaceSupport:
996             os << "CL_DEVICE_GENERIC_ADDRESS_SPACE_SUPPORT";
997             break;
998         case DeviceInfo::OpenCL_C_Features:
999             os << "CL_DEVICE_OPENCL_C_FEATURES";
1000             break;
1001         case DeviceInfo::DeviceEnqueueCapabilities:
1002             os << "CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES";
1003             break;
1004         case DeviceInfo::PipeSupport:
1005             os << "CL_DEVICE_PIPE_SUPPORT";
1006             break;
1007         case DeviceInfo::LatestConformanceVersionPassed:
1008             os << "CL_DEVICE_LATEST_CONFORMANCE_VERSION_PASSED";
1009             break;
1010         default:
1011             os << "GL_INVALID_ENUM";
1012             break;
1013     }
1014     return os;
1015 }
1016 
1017 template <>
FromCLenum(CLenum from)1018 EventInfo FromCLenum<EventInfo>(CLenum from)
1019 {
1020     switch (from)
1021     {
1022         case CL_EVENT_COMMAND_QUEUE:
1023             return EventInfo::CommandQueue;
1024         case CL_EVENT_COMMAND_TYPE:
1025             return EventInfo::CommandType;
1026         case CL_EVENT_REFERENCE_COUNT:
1027             return EventInfo::ReferenceCount;
1028         case CL_EVENT_COMMAND_EXECUTION_STATUS:
1029             return EventInfo::CommandExecutionStatus;
1030         case CL_EVENT_CONTEXT:
1031             return EventInfo::Context;
1032         default:
1033             return EventInfo::InvalidEnum;
1034     }
1035 }
1036 
ToCLenum(EventInfo from)1037 CLenum ToCLenum(EventInfo from)
1038 {
1039     switch (from)
1040     {
1041         case EventInfo::CommandQueue:
1042             return CL_EVENT_COMMAND_QUEUE;
1043         case EventInfo::CommandType:
1044             return CL_EVENT_COMMAND_TYPE;
1045         case EventInfo::ReferenceCount:
1046             return CL_EVENT_REFERENCE_COUNT;
1047         case EventInfo::CommandExecutionStatus:
1048             return CL_EVENT_COMMAND_EXECUTION_STATUS;
1049         case EventInfo::Context:
1050             return CL_EVENT_CONTEXT;
1051         default:
1052             UNREACHABLE();
1053             return 0;
1054     }
1055 }
1056 
operator <<(std::ostream & os,EventInfo value)1057 std::ostream &operator<<(std::ostream &os, EventInfo value)
1058 {
1059     switch (value)
1060     {
1061         case EventInfo::CommandQueue:
1062             os << "CL_EVENT_COMMAND_QUEUE";
1063             break;
1064         case EventInfo::CommandType:
1065             os << "CL_EVENT_COMMAND_TYPE";
1066             break;
1067         case EventInfo::ReferenceCount:
1068             os << "CL_EVENT_REFERENCE_COUNT";
1069             break;
1070         case EventInfo::CommandExecutionStatus:
1071             os << "CL_EVENT_COMMAND_EXECUTION_STATUS";
1072             break;
1073         case EventInfo::Context:
1074             os << "CL_EVENT_CONTEXT";
1075             break;
1076         default:
1077             os << "GL_INVALID_ENUM";
1078             break;
1079     }
1080     return os;
1081 }
1082 
1083 template <>
FromCLenum(CLenum from)1084 ExecutionStatus FromCLenum<ExecutionStatus>(CLenum from)
1085 {
1086     switch (from)
1087     {
1088         case CL_COMPLETE:
1089             return ExecutionStatus::Complete;
1090         case CL_RUNNING:
1091             return ExecutionStatus::Running;
1092         case CL_SUBMITTED:
1093             return ExecutionStatus::Submitted;
1094         case CL_QUEUED:
1095             return ExecutionStatus::Queued;
1096         default:
1097             return ExecutionStatus::InvalidEnum;
1098     }
1099 }
1100 
ToCLenum(ExecutionStatus from)1101 CLenum ToCLenum(ExecutionStatus from)
1102 {
1103     switch (from)
1104     {
1105         case ExecutionStatus::Complete:
1106             return CL_COMPLETE;
1107         case ExecutionStatus::Running:
1108             return CL_RUNNING;
1109         case ExecutionStatus::Submitted:
1110             return CL_SUBMITTED;
1111         case ExecutionStatus::Queued:
1112             return CL_QUEUED;
1113         default:
1114             UNREACHABLE();
1115             return 0;
1116     }
1117 }
1118 
operator <<(std::ostream & os,ExecutionStatus value)1119 std::ostream &operator<<(std::ostream &os, ExecutionStatus value)
1120 {
1121     switch (value)
1122     {
1123         case ExecutionStatus::Complete:
1124             os << "CL_COMPLETE";
1125             break;
1126         case ExecutionStatus::Running:
1127             os << "CL_RUNNING";
1128             break;
1129         case ExecutionStatus::Submitted:
1130             os << "CL_SUBMITTED";
1131             break;
1132         case ExecutionStatus::Queued:
1133             os << "CL_QUEUED";
1134             break;
1135         default:
1136             os << "GL_INVALID_ENUM";
1137             break;
1138     }
1139     return os;
1140 }
1141 
1142 template <>
FromCLenum(CLenum from)1143 FilterMode FromCLenum<FilterMode>(CLenum from)
1144 {
1145     switch (from)
1146     {
1147         case CL_FILTER_NEAREST:
1148             return FilterMode::Nearest;
1149         case CL_FILTER_LINEAR:
1150             return FilterMode::Linear;
1151         default:
1152             return FilterMode::InvalidEnum;
1153     }
1154 }
1155 
ToCLenum(FilterMode from)1156 CLenum ToCLenum(FilterMode from)
1157 {
1158     switch (from)
1159     {
1160         case FilterMode::Nearest:
1161             return CL_FILTER_NEAREST;
1162         case FilterMode::Linear:
1163             return CL_FILTER_LINEAR;
1164         default:
1165             UNREACHABLE();
1166             return 0;
1167     }
1168 }
1169 
operator <<(std::ostream & os,FilterMode value)1170 std::ostream &operator<<(std::ostream &os, FilterMode value)
1171 {
1172     switch (value)
1173     {
1174         case FilterMode::Nearest:
1175             os << "CL_FILTER_NEAREST";
1176             break;
1177         case FilterMode::Linear:
1178             os << "CL_FILTER_LINEAR";
1179             break;
1180         default:
1181             os << "GL_INVALID_ENUM";
1182             break;
1183     }
1184     return os;
1185 }
1186 
1187 template <>
FromCLenum(CLenum from)1188 ImageInfo FromCLenum<ImageInfo>(CLenum from)
1189 {
1190     switch (from)
1191     {
1192         case CL_IMAGE_FORMAT:
1193             return ImageInfo::Format;
1194         case CL_IMAGE_ELEMENT_SIZE:
1195             return ImageInfo::ElementSize;
1196         case CL_IMAGE_ROW_PITCH:
1197             return ImageInfo::RowPitch;
1198         case CL_IMAGE_SLICE_PITCH:
1199             return ImageInfo::SlicePitch;
1200         case CL_IMAGE_WIDTH:
1201             return ImageInfo::Width;
1202         case CL_IMAGE_HEIGHT:
1203             return ImageInfo::Height;
1204         case CL_IMAGE_DEPTH:
1205             return ImageInfo::Depth;
1206         case CL_IMAGE_ARRAY_SIZE:
1207             return ImageInfo::ArraySize;
1208         case CL_IMAGE_BUFFER:
1209             return ImageInfo::Buffer;
1210         case CL_IMAGE_NUM_MIP_LEVELS:
1211             return ImageInfo::NumMipLevels;
1212         case CL_IMAGE_NUM_SAMPLES:
1213             return ImageInfo::NumSamples;
1214         default:
1215             return ImageInfo::InvalidEnum;
1216     }
1217 }
1218 
ToCLenum(ImageInfo from)1219 CLenum ToCLenum(ImageInfo from)
1220 {
1221     switch (from)
1222     {
1223         case ImageInfo::Format:
1224             return CL_IMAGE_FORMAT;
1225         case ImageInfo::ElementSize:
1226             return CL_IMAGE_ELEMENT_SIZE;
1227         case ImageInfo::RowPitch:
1228             return CL_IMAGE_ROW_PITCH;
1229         case ImageInfo::SlicePitch:
1230             return CL_IMAGE_SLICE_PITCH;
1231         case ImageInfo::Width:
1232             return CL_IMAGE_WIDTH;
1233         case ImageInfo::Height:
1234             return CL_IMAGE_HEIGHT;
1235         case ImageInfo::Depth:
1236             return CL_IMAGE_DEPTH;
1237         case ImageInfo::ArraySize:
1238             return CL_IMAGE_ARRAY_SIZE;
1239         case ImageInfo::Buffer:
1240             return CL_IMAGE_BUFFER;
1241         case ImageInfo::NumMipLevels:
1242             return CL_IMAGE_NUM_MIP_LEVELS;
1243         case ImageInfo::NumSamples:
1244             return CL_IMAGE_NUM_SAMPLES;
1245         default:
1246             UNREACHABLE();
1247             return 0;
1248     }
1249 }
1250 
operator <<(std::ostream & os,ImageInfo value)1251 std::ostream &operator<<(std::ostream &os, ImageInfo value)
1252 {
1253     switch (value)
1254     {
1255         case ImageInfo::Format:
1256             os << "CL_IMAGE_FORMAT";
1257             break;
1258         case ImageInfo::ElementSize:
1259             os << "CL_IMAGE_ELEMENT_SIZE";
1260             break;
1261         case ImageInfo::RowPitch:
1262             os << "CL_IMAGE_ROW_PITCH";
1263             break;
1264         case ImageInfo::SlicePitch:
1265             os << "CL_IMAGE_SLICE_PITCH";
1266             break;
1267         case ImageInfo::Width:
1268             os << "CL_IMAGE_WIDTH";
1269             break;
1270         case ImageInfo::Height:
1271             os << "CL_IMAGE_HEIGHT";
1272             break;
1273         case ImageInfo::Depth:
1274             os << "CL_IMAGE_DEPTH";
1275             break;
1276         case ImageInfo::ArraySize:
1277             os << "CL_IMAGE_ARRAY_SIZE";
1278             break;
1279         case ImageInfo::Buffer:
1280             os << "CL_IMAGE_BUFFER";
1281             break;
1282         case ImageInfo::NumMipLevels:
1283             os << "CL_IMAGE_NUM_MIP_LEVELS";
1284             break;
1285         case ImageInfo::NumSamples:
1286             os << "CL_IMAGE_NUM_SAMPLES";
1287             break;
1288         default:
1289             os << "GL_INVALID_ENUM";
1290             break;
1291     }
1292     return os;
1293 }
1294 
1295 template <>
FromCLenum(CLenum from)1296 KernelArgInfo FromCLenum<KernelArgInfo>(CLenum from)
1297 {
1298     switch (from)
1299     {
1300         case CL_KERNEL_ARG_ADDRESS_QUALIFIER:
1301             return KernelArgInfo::AddressQualifier;
1302         case CL_KERNEL_ARG_ACCESS_QUALIFIER:
1303             return KernelArgInfo::AccessQualifier;
1304         case CL_KERNEL_ARG_TYPE_NAME:
1305             return KernelArgInfo::TypeName;
1306         case CL_KERNEL_ARG_TYPE_QUALIFIER:
1307             return KernelArgInfo::TypeQualifier;
1308         case CL_KERNEL_ARG_NAME:
1309             return KernelArgInfo::Name;
1310         default:
1311             return KernelArgInfo::InvalidEnum;
1312     }
1313 }
1314 
ToCLenum(KernelArgInfo from)1315 CLenum ToCLenum(KernelArgInfo from)
1316 {
1317     switch (from)
1318     {
1319         case KernelArgInfo::AddressQualifier:
1320             return CL_KERNEL_ARG_ADDRESS_QUALIFIER;
1321         case KernelArgInfo::AccessQualifier:
1322             return CL_KERNEL_ARG_ACCESS_QUALIFIER;
1323         case KernelArgInfo::TypeName:
1324             return CL_KERNEL_ARG_TYPE_NAME;
1325         case KernelArgInfo::TypeQualifier:
1326             return CL_KERNEL_ARG_TYPE_QUALIFIER;
1327         case KernelArgInfo::Name:
1328             return CL_KERNEL_ARG_NAME;
1329         default:
1330             UNREACHABLE();
1331             return 0;
1332     }
1333 }
1334 
operator <<(std::ostream & os,KernelArgInfo value)1335 std::ostream &operator<<(std::ostream &os, KernelArgInfo value)
1336 {
1337     switch (value)
1338     {
1339         case KernelArgInfo::AddressQualifier:
1340             os << "CL_KERNEL_ARG_ADDRESS_QUALIFIER";
1341             break;
1342         case KernelArgInfo::AccessQualifier:
1343             os << "CL_KERNEL_ARG_ACCESS_QUALIFIER";
1344             break;
1345         case KernelArgInfo::TypeName:
1346             os << "CL_KERNEL_ARG_TYPE_NAME";
1347             break;
1348         case KernelArgInfo::TypeQualifier:
1349             os << "CL_KERNEL_ARG_TYPE_QUALIFIER";
1350             break;
1351         case KernelArgInfo::Name:
1352             os << "CL_KERNEL_ARG_NAME";
1353             break;
1354         default:
1355             os << "GL_INVALID_ENUM";
1356             break;
1357     }
1358     return os;
1359 }
1360 
1361 template <>
FromCLenum(CLenum from)1362 KernelExecInfo FromCLenum<KernelExecInfo>(CLenum from)
1363 {
1364     switch (from)
1365     {
1366         case CL_KERNEL_EXEC_INFO_SVM_PTRS:
1367             return KernelExecInfo::SVM_Ptrs;
1368         case CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM:
1369             return KernelExecInfo::SVM_FineGrainSystem;
1370         default:
1371             return KernelExecInfo::InvalidEnum;
1372     }
1373 }
1374 
ToCLenum(KernelExecInfo from)1375 CLenum ToCLenum(KernelExecInfo from)
1376 {
1377     switch (from)
1378     {
1379         case KernelExecInfo::SVM_Ptrs:
1380             return CL_KERNEL_EXEC_INFO_SVM_PTRS;
1381         case KernelExecInfo::SVM_FineGrainSystem:
1382             return CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM;
1383         default:
1384             UNREACHABLE();
1385             return 0;
1386     }
1387 }
1388 
operator <<(std::ostream & os,KernelExecInfo value)1389 std::ostream &operator<<(std::ostream &os, KernelExecInfo value)
1390 {
1391     switch (value)
1392     {
1393         case KernelExecInfo::SVM_Ptrs:
1394             os << "CL_KERNEL_EXEC_INFO_SVM_PTRS";
1395             break;
1396         case KernelExecInfo::SVM_FineGrainSystem:
1397             os << "CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM";
1398             break;
1399         default:
1400             os << "GL_INVALID_ENUM";
1401             break;
1402     }
1403     return os;
1404 }
1405 
1406 template <>
FromCLenum(CLenum from)1407 KernelInfo FromCLenum<KernelInfo>(CLenum from)
1408 {
1409     switch (from)
1410     {
1411         case CL_KERNEL_FUNCTION_NAME:
1412             return KernelInfo::FunctionName;
1413         case CL_KERNEL_NUM_ARGS:
1414             return KernelInfo::NumArgs;
1415         case CL_KERNEL_REFERENCE_COUNT:
1416             return KernelInfo::ReferenceCount;
1417         case CL_KERNEL_CONTEXT:
1418             return KernelInfo::Context;
1419         case CL_KERNEL_PROGRAM:
1420             return KernelInfo::Program;
1421         case CL_KERNEL_ATTRIBUTES:
1422             return KernelInfo::Attributes;
1423         default:
1424             return KernelInfo::InvalidEnum;
1425     }
1426 }
1427 
ToCLenum(KernelInfo from)1428 CLenum ToCLenum(KernelInfo from)
1429 {
1430     switch (from)
1431     {
1432         case KernelInfo::FunctionName:
1433             return CL_KERNEL_FUNCTION_NAME;
1434         case KernelInfo::NumArgs:
1435             return CL_KERNEL_NUM_ARGS;
1436         case KernelInfo::ReferenceCount:
1437             return CL_KERNEL_REFERENCE_COUNT;
1438         case KernelInfo::Context:
1439             return CL_KERNEL_CONTEXT;
1440         case KernelInfo::Program:
1441             return CL_KERNEL_PROGRAM;
1442         case KernelInfo::Attributes:
1443             return CL_KERNEL_ATTRIBUTES;
1444         default:
1445             UNREACHABLE();
1446             return 0;
1447     }
1448 }
1449 
operator <<(std::ostream & os,KernelInfo value)1450 std::ostream &operator<<(std::ostream &os, KernelInfo value)
1451 {
1452     switch (value)
1453     {
1454         case KernelInfo::FunctionName:
1455             os << "CL_KERNEL_FUNCTION_NAME";
1456             break;
1457         case KernelInfo::NumArgs:
1458             os << "CL_KERNEL_NUM_ARGS";
1459             break;
1460         case KernelInfo::ReferenceCount:
1461             os << "CL_KERNEL_REFERENCE_COUNT";
1462             break;
1463         case KernelInfo::Context:
1464             os << "CL_KERNEL_CONTEXT";
1465             break;
1466         case KernelInfo::Program:
1467             os << "CL_KERNEL_PROGRAM";
1468             break;
1469         case KernelInfo::Attributes:
1470             os << "CL_KERNEL_ATTRIBUTES";
1471             break;
1472         default:
1473             os << "GL_INVALID_ENUM";
1474             break;
1475     }
1476     return os;
1477 }
1478 
1479 template <>
FromCLenum(CLenum from)1480 KernelSubGroupInfo FromCLenum<KernelSubGroupInfo>(CLenum from)
1481 {
1482     switch (from)
1483     {
1484         case CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE:
1485             return KernelSubGroupInfo::MaxSubGroupSizeForNdrange;
1486         case CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE:
1487             return KernelSubGroupInfo::SubGroupCountForNdrange;
1488         case CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT:
1489             return KernelSubGroupInfo::LocalSizeForSubGroupCount;
1490         case CL_KERNEL_MAX_NUM_SUB_GROUPS:
1491             return KernelSubGroupInfo::MaxNumSubGroups;
1492         case CL_KERNEL_COMPILE_NUM_SUB_GROUPS:
1493             return KernelSubGroupInfo::CompileNumSubGroups;
1494         default:
1495             return KernelSubGroupInfo::InvalidEnum;
1496     }
1497 }
1498 
ToCLenum(KernelSubGroupInfo from)1499 CLenum ToCLenum(KernelSubGroupInfo from)
1500 {
1501     switch (from)
1502     {
1503         case KernelSubGroupInfo::MaxSubGroupSizeForNdrange:
1504             return CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE;
1505         case KernelSubGroupInfo::SubGroupCountForNdrange:
1506             return CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE;
1507         case KernelSubGroupInfo::LocalSizeForSubGroupCount:
1508             return CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT;
1509         case KernelSubGroupInfo::MaxNumSubGroups:
1510             return CL_KERNEL_MAX_NUM_SUB_GROUPS;
1511         case KernelSubGroupInfo::CompileNumSubGroups:
1512             return CL_KERNEL_COMPILE_NUM_SUB_GROUPS;
1513         default:
1514             UNREACHABLE();
1515             return 0;
1516     }
1517 }
1518 
operator <<(std::ostream & os,KernelSubGroupInfo value)1519 std::ostream &operator<<(std::ostream &os, KernelSubGroupInfo value)
1520 {
1521     switch (value)
1522     {
1523         case KernelSubGroupInfo::MaxSubGroupSizeForNdrange:
1524             os << "CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE";
1525             break;
1526         case KernelSubGroupInfo::SubGroupCountForNdrange:
1527             os << "CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE";
1528             break;
1529         case KernelSubGroupInfo::LocalSizeForSubGroupCount:
1530             os << "CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT";
1531             break;
1532         case KernelSubGroupInfo::MaxNumSubGroups:
1533             os << "CL_KERNEL_MAX_NUM_SUB_GROUPS";
1534             break;
1535         case KernelSubGroupInfo::CompileNumSubGroups:
1536             os << "CL_KERNEL_COMPILE_NUM_SUB_GROUPS";
1537             break;
1538         default:
1539             os << "GL_INVALID_ENUM";
1540             break;
1541     }
1542     return os;
1543 }
1544 
1545 template <>
FromCLenum(CLenum from)1546 KernelWorkGroupInfo FromCLenum<KernelWorkGroupInfo>(CLenum from)
1547 {
1548     switch (from)
1549     {
1550         case CL_KERNEL_WORK_GROUP_SIZE:
1551             return KernelWorkGroupInfo::WorkGroupSize;
1552         case CL_KERNEL_COMPILE_WORK_GROUP_SIZE:
1553             return KernelWorkGroupInfo::CompileWorkGroupSize;
1554         case CL_KERNEL_LOCAL_MEM_SIZE:
1555             return KernelWorkGroupInfo::LocalMemSize;
1556         case CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE:
1557             return KernelWorkGroupInfo::PreferredWorkGroupSizeMultiple;
1558         case CL_KERNEL_PRIVATE_MEM_SIZE:
1559             return KernelWorkGroupInfo::PrivateMemSize;
1560         case CL_KERNEL_GLOBAL_WORK_SIZE:
1561             return KernelWorkGroupInfo::GlobalWorkSize;
1562         default:
1563             return KernelWorkGroupInfo::InvalidEnum;
1564     }
1565 }
1566 
ToCLenum(KernelWorkGroupInfo from)1567 CLenum ToCLenum(KernelWorkGroupInfo from)
1568 {
1569     switch (from)
1570     {
1571         case KernelWorkGroupInfo::WorkGroupSize:
1572             return CL_KERNEL_WORK_GROUP_SIZE;
1573         case KernelWorkGroupInfo::CompileWorkGroupSize:
1574             return CL_KERNEL_COMPILE_WORK_GROUP_SIZE;
1575         case KernelWorkGroupInfo::LocalMemSize:
1576             return CL_KERNEL_LOCAL_MEM_SIZE;
1577         case KernelWorkGroupInfo::PreferredWorkGroupSizeMultiple:
1578             return CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE;
1579         case KernelWorkGroupInfo::PrivateMemSize:
1580             return CL_KERNEL_PRIVATE_MEM_SIZE;
1581         case KernelWorkGroupInfo::GlobalWorkSize:
1582             return CL_KERNEL_GLOBAL_WORK_SIZE;
1583         default:
1584             UNREACHABLE();
1585             return 0;
1586     }
1587 }
1588 
operator <<(std::ostream & os,KernelWorkGroupInfo value)1589 std::ostream &operator<<(std::ostream &os, KernelWorkGroupInfo value)
1590 {
1591     switch (value)
1592     {
1593         case KernelWorkGroupInfo::WorkGroupSize:
1594             os << "CL_KERNEL_WORK_GROUP_SIZE";
1595             break;
1596         case KernelWorkGroupInfo::CompileWorkGroupSize:
1597             os << "CL_KERNEL_COMPILE_WORK_GROUP_SIZE";
1598             break;
1599         case KernelWorkGroupInfo::LocalMemSize:
1600             os << "CL_KERNEL_LOCAL_MEM_SIZE";
1601             break;
1602         case KernelWorkGroupInfo::PreferredWorkGroupSizeMultiple:
1603             os << "CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE";
1604             break;
1605         case KernelWorkGroupInfo::PrivateMemSize:
1606             os << "CL_KERNEL_PRIVATE_MEM_SIZE";
1607             break;
1608         case KernelWorkGroupInfo::GlobalWorkSize:
1609             os << "CL_KERNEL_GLOBAL_WORK_SIZE";
1610             break;
1611         default:
1612             os << "GL_INVALID_ENUM";
1613             break;
1614     }
1615     return os;
1616 }
1617 
1618 template <>
FromCLenum(CLenum from)1619 MemInfo FromCLenum<MemInfo>(CLenum from)
1620 {
1621     switch (from)
1622     {
1623         case CL_MEM_TYPE:
1624             return MemInfo::Type;
1625         case CL_MEM_FLAGS:
1626             return MemInfo::Flags;
1627         case CL_MEM_SIZE:
1628             return MemInfo::Size;
1629         case CL_MEM_HOST_PTR:
1630             return MemInfo::HostPtr;
1631         case CL_MEM_MAP_COUNT:
1632             return MemInfo::MapCount;
1633         case CL_MEM_REFERENCE_COUNT:
1634             return MemInfo::ReferenceCount;
1635         case CL_MEM_CONTEXT:
1636             return MemInfo::Context;
1637         case CL_MEM_ASSOCIATED_MEMOBJECT:
1638             return MemInfo::AssociatedMemObject;
1639         case CL_MEM_OFFSET:
1640             return MemInfo::Offset;
1641         case CL_MEM_USES_SVM_POINTER:
1642             return MemInfo::UsesSVM_Pointer;
1643         case CL_MEM_PROPERTIES:
1644             return MemInfo::Properties;
1645         default:
1646             return MemInfo::InvalidEnum;
1647     }
1648 }
1649 
ToCLenum(MemInfo from)1650 CLenum ToCLenum(MemInfo from)
1651 {
1652     switch (from)
1653     {
1654         case MemInfo::Type:
1655             return CL_MEM_TYPE;
1656         case MemInfo::Flags:
1657             return CL_MEM_FLAGS;
1658         case MemInfo::Size:
1659             return CL_MEM_SIZE;
1660         case MemInfo::HostPtr:
1661             return CL_MEM_HOST_PTR;
1662         case MemInfo::MapCount:
1663             return CL_MEM_MAP_COUNT;
1664         case MemInfo::ReferenceCount:
1665             return CL_MEM_REFERENCE_COUNT;
1666         case MemInfo::Context:
1667             return CL_MEM_CONTEXT;
1668         case MemInfo::AssociatedMemObject:
1669             return CL_MEM_ASSOCIATED_MEMOBJECT;
1670         case MemInfo::Offset:
1671             return CL_MEM_OFFSET;
1672         case MemInfo::UsesSVM_Pointer:
1673             return CL_MEM_USES_SVM_POINTER;
1674         case MemInfo::Properties:
1675             return CL_MEM_PROPERTIES;
1676         default:
1677             UNREACHABLE();
1678             return 0;
1679     }
1680 }
1681 
operator <<(std::ostream & os,MemInfo value)1682 std::ostream &operator<<(std::ostream &os, MemInfo value)
1683 {
1684     switch (value)
1685     {
1686         case MemInfo::Type:
1687             os << "CL_MEM_TYPE";
1688             break;
1689         case MemInfo::Flags:
1690             os << "CL_MEM_FLAGS";
1691             break;
1692         case MemInfo::Size:
1693             os << "CL_MEM_SIZE";
1694             break;
1695         case MemInfo::HostPtr:
1696             os << "CL_MEM_HOST_PTR";
1697             break;
1698         case MemInfo::MapCount:
1699             os << "CL_MEM_MAP_COUNT";
1700             break;
1701         case MemInfo::ReferenceCount:
1702             os << "CL_MEM_REFERENCE_COUNT";
1703             break;
1704         case MemInfo::Context:
1705             os << "CL_MEM_CONTEXT";
1706             break;
1707         case MemInfo::AssociatedMemObject:
1708             os << "CL_MEM_ASSOCIATED_MEMOBJECT";
1709             break;
1710         case MemInfo::Offset:
1711             os << "CL_MEM_OFFSET";
1712             break;
1713         case MemInfo::UsesSVM_Pointer:
1714             os << "CL_MEM_USES_SVM_POINTER";
1715             break;
1716         case MemInfo::Properties:
1717             os << "CL_MEM_PROPERTIES";
1718             break;
1719         default:
1720             os << "GL_INVALID_ENUM";
1721             break;
1722     }
1723     return os;
1724 }
1725 
1726 template <>
FromCLenum(CLenum from)1727 MemObjectType FromCLenum<MemObjectType>(CLenum from)
1728 {
1729     switch (from)
1730     {
1731         case CL_MEM_OBJECT_BUFFER:
1732             return MemObjectType::Buffer;
1733         case CL_MEM_OBJECT_IMAGE2D:
1734             return MemObjectType::Image2D;
1735         case CL_MEM_OBJECT_IMAGE3D:
1736             return MemObjectType::Image3D;
1737         case CL_MEM_OBJECT_IMAGE2D_ARRAY:
1738             return MemObjectType::Image2D_Array;
1739         case CL_MEM_OBJECT_IMAGE1D:
1740             return MemObjectType::Image1D;
1741         case CL_MEM_OBJECT_IMAGE1D_ARRAY:
1742             return MemObjectType::Image1D_Array;
1743         case CL_MEM_OBJECT_IMAGE1D_BUFFER:
1744             return MemObjectType::Image1D_Buffer;
1745         case CL_MEM_OBJECT_PIPE:
1746             return MemObjectType::Pipe;
1747         default:
1748             return MemObjectType::InvalidEnum;
1749     }
1750 }
1751 
ToCLenum(MemObjectType from)1752 CLenum ToCLenum(MemObjectType from)
1753 {
1754     switch (from)
1755     {
1756         case MemObjectType::Buffer:
1757             return CL_MEM_OBJECT_BUFFER;
1758         case MemObjectType::Image2D:
1759             return CL_MEM_OBJECT_IMAGE2D;
1760         case MemObjectType::Image3D:
1761             return CL_MEM_OBJECT_IMAGE3D;
1762         case MemObjectType::Image2D_Array:
1763             return CL_MEM_OBJECT_IMAGE2D_ARRAY;
1764         case MemObjectType::Image1D:
1765             return CL_MEM_OBJECT_IMAGE1D;
1766         case MemObjectType::Image1D_Array:
1767             return CL_MEM_OBJECT_IMAGE1D_ARRAY;
1768         case MemObjectType::Image1D_Buffer:
1769             return CL_MEM_OBJECT_IMAGE1D_BUFFER;
1770         case MemObjectType::Pipe:
1771             return CL_MEM_OBJECT_PIPE;
1772         default:
1773             UNREACHABLE();
1774             return 0;
1775     }
1776 }
1777 
operator <<(std::ostream & os,MemObjectType value)1778 std::ostream &operator<<(std::ostream &os, MemObjectType value)
1779 {
1780     switch (value)
1781     {
1782         case MemObjectType::Buffer:
1783             os << "CL_MEM_OBJECT_BUFFER";
1784             break;
1785         case MemObjectType::Image2D:
1786             os << "CL_MEM_OBJECT_IMAGE2D";
1787             break;
1788         case MemObjectType::Image3D:
1789             os << "CL_MEM_OBJECT_IMAGE3D";
1790             break;
1791         case MemObjectType::Image2D_Array:
1792             os << "CL_MEM_OBJECT_IMAGE2D_ARRAY";
1793             break;
1794         case MemObjectType::Image1D:
1795             os << "CL_MEM_OBJECT_IMAGE1D";
1796             break;
1797         case MemObjectType::Image1D_Array:
1798             os << "CL_MEM_OBJECT_IMAGE1D_ARRAY";
1799             break;
1800         case MemObjectType::Image1D_Buffer:
1801             os << "CL_MEM_OBJECT_IMAGE1D_BUFFER";
1802             break;
1803         case MemObjectType::Pipe:
1804             os << "CL_MEM_OBJECT_PIPE";
1805             break;
1806         default:
1807             os << "GL_INVALID_ENUM";
1808             break;
1809     }
1810     return os;
1811 }
1812 
1813 template <>
FromCLenum(CLenum from)1814 PipeInfo FromCLenum<PipeInfo>(CLenum from)
1815 {
1816     switch (from)
1817     {
1818         case CL_PIPE_PACKET_SIZE:
1819             return PipeInfo::PacketSize;
1820         case CL_PIPE_MAX_PACKETS:
1821             return PipeInfo::MaxPackets;
1822         case CL_PIPE_PROPERTIES:
1823             return PipeInfo::Properties;
1824         default:
1825             return PipeInfo::InvalidEnum;
1826     }
1827 }
1828 
ToCLenum(PipeInfo from)1829 CLenum ToCLenum(PipeInfo from)
1830 {
1831     switch (from)
1832     {
1833         case PipeInfo::PacketSize:
1834             return CL_PIPE_PACKET_SIZE;
1835         case PipeInfo::MaxPackets:
1836             return CL_PIPE_MAX_PACKETS;
1837         case PipeInfo::Properties:
1838             return CL_PIPE_PROPERTIES;
1839         default:
1840             UNREACHABLE();
1841             return 0;
1842     }
1843 }
1844 
operator <<(std::ostream & os,PipeInfo value)1845 std::ostream &operator<<(std::ostream &os, PipeInfo value)
1846 {
1847     switch (value)
1848     {
1849         case PipeInfo::PacketSize:
1850             os << "CL_PIPE_PACKET_SIZE";
1851             break;
1852         case PipeInfo::MaxPackets:
1853             os << "CL_PIPE_MAX_PACKETS";
1854             break;
1855         case PipeInfo::Properties:
1856             os << "CL_PIPE_PROPERTIES";
1857             break;
1858         default:
1859             os << "GL_INVALID_ENUM";
1860             break;
1861     }
1862     return os;
1863 }
1864 
1865 template <>
FromCLenum(CLenum from)1866 PlatformInfo FromCLenum<PlatformInfo>(CLenum from)
1867 {
1868     switch (from)
1869     {
1870         case CL_PLATFORM_PROFILE:
1871             return PlatformInfo::Profile;
1872         case CL_PLATFORM_VERSION:
1873             return PlatformInfo::Version;
1874         case CL_PLATFORM_NAME:
1875             return PlatformInfo::Name;
1876         case CL_PLATFORM_VENDOR:
1877             return PlatformInfo::Vendor;
1878         case CL_PLATFORM_EXTENSIONS:
1879             return PlatformInfo::Extensions;
1880         case CL_PLATFORM_HOST_TIMER_RESOLUTION:
1881             return PlatformInfo::HostTimerResolution;
1882         case CL_PLATFORM_NUMERIC_VERSION:
1883             return PlatformInfo::NumericVersion;
1884         case CL_PLATFORM_EXTENSIONS_WITH_VERSION:
1885             return PlatformInfo::ExtensionsWithVersion;
1886         case CL_PLATFORM_ICD_SUFFIX_KHR:
1887             return PlatformInfo::IcdSuffix;
1888         default:
1889             return PlatformInfo::InvalidEnum;
1890     }
1891 }
1892 
ToCLenum(PlatformInfo from)1893 CLenum ToCLenum(PlatformInfo from)
1894 {
1895     switch (from)
1896     {
1897         case PlatformInfo::Profile:
1898             return CL_PLATFORM_PROFILE;
1899         case PlatformInfo::Version:
1900             return CL_PLATFORM_VERSION;
1901         case PlatformInfo::Name:
1902             return CL_PLATFORM_NAME;
1903         case PlatformInfo::Vendor:
1904             return CL_PLATFORM_VENDOR;
1905         case PlatformInfo::Extensions:
1906             return CL_PLATFORM_EXTENSIONS;
1907         case PlatformInfo::HostTimerResolution:
1908             return CL_PLATFORM_HOST_TIMER_RESOLUTION;
1909         case PlatformInfo::NumericVersion:
1910             return CL_PLATFORM_NUMERIC_VERSION;
1911         case PlatformInfo::ExtensionsWithVersion:
1912             return CL_PLATFORM_EXTENSIONS_WITH_VERSION;
1913         case PlatformInfo::IcdSuffix:
1914             return CL_PLATFORM_ICD_SUFFIX_KHR;
1915         default:
1916             UNREACHABLE();
1917             return 0;
1918     }
1919 }
1920 
operator <<(std::ostream & os,PlatformInfo value)1921 std::ostream &operator<<(std::ostream &os, PlatformInfo value)
1922 {
1923     switch (value)
1924     {
1925         case PlatformInfo::Profile:
1926             os << "CL_PLATFORM_PROFILE";
1927             break;
1928         case PlatformInfo::Version:
1929             os << "CL_PLATFORM_VERSION";
1930             break;
1931         case PlatformInfo::Name:
1932             os << "CL_PLATFORM_NAME";
1933             break;
1934         case PlatformInfo::Vendor:
1935             os << "CL_PLATFORM_VENDOR";
1936             break;
1937         case PlatformInfo::Extensions:
1938             os << "CL_PLATFORM_EXTENSIONS";
1939             break;
1940         case PlatformInfo::HostTimerResolution:
1941             os << "CL_PLATFORM_HOST_TIMER_RESOLUTION";
1942             break;
1943         case PlatformInfo::NumericVersion:
1944             os << "CL_PLATFORM_NUMERIC_VERSION";
1945             break;
1946         case PlatformInfo::ExtensionsWithVersion:
1947             os << "CL_PLATFORM_EXTENSIONS_WITH_VERSION";
1948             break;
1949         case PlatformInfo::IcdSuffix:
1950             os << "CL_PLATFORM_ICD_SUFFIX_KHR";
1951             break;
1952         default:
1953             os << "GL_INVALID_ENUM";
1954             break;
1955     }
1956     return os;
1957 }
1958 
1959 template <>
FromCLenum(CLenum from)1960 ProfilingInfo FromCLenum<ProfilingInfo>(CLenum from)
1961 {
1962     switch (from)
1963     {
1964         case CL_PROFILING_COMMAND_QUEUED:
1965             return ProfilingInfo::CommandQueued;
1966         case CL_PROFILING_COMMAND_SUBMIT:
1967             return ProfilingInfo::CommandSubmit;
1968         case CL_PROFILING_COMMAND_START:
1969             return ProfilingInfo::CommandStart;
1970         case CL_PROFILING_COMMAND_END:
1971             return ProfilingInfo::CommandEnd;
1972         case CL_PROFILING_COMMAND_COMPLETE:
1973             return ProfilingInfo::CommandComplete;
1974         default:
1975             return ProfilingInfo::InvalidEnum;
1976     }
1977 }
1978 
ToCLenum(ProfilingInfo from)1979 CLenum ToCLenum(ProfilingInfo from)
1980 {
1981     switch (from)
1982     {
1983         case ProfilingInfo::CommandQueued:
1984             return CL_PROFILING_COMMAND_QUEUED;
1985         case ProfilingInfo::CommandSubmit:
1986             return CL_PROFILING_COMMAND_SUBMIT;
1987         case ProfilingInfo::CommandStart:
1988             return CL_PROFILING_COMMAND_START;
1989         case ProfilingInfo::CommandEnd:
1990             return CL_PROFILING_COMMAND_END;
1991         case ProfilingInfo::CommandComplete:
1992             return CL_PROFILING_COMMAND_COMPLETE;
1993         default:
1994             UNREACHABLE();
1995             return 0;
1996     }
1997 }
1998 
operator <<(std::ostream & os,ProfilingInfo value)1999 std::ostream &operator<<(std::ostream &os, ProfilingInfo value)
2000 {
2001     switch (value)
2002     {
2003         case ProfilingInfo::CommandQueued:
2004             os << "CL_PROFILING_COMMAND_QUEUED";
2005             break;
2006         case ProfilingInfo::CommandSubmit:
2007             os << "CL_PROFILING_COMMAND_SUBMIT";
2008             break;
2009         case ProfilingInfo::CommandStart:
2010             os << "CL_PROFILING_COMMAND_START";
2011             break;
2012         case ProfilingInfo::CommandEnd:
2013             os << "CL_PROFILING_COMMAND_END";
2014             break;
2015         case ProfilingInfo::CommandComplete:
2016             os << "CL_PROFILING_COMMAND_COMPLETE";
2017             break;
2018         default:
2019             os << "GL_INVALID_ENUM";
2020             break;
2021     }
2022     return os;
2023 }
2024 
2025 template <>
FromCLenum(CLenum from)2026 ProgramBuildInfo FromCLenum<ProgramBuildInfo>(CLenum from)
2027 {
2028     switch (from)
2029     {
2030         case CL_PROGRAM_BUILD_STATUS:
2031             return ProgramBuildInfo::Status;
2032         case CL_PROGRAM_BUILD_OPTIONS:
2033             return ProgramBuildInfo::Options;
2034         case CL_PROGRAM_BUILD_LOG:
2035             return ProgramBuildInfo::Log;
2036         case CL_PROGRAM_BINARY_TYPE:
2037             return ProgramBuildInfo::BinaryType;
2038         case CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE:
2039             return ProgramBuildInfo::GlobalVariableTotalSize;
2040         default:
2041             return ProgramBuildInfo::InvalidEnum;
2042     }
2043 }
2044 
ToCLenum(ProgramBuildInfo from)2045 CLenum ToCLenum(ProgramBuildInfo from)
2046 {
2047     switch (from)
2048     {
2049         case ProgramBuildInfo::Status:
2050             return CL_PROGRAM_BUILD_STATUS;
2051         case ProgramBuildInfo::Options:
2052             return CL_PROGRAM_BUILD_OPTIONS;
2053         case ProgramBuildInfo::Log:
2054             return CL_PROGRAM_BUILD_LOG;
2055         case ProgramBuildInfo::BinaryType:
2056             return CL_PROGRAM_BINARY_TYPE;
2057         case ProgramBuildInfo::GlobalVariableTotalSize:
2058             return CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE;
2059         default:
2060             UNREACHABLE();
2061             return 0;
2062     }
2063 }
2064 
operator <<(std::ostream & os,ProgramBuildInfo value)2065 std::ostream &operator<<(std::ostream &os, ProgramBuildInfo value)
2066 {
2067     switch (value)
2068     {
2069         case ProgramBuildInfo::Status:
2070             os << "CL_PROGRAM_BUILD_STATUS";
2071             break;
2072         case ProgramBuildInfo::Options:
2073             os << "CL_PROGRAM_BUILD_OPTIONS";
2074             break;
2075         case ProgramBuildInfo::Log:
2076             os << "CL_PROGRAM_BUILD_LOG";
2077             break;
2078         case ProgramBuildInfo::BinaryType:
2079             os << "CL_PROGRAM_BINARY_TYPE";
2080             break;
2081         case ProgramBuildInfo::GlobalVariableTotalSize:
2082             os << "CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE";
2083             break;
2084         default:
2085             os << "GL_INVALID_ENUM";
2086             break;
2087     }
2088     return os;
2089 }
2090 
2091 template <>
FromCLenum(CLenum from)2092 ProgramInfo FromCLenum<ProgramInfo>(CLenum from)
2093 {
2094     switch (from)
2095     {
2096         case CL_PROGRAM_REFERENCE_COUNT:
2097             return ProgramInfo::ReferenceCount;
2098         case CL_PROGRAM_CONTEXT:
2099             return ProgramInfo::Context;
2100         case CL_PROGRAM_NUM_DEVICES:
2101             return ProgramInfo::NumDevices;
2102         case CL_PROGRAM_DEVICES:
2103             return ProgramInfo::Devices;
2104         case CL_PROGRAM_SOURCE:
2105             return ProgramInfo::Source;
2106         case CL_PROGRAM_BINARY_SIZES:
2107             return ProgramInfo::BinarySizes;
2108         case CL_PROGRAM_BINARIES:
2109             return ProgramInfo::Binaries;
2110         case CL_PROGRAM_NUM_KERNELS:
2111             return ProgramInfo::NumKernels;
2112         case CL_PROGRAM_KERNEL_NAMES:
2113             return ProgramInfo::KernelNames;
2114         case CL_PROGRAM_IL:
2115             return ProgramInfo::IL;
2116         case CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT:
2117             return ProgramInfo::ScopeGlobalCtorsPresent;
2118         case CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT:
2119             return ProgramInfo::ScopeGlobalDtorsPresent;
2120         default:
2121             return ProgramInfo::InvalidEnum;
2122     }
2123 }
2124 
ToCLenum(ProgramInfo from)2125 CLenum ToCLenum(ProgramInfo from)
2126 {
2127     switch (from)
2128     {
2129         case ProgramInfo::ReferenceCount:
2130             return CL_PROGRAM_REFERENCE_COUNT;
2131         case ProgramInfo::Context:
2132             return CL_PROGRAM_CONTEXT;
2133         case ProgramInfo::NumDevices:
2134             return CL_PROGRAM_NUM_DEVICES;
2135         case ProgramInfo::Devices:
2136             return CL_PROGRAM_DEVICES;
2137         case ProgramInfo::Source:
2138             return CL_PROGRAM_SOURCE;
2139         case ProgramInfo::BinarySizes:
2140             return CL_PROGRAM_BINARY_SIZES;
2141         case ProgramInfo::Binaries:
2142             return CL_PROGRAM_BINARIES;
2143         case ProgramInfo::NumKernels:
2144             return CL_PROGRAM_NUM_KERNELS;
2145         case ProgramInfo::KernelNames:
2146             return CL_PROGRAM_KERNEL_NAMES;
2147         case ProgramInfo::IL:
2148             return CL_PROGRAM_IL;
2149         case ProgramInfo::ScopeGlobalCtorsPresent:
2150             return CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT;
2151         case ProgramInfo::ScopeGlobalDtorsPresent:
2152             return CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT;
2153         default:
2154             UNREACHABLE();
2155             return 0;
2156     }
2157 }
2158 
operator <<(std::ostream & os,ProgramInfo value)2159 std::ostream &operator<<(std::ostream &os, ProgramInfo value)
2160 {
2161     switch (value)
2162     {
2163         case ProgramInfo::ReferenceCount:
2164             os << "CL_PROGRAM_REFERENCE_COUNT";
2165             break;
2166         case ProgramInfo::Context:
2167             os << "CL_PROGRAM_CONTEXT";
2168             break;
2169         case ProgramInfo::NumDevices:
2170             os << "CL_PROGRAM_NUM_DEVICES";
2171             break;
2172         case ProgramInfo::Devices:
2173             os << "CL_PROGRAM_DEVICES";
2174             break;
2175         case ProgramInfo::Source:
2176             os << "CL_PROGRAM_SOURCE";
2177             break;
2178         case ProgramInfo::BinarySizes:
2179             os << "CL_PROGRAM_BINARY_SIZES";
2180             break;
2181         case ProgramInfo::Binaries:
2182             os << "CL_PROGRAM_BINARIES";
2183             break;
2184         case ProgramInfo::NumKernels:
2185             os << "CL_PROGRAM_NUM_KERNELS";
2186             break;
2187         case ProgramInfo::KernelNames:
2188             os << "CL_PROGRAM_KERNEL_NAMES";
2189             break;
2190         case ProgramInfo::IL:
2191             os << "CL_PROGRAM_IL";
2192             break;
2193         case ProgramInfo::ScopeGlobalCtorsPresent:
2194             os << "CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT";
2195             break;
2196         case ProgramInfo::ScopeGlobalDtorsPresent:
2197             os << "CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT";
2198             break;
2199         default:
2200             os << "GL_INVALID_ENUM";
2201             break;
2202     }
2203     return os;
2204 }
2205 
2206 template <>
FromCLenum(CLenum from)2207 SamplerInfo FromCLenum<SamplerInfo>(CLenum from)
2208 {
2209     switch (from)
2210     {
2211         case CL_SAMPLER_REFERENCE_COUNT:
2212             return SamplerInfo::ReferenceCount;
2213         case CL_SAMPLER_CONTEXT:
2214             return SamplerInfo::Context;
2215         case CL_SAMPLER_NORMALIZED_COORDS:
2216             return SamplerInfo::NormalizedCoords;
2217         case CL_SAMPLER_ADDRESSING_MODE:
2218             return SamplerInfo::AddressingMode;
2219         case CL_SAMPLER_FILTER_MODE:
2220             return SamplerInfo::FilterMode;
2221         case CL_SAMPLER_PROPERTIES:
2222             return SamplerInfo::Properties;
2223         default:
2224             return SamplerInfo::InvalidEnum;
2225     }
2226 }
2227 
ToCLenum(SamplerInfo from)2228 CLenum ToCLenum(SamplerInfo from)
2229 {
2230     switch (from)
2231     {
2232         case SamplerInfo::ReferenceCount:
2233             return CL_SAMPLER_REFERENCE_COUNT;
2234         case SamplerInfo::Context:
2235             return CL_SAMPLER_CONTEXT;
2236         case SamplerInfo::NormalizedCoords:
2237             return CL_SAMPLER_NORMALIZED_COORDS;
2238         case SamplerInfo::AddressingMode:
2239             return CL_SAMPLER_ADDRESSING_MODE;
2240         case SamplerInfo::FilterMode:
2241             return CL_SAMPLER_FILTER_MODE;
2242         case SamplerInfo::Properties:
2243             return CL_SAMPLER_PROPERTIES;
2244         default:
2245             UNREACHABLE();
2246             return 0;
2247     }
2248 }
2249 
operator <<(std::ostream & os,SamplerInfo value)2250 std::ostream &operator<<(std::ostream &os, SamplerInfo value)
2251 {
2252     switch (value)
2253     {
2254         case SamplerInfo::ReferenceCount:
2255             os << "CL_SAMPLER_REFERENCE_COUNT";
2256             break;
2257         case SamplerInfo::Context:
2258             os << "CL_SAMPLER_CONTEXT";
2259             break;
2260         case SamplerInfo::NormalizedCoords:
2261             os << "CL_SAMPLER_NORMALIZED_COORDS";
2262             break;
2263         case SamplerInfo::AddressingMode:
2264             os << "CL_SAMPLER_ADDRESSING_MODE";
2265             break;
2266         case SamplerInfo::FilterMode:
2267             os << "CL_SAMPLER_FILTER_MODE";
2268             break;
2269         case SamplerInfo::Properties:
2270             os << "CL_SAMPLER_PROPERTIES";
2271             break;
2272         default:
2273             os << "GL_INVALID_ENUM";
2274             break;
2275     }
2276     return os;
2277 }
2278 
2279 }  // namespace cl
2280