1 // DerelictCL - a Derelict based dynamic binding for OpenCL 2 // written in the D programming language 3 // 4 // Copyright: MeinMein 2013-2014. 5 // License: Boost License 1.0 6 // (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 // Authors: Gerbrand Kamphuis (meinmein.com), 9 // Marvin Meeng (meinmein.com). 10 module derelict.opencl.constants; 11 12 import derelict.opencl.types; 13 14 // cl.h 15 16 // Error Codes 17 enum 18 { 19 CL_SUCCESS = 0, 20 CL_DEVICE_NOT_FOUND = -1, 21 CL_DEVICE_NOT_AVAILABLE = -2, 22 CL_COMPILER_NOT_AVAILABLE = -3, 23 CL_MEM_OBJECT_ALLOCATION_FAILURE = -4, 24 CL_OUT_OF_RESOURCES = -5, 25 CL_OUT_OF_HOST_MEMORY = -6, 26 CL_PROFILING_INFO_NOT_AVAILABLE = -7, 27 CL_MEM_COPY_OVERLAP = -8, 28 CL_IMAGE_FORMAT_MISMATCH = -9, 29 CL_IMAGE_FORMAT_NOT_SUPPORTED = -10, 30 CL_BUILD_PROGRAM_FAILURE = -11, 31 CL_MAP_FAILURE = -12, 32 CL_MISALIGNED_SUB_BUFFER_OFFSET = -13, 33 CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST= -14, 34 CL_COMPILE_PROGRAM_FAILURE = -15, 35 CL_LINKER_NOT_AVAILABLE = -16, 36 CL_LINK_PROGRAM_FAILURE = -17, 37 CL_DEVICE_PARTITION_FAILED = -18, 38 CL_KERNEL_ARG_INFO_NOT_AVAILABLE = -19, 39 40 CL_INVALID_VALUE = -30, 41 CL_INVALID_DEVICE_TYPE = -31, 42 CL_INVALID_PLATFORM = -32, 43 CL_INVALID_DEVICE = -33, 44 CL_INVALID_CONTEXT = -34, 45 CL_INVALID_QUEUE_PROPERTIES = -35, 46 CL_INVALID_COMMAND_QUEUE = -36, 47 CL_INVALID_HOST_PTR = -37, 48 CL_INVALID_MEM_OBJECT = -38, 49 CL_INVALID_IMAGE_FORMAT_DESCRIPTOR = -39, 50 CL_INVALID_IMAGE_SIZE = -40, 51 CL_INVALID_SAMPLER = -41, 52 CL_INVALID_BINARY = -42, 53 CL_INVALID_BUILD_OPTIONS = -43, 54 CL_INVALID_PROGRAM = -44, 55 CL_INVALID_PROGRAM_EXECUTABLE = -45, 56 CL_INVALID_KERNEL_NAME = -46, 57 CL_INVALID_KERNEL_DEFINITION = -47, 58 CL_INVALID_KERNEL = -48, 59 CL_INVALID_ARG_INDEX = -49, 60 CL_INVALID_ARG_VALUE = -50, 61 CL_INVALID_ARG_SIZE = -51, 62 CL_INVALID_KERNEL_ARGS = -52, 63 CL_INVALID_WORK_DIMENSION = -53, 64 CL_INVALID_WORK_GROUP_SIZE = -54, 65 CL_INVALID_WORK_ITEM_SIZE = -55, 66 CL_INVALID_GLOBAL_OFFSET = -56, 67 CL_INVALID_EVENT_WAIT_LIST = -57, 68 CL_INVALID_EVENT = -58, 69 CL_INVALID_OPERATION = -59, 70 CL_INVALID_GL_OBJECT = -60, 71 CL_INVALID_BUFFER_SIZE = -61, 72 CL_INVALID_MIP_LEVEL = -62, 73 CL_INVALID_GLOBAL_WORK_SIZE = -63, 74 CL_INVALID_PROPERTY = -64, 75 CL_INVALID_IMAGE_DESCRIPTOR = -65, 76 CL_INVALID_COMPILER_OPTIONS = -66, 77 CL_INVALID_LINKER_OPTIONS = -67, 78 CL_INVALID_DEVICE_PARTITION_COUNT = -68, 79 CL_INVALID_PIPE_SIZE = -69, 80 CL_INVALID_DEVICE_QUEUE = -70, 81 CL_INVALID_SPEC_ID = -71, 82 CL_MAX_SIZE_RESTRICTION_EXCEEDED = -72, 83 } 84 85 // cl_bool 86 enum 87 { 88 CL_FALSE = 0, 89 CL_TRUE = 1, 90 CL_BLOCKING = CL_TRUE, 91 CL_NON_BLOCKING = CL_FALSE 92 } 93 94 // cl_platform_info 95 enum 96 { 97 CL_PLATFORM_PROFILE = 0x0900, 98 CL_PLATFORM_VERSION = 0x0901, 99 CL_PLATFORM_NAME = 0x0902, 100 CL_PLATFORM_VENDOR = 0x0903, 101 CL_PLATFORM_EXTENSIONS = 0x0904, 102 CL_PLATFORM_HOST_TIMER_RESOLUTION = 0x0905, 103 } 104 105 // cl_device_type - bitfield 106 enum : cl_bitfield 107 { 108 CL_DEVICE_TYPE_DEFAULT = (1 << 0), 109 CL_DEVICE_TYPE_CPU = (1 << 1), 110 CL_DEVICE_TYPE_GPU = (1 << 2), 111 CL_DEVICE_TYPE_ACCELERATOR = (1 << 3), 112 CL_DEVICE_TYPE_CUSTOM = (1 << 4), 113 CL_DEVICE_TYPE_ALL = 0xFFFFFFFF, 114 } 115 116 // cl_device_info 117 enum 118 { 119 CL_DEVICE_TYPE = 0x1000, 120 CL_DEVICE_VENDOR_ID = 0x1001, 121 CL_DEVICE_MAX_COMPUTE_UNITS = 0x1002, 122 CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 0x1003, 123 CL_DEVICE_MAX_WORK_GROUP_SIZE = 0x1004, 124 CL_DEVICE_MAX_WORK_ITEM_SIZES = 0x1005, 125 CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR = 0x1006, 126 CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT = 0x1007, 127 CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT = 0x1008, 128 CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG = 0x1009, 129 CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT = 0x100A, 130 CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE = 0x100B, 131 CL_DEVICE_MAX_CLOCK_FREQUENCY = 0x100C, 132 CL_DEVICE_ADDRESS_BITS = 0x100D, 133 CL_DEVICE_MAX_READ_IMAGE_ARGS = 0x100E, 134 CL_DEVICE_MAX_WRITE_IMAGE_ARGS = 0x100F, 135 CL_DEVICE_MAX_MEM_ALLOC_SIZE = 0x1010, 136 CL_DEVICE_IMAGE2D_MAX_WIDTH = 0x1011, 137 CL_DEVICE_IMAGE2D_MAX_HEIGHT = 0x1012, 138 CL_DEVICE_IMAGE3D_MAX_WIDTH = 0x1013, 139 CL_DEVICE_IMAGE3D_MAX_HEIGHT = 0x1014, 140 CL_DEVICE_IMAGE3D_MAX_DEPTH = 0x1015, 141 CL_DEVICE_IMAGE_SUPPORT = 0x1016, 142 CL_DEVICE_MAX_PARAMETER_SIZE = 0x1017, 143 CL_DEVICE_MAX_SAMPLERS = 0x1018, 144 CL_DEVICE_MEM_BASE_ADDR_ALIGN = 0x1019, 145 CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE = 0x101A, // Deprecated in OpenCl 1.2 146 CL_DEVICE_SINGLE_FP_CONFIG = 0x101B, 147 CL_DEVICE_GLOBAL_MEM_CACHE_TYPE = 0x101C, 148 CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE = 0x101D, 149 CL_DEVICE_GLOBAL_MEM_CACHE_SIZE = 0x101E, 150 CL_DEVICE_GLOBAL_MEM_SIZE = 0x101F, 151 CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE = 0x1020, 152 CL_DEVICE_MAX_CONSTANT_ARGS = 0x1021, 153 CL_DEVICE_LOCAL_MEM_TYPE = 0x1022, 154 CL_DEVICE_LOCAL_MEM_SIZE = 0x1023, 155 CL_DEVICE_ERROR_CORRECTION_SUPPORT = 0x1024, 156 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 0x1025, 157 CL_DEVICE_ENDIAN_LITTLE = 0x1026, 158 CL_DEVICE_AVAILABLE = 0x1027, 159 CL_DEVICE_COMPILER_AVAILABLE = 0x1028, 160 CL_DEVICE_EXECUTION_CAPABILITIES = 0x1029, 161 CL_DEVICE_QUEUE_PROPERTIES = 0x102A, 162 CL_DEVICE_NAME = 0x102B, 163 CL_DEVICE_VENDOR = 0x102C, 164 CL_DRIVER_VERSION = 0x102D, 165 CL_DEVICE_PROFILE = 0x102E, 166 CL_DEVICE_VERSION = 0x102F, 167 CL_DEVICE_EXTENSIONS = 0x1030, 168 CL_DEVICE_PLATFORM = 0x1031, 169 CL_DEVICE_DOUBLE_FP_CONFIG = 0x1032, 170 // 0x1033 reserved for CL_DEVICE_HALF_FP_CONFIG 171 CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF = 0x1034, 172 CL_DEVICE_HOST_UNIFIED_MEMORY = 0x1035, 173 CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR = 0x1036, 174 CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT = 0x1037, 175 CL_DEVICE_NATIVE_VECTOR_WIDTH_INT = 0x1038, 176 CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG = 0x1039, 177 CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT = 0x103A, 178 CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE = 0x103B, 179 CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF = 0x103C, 180 CL_DEVICE_OPENCL_C_VERSION = 0x103D, 181 CL_DEVICE_LINKER_AVAILABLE = 0x103E, 182 CL_DEVICE_BUILT_IN_KERNELS = 0x103F, 183 CL_DEVICE_IMAGE_MAX_BUFFER_SIZE = 0x1040, 184 CL_DEVICE_IMAGE_MAX_ARRAY_SIZE = 0x1041, 185 CL_DEVICE_PARENT_DEVICE = 0x1042, 186 CL_DEVICE_PARTITION_MAX_SUB_DEVICES = 0x1043, 187 CL_DEVICE_PARTITION_PROPERTIES = 0x1044, 188 CL_DEVICE_PARTITION_AFFINITY_DOMAIN = 0x1045, 189 CL_DEVICE_PARTITION_TYPE = 0x1046, 190 CL_DEVICE_REFERENCE_COUNT = 0x1047, 191 CL_DEVICE_PREFERRED_INTEROP_USER_SYNC = 0x1048, 192 CL_DEVICE_PRINTF_BUFFER_SIZE = 0x1049, 193 CL_DEVICE_IMAGE_PITCH_ALIGNMENT = 0x104A, 194 CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT = 0x104B, 195 CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS = 0x104C, 196 CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE = 0x104D, 197 CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES = 0x104E, 198 CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE = 0x104F, 199 CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE = 0x1050, 200 CL_DEVICE_MAX_ON_DEVICE_QUEUES = 0x1051, 201 CL_DEVICE_MAX_ON_DEVICE_EVENTS = 0x1052, 202 CL_DEVICE_SVM_CAPABILITIES = 0x1053, 203 CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE = 0x1054, 204 CL_DEVICE_MAX_PIPE_ARGS = 0x1055, 205 CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS = 0x1056, 206 CL_DEVICE_PIPE_MAX_PACKET_SIZE = 0x1057, 207 CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT = 0x1058, 208 CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT = 0x1059, 209 CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT = 0x105A, 210 CL_DEVICE_IL_VERSION = 0x105B, 211 CL_DEVICE_MAX_NUM_SUB_GROUPS = 0x105C, 212 CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS = 0x105D, 213 } 214 215 // cl_device_fp_config 216 enum : cl_bitfield 217 { 218 CL_FP_DENORM = (1 << 0), 219 CL_FP_INF_NAN = (1 << 1), 220 CL_FP_ROUND_TO_NEAREST = (1 << 2), 221 CL_FP_ROUND_TO_ZERO = (1 << 3), 222 CL_FP_ROUND_TO_INF = (1 << 4), 223 CL_FP_FMA = (1 << 5), 224 CL_FP_SOFT_FLOAT = (1 << 6), 225 CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT = (1 << 7), 226 } 227 228 // cl_device_mem_cache_type 229 enum 230 { 231 CL_NONE = 0x0, 232 CL_READ_ONLY_CACHE = 0x1, 233 CL_READ_WRITE_CACHE = 0x2, 234 } 235 236 // cl_device_local_mem_type 237 enum 238 { 239 CL_LOCAL = 0x1, 240 CL_GLOBAL = 0x2, 241 } 242 243 // cl_device_exec_capabilities 244 enum : cl_bitfield 245 { 246 CL_EXEC_KERNEL = (1 << 0), 247 CL_EXEC_NATIVE_KERNEL = (1 << 1), 248 } 249 250 // cl_command_queue_properties 251 enum : cl_bitfield 252 { 253 CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE = (1 << 0), 254 CL_QUEUE_PROFILING_ENABLE = (1 << 1), 255 CL_QUEUE_ON_DEVICE = (1 << 2), 256 CL_QUEUE_ON_DEVICE_DEFAULT = (1 << 3), 257 } 258 259 // cl_context_info 260 enum 261 { 262 CL_CONTEXT_REFERENCE_COUNT = 0x1080, 263 CL_CONTEXT_DEVICES = 0x1081, 264 CL_CONTEXT_PROPERTIES = 0x1082, 265 CL_CONTEXT_NUM_DEVICES = 0x1083, 266 } 267 268 // cl_context_properties 269 enum 270 { 271 CL_CONTEXT_PLATFORM = 0x1084, 272 CL_CONTEXT_INTEROP_USER_SYNC = 0x1085, 273 } 274 275 // cl_device_partition_property 276 enum : ptrdiff_t 277 { 278 CL_DEVICE_PARTITION_EQUALLY = 0x1086, 279 CL_DEVICE_PARTITION_BY_COUNTS = 0x1087, 280 CL_DEVICE_PARTITION_BY_COUNTS_LIST_END = 0x0, 281 CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN = 0x1088, 282 } 283 284 // cl_device_affinity_domain 285 enum : cl_bitfield 286 { 287 CL_DEVICE_AFFINITY_DOMAIN_NUMA = (1 << 0), 288 CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE = (1 << 1), 289 CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE = (1 << 2), 290 CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE = (1 << 3), 291 CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE = (1 << 4), 292 CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE = (1 << 5), 293 } 294 295 // cl_device_svm_capabilities 296 enum 297 { 298 CL_DEVICE_SVM_COARSE_GRAIN_BUFFER = (1 << 0), 299 CL_DEVICE_SVM_FINE_GRAIN_BUFFER = (1 << 1), 300 CL_DEVICE_SVM_FINE_GRAIN_SYSTEM = (1 << 2), 301 CL_DEVICE_SVM_ATOMICS = (1 << 3), 302 } 303 // cl_command_queue_info 304 enum 305 { 306 CL_QUEUE_CONTEXT = 0x1090, 307 CL_QUEUE_DEVICE = 0x1091, 308 CL_QUEUE_REFERENCE_COUNT = 0x1092, 309 CL_QUEUE_PROPERTIES = 0x1093, 310 CL_QUEUE_SIZE = 0x1094, 311 CL_QUEUE_DEVICE_DEFAULT = 0x1095, 312 } 313 314 // cl_mem_flags and cl_svm_mem_flags - bitfield 315 enum : cl_bitfield 316 { 317 CL_MEM_READ_WRITE = (1 << 0), 318 CL_MEM_WRITE_ONLY = (1 << 1), 319 CL_MEM_READ_ONLY = (1 << 2), 320 CL_MEM_USE_HOST_PTR = (1 << 3), 321 CL_MEM_ALLOC_HOST_PTR = (1 << 4), 322 CL_MEM_COPY_HOST_PTR = (1 << 5), 323 // reserved = (1 << 6), 324 CL_MEM_HOST_WRITE_ONLY = (1 << 7), 325 CL_MEM_HOST_READ_ONLY = (1 << 8), 326 CL_MEM_HOST_NO_ACCESS = (1 << 9), 327 CL_MEM_SVM_FINE_GRAIN_BUFFER = (1 << 10), // cl_svm_mem_flags only 328 CL_MEM_SVM_ATOMICS = (1 << 11), // cl_svm_mem_flags only 329 CL_MEM_KERNEL_READ_AND_WRITE = (1 << 12), 330 } 331 332 // cl_mem_migration_flags 333 enum : cl_bitfield 334 { 335 CL_MIGRATE_MEM_OBJECT_HOST = (1 << 0), 336 CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED = (1 << 1), 337 } 338 339 // cl_channel_order 340 enum 341 { 342 CL_R = 0x10B0, 343 CL_A = 0x10B1, 344 CL_RG = 0x10B2, 345 CL_RA = 0x10B3, 346 CL_RGB = 0x10B4, 347 CL_RGBA = 0x10B5, 348 CL_BGRA = 0x10B6, 349 CL_ARGB = 0x10B7, 350 CL_INTENSITY = 0x10B8, 351 CL_LUMINANCE = 0x10B9, 352 CL_Rx = 0x10BA, 353 CL_RGx = 0x10BB, 354 CL_RGBx = 0x10BC, 355 CL_DEPTH = 0x10BD, 356 CL_DEPTH_STENCIL = 0x10BE, 357 CL_sRGB = 0x10BF, 358 CL_sRGBx = 0x10C0, 359 CL_sRGBA = 0x10C1, 360 CL_sBRGA = 0x10C2, 361 CL_ABGR = 0x10C3, 362 } 363 364 // cl_channel_type 365 enum 366 { 367 CL_SNORM_INT8 = 0x10D0, 368 CL_SNORM_INT16 = 0x10D1, 369 CL_UNORM_INT8 = 0x10D2, 370 CL_UNORM_INT16 = 0x10D3, 371 CL_UNORM_SHORT_565 = 0x10D4, 372 CL_UNORM_SHORT_555 = 0x10D5, 373 CL_UNORM_INT_101010 = 0x10D6, 374 CL_SIGNED_INT8 = 0x10D7, 375 CL_SIGNED_INT16 = 0x10D8, 376 CL_SIGNED_INT32 = 0x10D9, 377 CL_UNSIGNED_INT8 = 0x10DA, 378 CL_UNSIGNED_INT16 = 0x10DB, 379 CL_UNSIGNED_INT32 = 0x10DC, 380 CL_HALF_FLOAT = 0x10DD, 381 CL_FLOAT = 0x10DE, 382 CL_UNORM_INT24 = 0x10DF, 383 CL_UNORM_INT_101010_2 = 0x10E0, 384 } 385 386 // cl_mem_object_type 387 enum 388 { 389 CL_MEM_OBJECT_BUFFER = 0x10F0, 390 CL_MEM_OBJECT_IMAGE2D = 0x10F1, 391 CL_MEM_OBJECT_IMAGE3D = 0x10F2, 392 CL_MEM_OBJECT_IMAGE2D_ARRAY = 0x10F3, 393 CL_MEM_OBJECT_IMAGE1D = 0x10F4, 394 CL_MEM_OBJECT_IMAGE1D_ARRAY = 0x10F5, 395 CL_MEM_OBJECT_IMAGE1D_BUFFER = 0x10F6, 396 CL_MEM_OBJECT_PIPE = 0x10F7, 397 } 398 399 // cl_mem_info 400 enum 401 { 402 CL_MEM_TYPE = 0x1100, 403 CL_MEM_FLAGS = 0x1101, 404 CL_MEM_SIZE = 0x1102, 405 CL_MEM_HOST_PTR = 0x1103, 406 CL_MEM_MAP_COUNT = 0x1104, 407 CL_MEM_REFERENCE_COUNT = 0x1105, 408 CL_MEM_CONTEXT = 0x1106, 409 CL_MEM_ASSOCIATED_MEMOBJECT = 0x1107, 410 CL_MEM_OFFSET = 0x1108, 411 CL_MEM_USES_SVM_POINTER = 0x1109, 412 } 413 414 // cl_image_info 415 enum 416 { 417 CL_IMAGE_FORMAT = 0x1110, 418 CL_IMAGE_ELEMENT_SIZE = 0x1111, 419 CL_IMAGE_ROW_PITCH = 0x1112, 420 CL_IMAGE_SLICE_PITCH = 0x1113, 421 CL_IMAGE_WIDTH = 0x1114, 422 CL_IMAGE_HEIGHT = 0x1115, 423 CL_IMAGE_DEPTH = 0x1116, 424 CL_IMAGE_ARRAY_SIZE = 0x1117, 425 CL_IMAGE_BUFFER = 0x1118, 426 CL_IMAGE_NUM_MIP_LEVELS = 0x1119, 427 CL_IMAGE_NUM_SAMPLES = 0x111A, 428 } 429 430 // cl_pipe_info 431 enum 432 { 433 CL_PIPE_PACKET_SIZE = 0x1120, 434 CL_PIPE_MAX_PACKETS = 0x1121, 435 } 436 437 // cl_addressing_mode 438 enum 439 { 440 CL_ADDRESS_NONE = 0x1130, 441 CL_ADDRESS_CLAMP_TO_EDGE = 0x1131, 442 CL_ADDRESS_CLAMP = 0x1132, 443 CL_ADDRESS_REPEAT = 0x1133, 444 CL_ADDRESS_MIRRORED_REPEAT = 0x1134, 445 } 446 447 // cl_filter_mode 448 enum 449 { 450 CL_FILTER_NEAREST = 0x1140, 451 CL_FILTER_LINEAR = 0x1141, 452 } 453 454 // cl_sampler_info 455 enum 456 { 457 CL_SAMPLER_REFERENCE_COUNT = 0x1150, 458 CL_SAMPLER_CONTEXT = 0x1151, 459 CL_SAMPLER_NORMALIZED_COORDS = 0x1152, 460 CL_SAMPLER_ADDRESSING_MODE = 0x1153, 461 CL_SAMPLER_FILTER_MODE = 0x1154, 462 CL_SAMPLER_MIP_FILTER_MODE = 0x1155, 463 CL_SAMPLER_LOD_MIN = 0x1156, 464 CL_SAMPLER_LOD_MAX = 0x1157, 465 } 466 467 // cl_map_flags - bitfield 468 enum : cl_bitfield 469 { 470 CL_MAP_READ = (1 << 0), 471 CL_MAP_WRITE = (1 << 1), 472 CL_MAP_WRITE_INVALIDATE_REGION = (1 << 2), 473 } 474 475 // cl_program_info 476 enum 477 { 478 CL_PROGRAM_REFERENCE_COUNT = 0x1160, 479 CL_PROGRAM_CONTEXT = 0x1161, 480 CL_PROGRAM_NUM_DEVICES = 0x1162, 481 CL_PROGRAM_DEVICES = 0x1163, 482 CL_PROGRAM_SOURCE = 0x1164, 483 CL_PROGRAM_BINARY_SIZES = 0x1165, 484 CL_PROGRAM_BINARIES = 0x1166, 485 CL_PROGRAM_NUM_KERNELS = 0x1167, 486 CL_PROGRAM_KERNEL_NAMES = 0x1168, 487 CL_PROGRAM_IL = 0x1169, 488 CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT = 0x116A, 489 CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT = 0x116B, 490 } 491 492 // cl_program_build_info 493 enum 494 { 495 CL_PROGRAM_BUILD_STATUS = 0x1181, 496 CL_PROGRAM_BUILD_OPTIONS = 0x1182, 497 CL_PROGRAM_BUILD_LOG = 0x1183, 498 CL_PROGRAM_BINARY_TYPE = 0x1184, 499 CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE = 0x1185, 500 } 501 502 // cl_program_binary_type 503 enum 504 { 505 CL_PROGRAM_BINARY_TYPE_NONE = 0x0, 506 CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT = 0x1, 507 CL_PROGRAM_BINARY_TYPE_LIBRARY = 0x2, 508 CL_PROGRAM_BINARY_TYPE_EXECUTABLE = 0x4, 509 } 510 511 // cl_build_status 512 enum 513 { 514 CL_BUILD_SUCCESS = 0, 515 CL_BUILD_NONE = -1, 516 CL_BUILD_ERROR = -2, 517 CL_BUILD_IN_PROGRESS = -3, 518 } 519 520 // cl_kernel_info 521 enum 522 { 523 CL_KERNEL_FUNCTION_NAME = 0x1190, 524 CL_KERNEL_NUM_ARGS = 0x1191, 525 CL_KERNEL_REFERENCE_COUNT = 0x1192, 526 CL_KERNEL_CONTEXT = 0x1193, 527 CL_KERNEL_PROGRAM = 0x1194, 528 CL_KERNEL_ATTRIBUTES = 0x1195, 529 CL_KERNEL_MAX_NUM_SUB_GROUPS = 0x11B9, 530 CL_KERNEL_COMPILE_NUM_SUB_GROUPS = 0x11BA, 531 } 532 533 // cl_kernel_arg_info 534 enum 535 { 536 CL_KERNEL_ARG_ADDRESS_QUALIFIER = 0x1196, 537 CL_KERNEL_ARG_ACCESS_QUALIFIER = 0x1197, 538 CL_KERNEL_ARG_TYPE_NAME = 0x1198, 539 CL_KERNEL_ARG_TYPE_QUALIFIER = 0x1199, 540 CL_KERNEL_ARG_NAME = 0x119A, 541 } 542 543 // cl_kernel_arg_address_qualifier 544 enum 545 { 546 CL_KERNEL_ARG_ADDRESS_GLOBAL = 0x119B, 547 CL_KERNEL_ARG_ADDRESS_LOCAL = 0x119C, 548 CL_KERNEL_ARG_ADDRESS_CONSTANT = 0x119D, 549 CL_KERNEL_ARG_ADDRESS_PRIVATE = 0x119E, 550 } 551 552 // cl_kernel_arg_access_qualifier 553 enum 554 { 555 CL_KERNEL_ARG_ACCESS_READ_ONLY = 0x11A0, 556 CL_KERNEL_ARG_ACCESS_WRITE_ONLY = 0x11A1, 557 CL_KERNEL_ARG_ACCESS_READ_WRITE = 0x11A2, 558 CL_KERNEL_ARG_ACCESS_NONE = 0x11A3, 559 } 560 561 // cl_kernel_arg_type_qualifer 562 enum : cl_bitfield 563 { 564 CL_KERNEL_ARG_TYPE_NONE = 0, 565 CL_KERNEL_ARG_TYPE_CONST = (1 << 0), 566 CL_KERNEL_ARG_TYPE_RESTRICT = (1 << 1), 567 CL_KERNEL_ARG_TYPE_VOLATILE = (1 << 2), 568 CL_KERNEL_ARG_TYPE_PIPE = (1 << 3), 569 } 570 571 // cl_kernel_work_group_info 572 enum 573 { 574 CL_KERNEL_WORK_GROUP_SIZE = 0x11B0, 575 CL_KERNEL_COMPILE_WORK_GROUP_SIZE = 0x11B1, 576 CL_KERNEL_LOCAL_MEM_SIZE = 0x11B2, 577 CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE= 0x11B3, 578 CL_KERNEL_PRIVATE_MEM_SIZE = 0x11B4, 579 CL_KERNEL_GLOBAL_WORK_SIZE = 0x11B5, 580 } 581 582 // cl_kernel_sub_group_info 583 enum 584 { 585 CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE = 0x2033, 586 CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE = 0x2034, 587 CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT = 0x11B8, 588 } 589 590 // cl_kernel_exec_info 591 enum 592 { 593 CL_KERNEL_EXEC_INFO_SVM_PTRS = 0x11B6, 594 CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM = 0x11B7, 595 } 596 597 // cl_event_info 598 enum 599 { 600 CL_EVENT_COMMAND_QUEUE = 0x11D0, 601 CL_EVENT_COMMAND_TYPE = 0x11D1, 602 CL_EVENT_REFERENCE_COUNT = 0x11D2, 603 CL_EVENT_COMMAND_EXECUTION_STATUS = 0x11D3, 604 CL_EVENT_CONTEXT = 0x11D4, 605 } 606 607 // cl_command_type 608 enum 609 { 610 CL_COMMAND_NDRANGE_KERNEL = 0x11F0, 611 CL_COMMAND_TASK = 0x11F1, 612 CL_COMMAND_NATIVE_KERNEL = 0x11F2, 613 CL_COMMAND_READ_BUFFER = 0x11F3, 614 CL_COMMAND_WRITE_BUFFER = 0x11F4, 615 CL_COMMAND_COPY_BUFFER = 0x11F5, 616 CL_COMMAND_READ_IMAGE = 0x11F6, 617 CL_COMMAND_WRITE_IMAGE = 0x11F7, 618 CL_COMMAND_COPY_IMAGE = 0x11F8, 619 CL_COMMAND_COPY_IMAGE_TO_BUFFER = 0x11F9, 620 CL_COMMAND_COPY_BUFFER_TO_IMAGE = 0x11FA, 621 CL_COMMAND_MAP_BUFFER = 0x11FB, 622 CL_COMMAND_MAP_IMAGE = 0x11FC, 623 CL_COMMAND_UNMAP_MEM_OBJECT = 0x11FD, 624 CL_COMMAND_MARKER = 0x11FE, 625 CL_COMMAND_ACQUIRE_GL_OBJECTS = 0x11FF, 626 CL_COMMAND_RELEASE_GL_OBJECTS = 0x1200, 627 CL_COMMAND_READ_BUFFER_RECT = 0x1201, 628 CL_COMMAND_WRITE_BUFFER_RECT = 0x1202, 629 CL_COMMAND_COPY_BUFFER_RECT = 0x1203, 630 CL_COMMAND_USER = 0x1204, 631 CL_COMMAND_BARRIER = 0x1205, 632 CL_COMMAND_MIGRATE_MEM_OBJECTS = 0x1206, 633 CL_COMMAND_FILL_BUFFER = 0x1207, 634 CL_COMMAND_FILL_IMAGE = 0x1208, 635 CL_COMMAND_SVM_FREE = 0x1209, 636 CL_COMMAND_SVM_MEMCPY = 0x120A, 637 CL_COMMAND_SVM_MEMFILL = 0x120B, 638 CL_COMMAND_SVM_MAP = 0x120C, 639 CL_COMMAND_SVM_UNMAP = 0x120D, 640 } 641 642 // cl_command_execution_status 643 enum 644 { 645 CL_COMPLETE = 0x0, 646 CL_RUNNING = 0x1, 647 CL_SUBMITTED = 0x2, 648 CL_QUEUED = 0x3, 649 } 650 651 // cl_buffer_create_type 652 enum 653 { 654 CL_BUFFER_CREATE_TYPE_REGION = 0x1220, 655 } 656 657 // cl_profiling_info 658 enum 659 { 660 CL_PROFILING_COMMAND_QUEUED = 0x1280, 661 CL_PROFILING_COMMAND_SUBMIT = 0x1281, 662 CL_PROFILING_COMMAND_START = 0x1282, 663 CL_PROFILING_COMMAND_END = 0x1283, 664 CL_PROFILING_COMMAND_COMPLETE = 0x1284, 665 } 666 667 668 // cl_ext.h 669 670 // cl_khr_fp16 extension 671 enum CL_DEVICE_HALF_FP_CONFIG = 0x1033; 672 673 // cl_APPLE_SetMemObjectDestructor extension 674 enum cl_APPLE_SetMemObjectDestructor = 1; 675 676 // cl_APPLE_ContextLoggingFunctions 677 enum cl_APPLE_ContextLoggingFunctions = 1; 678 679 // cl_khr_icd extension 680 enum cl_khr_icd = 1; 681 // cl_platform_info 682 enum CL_PLATFORM_ICD_SUFFIX_KHR = 0x0920; 683 // Additional Error Codes 684 enum CL_PLATFORM_NOT_FOUND_KHR = -1001; 685 686 // cl_khr_initalize_memory extension 687 enum CL_CONTEXT_MEMORY_INITIALIZE_KHR = 0x200E; 688 689 // cl_khr_terminate_context extension 690 enum cl_khr_terminate_context = 1; 691 enum 692 { 693 CL_DEVICE_TERMINATE_CAPABILITY_KHR = 0x200F, 694 CL_CONTEXT_TERMINATE_KHR = 0x2010, 695 } 696 697 // cl_nv_device_attribute_query extension 698 enum 699 { 700 CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV = 0x4000, 701 CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV = 0x4001, 702 CL_DEVICE_REGISTERS_PER_BLOCK_NV = 0x4002, 703 CL_DEVICE_WARP_SIZE_NV = 0x4003, 704 CL_DEVICE_GPU_OVERLAP_NV = 0x4004, 705 CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV = 0x4005, 706 CL_DEVICE_INTEGRATED_MEMORY_NV = 0x4006, 707 } 708 709 // cl_amd_device_attribute_query extension 710 enum CL_DEVICE_PROFILING_TIMER_OFFSET_AMD = 0x4036; 711 712 // cl_ext_device_fission extension 713 enum cl_ext_device_fission = 1; 714 715 // cl_device_partition_property_ext extension 716 enum 717 { 718 CL_DEVICE_PARTITION_EQUALLY_EXT = 0x4050, 719 CL_DEVICE_PARTITION_BY_COUNTS_EXT = 0x4051, 720 CL_DEVICE_PARTITION_BY_NAMES_EXT = 0x4052, 721 CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT = 0x4053, 722 } 723 724 // clDeviceGetInfo selectors 725 enum 726 { 727 CL_DEVICE_PARENT_DEVICE_EXT = 0x4054, 728 CL_DEVICE_PARTITION_TYPES_EXT = 0x4055, 729 CL_DEVICE_AFFINITY_DOMAINS_EXT = 0x4056, 730 CL_DEVICE_REFERENCE_COUNT_EXT = 0x4057, 731 CL_DEVICE_PARTITION_STYLE_EXT = 0x4058, 732 } 733 734 // error codes 735 enum 736 { 737 CL_DEVICE_PARTITION_FAILED_EXT = -1057, 738 CL_INVALID_PARTITION_COUNT_EXT = -1058, 739 CL_INVALID_PARTITION_NAME_EXT = -1059, 740 } 741 742 // CL_AFFINITY_DOMAINs 743 enum 744 { 745 CL_AFFINITY_DOMAIN_L1_CACHE_EXT = 0x1, 746 CL_AFFINITY_DOMAIN_L2_CACHE_EXT = 0x2, 747 CL_AFFINITY_DOMAIN_L3_CACHE_EXT = 0x3, 748 CL_AFFINITY_DOMAIN_L4_CACHE_EXT = 0x4, 749 CL_AFFINITY_DOMAIN_NUMA_EXT = 0x10, 750 CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT = 0x100, 751 } 752 753 // cl_device_partition_property_ext list terminators 754 enum 755 { 756 CL_PROPERTIES_LIST_END_EXT = (cast(cl_device_partition_property_ext) 0), 757 CL_PARTITION_BY_COUNTS_LIST_END_EXT = (cast(cl_device_partition_property_ext) 0), 758 CL_PARTITION_BY_NAMES_LIST_END_EXT = (cast(cl_device_partition_property_ext) 0 - 1), 759 } 760 761 762 // cl_egl.h 763 764 // Command type for events created with clEnqueueAcquireEGLObjectsKHR 765 enum 766 { 767 CL_COMMAND_EGL_FENCE_SYNC_OBJECT_KHR = 0x202F, 768 CL_COMMAND_ACQUIRE_EGL_OBJECTS_KHR = 0x202D, 769 CL_COMMAND_RELEASE_EGL_OBJECTS_KHR = 0x202E, 770 } 771 772 // Error type for clCreateFromEGLImageKHR 773 enum 774 { 775 CL_INVALID_EGL_OBJECT_KHR = -1093, 776 CL_EGL_RESOURCE_NOT_ACQUIRED_KHR = -1092, 777 } 778 779 // cl_khr_egl_image extension 780 enum cl_khr_egl_image = 1; 781 782 // cl_khr_egl_event extension 783 enum cl_khr_egl_event = 1; 784 785 786 // cl_gl.h 787 788 // cl_gl_object_type 789 enum 790 { 791 CL_GL_OBJECT_BUFFER = 0x2000, 792 CL_GL_OBJECT_TEXTURE2D = 0x2001, 793 CL_GL_OBJECT_TEXTURE3D = 0x2002, 794 CL_GL_OBJECT_RENDERBUFFER = 0x2003, 795 CL_GL_OBJECT_TEXTURE2D_ARRAY = 0x200E, 796 CL_GL_OBJECT_TEXTURE1D = 0x200F, 797 CL_GL_OBJECT_TEXTURE1D_ARRAY = 0x2010, 798 CL_GL_OBJECT_TEXTURE_BUFFER = 0x2011, 799 } 800 801 // cl_gl_texture_info 802 enum 803 { 804 CL_GL_TEXTURE_TARGET = 0x2004, 805 CL_GL_MIPMAP_LEVEL = 0x2005, 806 CL_GL_NUM_SAMPLES = 0x2012, 807 } 808 809 // Additional Error Codes 810 enum CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR = -1000; 811 812 // cl_gl_context_info 813 enum 814 { 815 CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR = 0x2006, 816 CL_DEVICES_FOR_GL_CONTEXT_KHR = 0x2007, 817 } 818 819 // Additional cl_context_properties 820 enum 821 { 822 CL_GL_CONTEXT_KHR = 0x2008, 823 CL_EGL_DISPLAY_KHR = 0x2009, 824 CL_GLX_DISPLAY_KHR = 0x200A, 825 CL_WGL_HDC_KHR = 0x200B, 826 CL_CGL_SHAREGROUP_KHR = 0x200C, 827 } 828 829 // cl_khr_gl_sharing extension 830 enum cl_khr_gl_sharing = 1; 831 832 833 // cl_gl_ext.h 834 835 // cl_khr_gl_event extension 836 enum CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR = 0x200D; 837 838 839 // cl_d3d10.h 840 841 // cl_khr_d3d10_sharing extension 842 enum cl_khr_d3d10_sharing = 1; 843 844 // Error Codes 845 enum 846 { 847 CL_INVALID_D3D10_DEVICE_KHR = -1002, 848 CL_INVALID_D3D10_RESOURCE_KHR = -1003, 849 CL_D3D10_RESOURCE_ALREADY_ACQUIRED_KHR = -1004, 850 CL_D3D10_RESOURCE_NOT_ACQUIRED_KHR = -1005, 851 } 852 853 // cl_d3d10_device_source_nv 854 enum 855 { 856 CL_D3D10_DEVICE_KHR = 0x4010, 857 CL_D3D10_DXGI_ADAPTER_KHR = 0x4011, 858 } 859 860 // cl_d3d10_device_set_nv 861 enum 862 { 863 CL_PREFERRED_DEVICES_FOR_D3D10_KHR = 0x4012, 864 CL_ALL_DEVICES_FOR_D3D10_KHR = 0x4013, 865 } 866 867 // cl_context_info 868 enum 869 { 870 CL_CONTEXT_D3D10_DEVICE_KHR = 0x4014, 871 CL_CONTEXT_D3D10_PREFER_SHARED_RESOURCES_KHR = 0x402C, 872 } 873 874 // cl_mem_info 875 enum CL_MEM_D3D10_RESOURCE_KHR = 0x4015; 876 877 // cl_image_info 878 enum CL_IMAGE_D3D10_SUBRESOURCE_KHR = 0x4016; 879 880 // cl_command_type 881 enum CL_COMMAND_ACQUIRE_D3D10_OBJECTS_KHR = 0x4017; 882 enum CL_COMMAND_RELEASE_D3D10_OBJECTS_KHR = 0x4018; 883 884 885 // cl_d3d11.h 886 887 // cl_khr_d3d11_sharing extension 888 enum cl_khr_d3d11_sharing = 1; 889 890 // Error Codes 891 enum 892 { 893 CL_INVALID_D3D11_DEVICE_KHR = -1006, 894 CL_INVALID_D3D11_RESOURCE_KHR = -1007, 895 CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR = -1008, 896 CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR = -1009, 897 } 898 899 // cl_d3d11_device_source 900 enum 901 { 902 CL_D3D11_DEVICE_KHR = 0x4019, 903 CL_D3D11_DXGI_ADAPTER_KHR = 0x401A, 904 } 905 906 // cl_d3d11_device_set 907 enum 908 { 909 CL_PREFERRED_DEVICES_FOR_D3D11_KHR = 0x401B, 910 CL_ALL_DEVICES_FOR_D3D11_KHR = 0x401C, 911 } 912 913 // cl_context_info 914 enum 915 { 916 CL_CONTEXT_D3D11_DEVICE_KHR = 0x401D, 917 CL_CONTEXT_D3D11_PREFER_SHARED_RESOURCES_KHR = 0x402D, 918 } 919 920 // cl_mem_info 921 enum CL_MEM_D3D11_RESOURCE_KHR = 0x401E; 922 923 // cl_image_info 924 enum CL_IMAGE_D3D11_SUBRESOURCE_KHR = 0x401F; 925 926 // cl_command_type 927 enum 928 { 929 CL_COMMAND_ACQUIRE_D3D11_OBJECTS_KHR = 0x4020, 930 CL_COMMAND_RELEASE_D3D11_OBJECTS_KHR = 0x4021, 931 } 932 933 934 // cl_dx9_media_sharing.h extension 935 936 // cl_khr_dx9_media_sharing 937 enum cl_khr_dx9_media_sharing = 1; 938 939 // Error Codes 940 enum 941 { 942 CL_INVALID_DX9_MEDIA_ADAPTER_KHR = -1010, 943 CL_INVALID_DX9_MEDIA_SURFACE_KHR = -1011, 944 CL_DX9_MEDIA_SURFACE_ALREADY_ACQUIRED_KHR = -1012, 945 CL_DX9_MEDIA_SURFACE_NOT_ACQUIRED_KHR = -1013, 946 } 947 948 // cl_media_adapter_type_khr 949 enum 950 { 951 CL_ADAPTER_D3D9_KHR = 0x2020, 952 CL_ADAPTER_D3D9EX_KHR = 0x2021, 953 CL_ADAPTER_DXVA_KHR = 0x2022, 954 } 955 956 // cl_media_adapter_set_khr 957 enum 958 { 959 CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR = 0x2023, 960 CL_ALL_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR = 0x2024, 961 } 962 963 // cl_context_info 964 enum 965 { 966 CL_CONTEXT_ADAPTER_D3D9_KHR = 0x2025, 967 CL_CONTEXT_ADAPTER_D3D9EX_KHR = 0x2026, 968 CL_CONTEXT_ADAPTER_DXVA_KHR = 0x2027, 969 } 970 971 // cl_mem_info 972 enum 973 { 974 CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR = 0x2028, 975 CL_MEM_DX9_MEDIA_SURFACE_INFO_KHR = 0x2029, 976 } 977 978 // cl_image_info 979 enum CL_IMAGE_DX9_MEDIA_PLANE_KHR = 0x202A; 980 981 // cl_command_type 982 enum 983 { 984 CL_COMMAND_ACQUIRE_DX9_MEDIA_SURFACES_KHR = 0x202B, 985 CL_COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR = 0x202C, 986 } 987 988 989 // cl_platform.h 990 991 /* Macro names and corresponding values defined by OpenCL */ 992 enum CL_CHAR_BIT = 8; 993 enum CL_SCHAR_MAX = 127; 994 enum CL_SCHAR_MIN = (-127-1); 995 enum CL_CHAR_MAX = CL_SCHAR_MAX; 996 enum CL_CHAR_MIN = CL_SCHAR_MIN; 997 enum CL_UCHAR_MAX = 255; 998 enum CL_SHRT_MAX = 32767; 999 enum CL_SHRT_MIN = (-32767-1); 1000 enum CL_USHRT_MAX = 65535; 1001 enum CL_INT_MAX = 2147483647; 1002 enum CL_INT_MIN = (-2147483647-1); 1003 enum CL_UINT_MAX = 0xffffffffU; 1004 enum CL_LONG_MAX = (cast(cl_long) 0x7FFFFFFFFFFFFFFF); 1005 enum CL_LONG_MIN = (cast(cl_long) -0x7FFFFFFFFFFFFFFF - 1); 1006 enum CL_ULONG_MAX = (cast(cl_ulong) 0xFFFFFFFFFFFFFFFF); 1007 1008 enum CL_FLT_DIG = 6; 1009 enum CL_FLT_MANT_DIG = 24; 1010 enum CL_FLT_MAX_10_EXP = +38; 1011 enum CL_FLT_MAX_EXP = +128; 1012 enum CL_FLT_MIN_10_EXP = -37; 1013 enum CL_FLT_MIN_EXP = -125; 1014 enum CL_FLT_RADIX = 2; 1015 1016 enum CL_FLT_MAX = float.max; 1017 enum CL_FLT_MIN = float.min_normal; 1018 enum CL_FLT_EPSILON = 0x1.0p-23f; 1019 1020 enum CL_DBL_DIG = 15; 1021 enum CL_DBL_MANT_DIG = 53; 1022 enum CL_DBL_MAX_10_EXP = +308; 1023 enum CL_DBL_MAX_EXP = +1024; 1024 enum CL_DBL_MIN_10_EXP = -307; 1025 enum CL_DBL_MIN_EXP = -1021; 1026 enum CL_DBL_RADIX = 2; 1027 1028 enum CL_DBL_MAX = double.max; 1029 enum CL_DBL_MIN = double.min_normal; 1030 enum CL_DBL_EPSILON = double.epsilon; 1031 1032 enum CL_M_E = 2.718281828459045090796; 1033 enum CL_M_LOG2E = 1.442695040888963387005; 1034 enum CL_M_LOG10E = 0.434294481903251816668; 1035 enum CL_M_LN2 = 0.693147180559945286227; 1036 enum CL_M_LN10 = 2.302585092994045901094; 1037 enum CL_M_PI = 3.141592653589793115998; 1038 enum CL_M_PI_2 = 1.570796326794896557999; 1039 enum CL_M_PI_4 = 0.785398163397448278999; 1040 enum CL_M_1_PI = 0.318309886183790691216; 1041 enum CL_M_2_PI = 0.636619772367581382433; 1042 enum CL_M_2_SQRTPI = 1.128379167095512558561; 1043 enum CL_M_SQRT2 = 1.414213562373095145475; 1044 enum CL_M_SQRT1_2 = 0.707106781186547572737; 1045 1046 enum CL_M_E_F = 2.71828174591064f; 1047 enum CL_M_LOG2E_F = 1.44269502162933f; 1048 enum CL_M_LOG10E_F = 0.43429449200630f; 1049 enum CL_M_LN2_F = 0.69314718246460f; 1050 enum CL_M_LN10_F = 2.30258512496948f; 1051 enum CL_M_PI_F = 3.14159274101257f; 1052 enum CL_M_PI_2_F = 1.57079637050629f; 1053 enum CL_M_PI_4_F = 0.78539818525314f; 1054 enum CL_M_1_PI_F = 0.31830987334251f; 1055 enum CL_M_2_PI_F = 0.63661974668503f; 1056 enum CL_M_2_SQRTPI_F = 1.12837922573090f; 1057 enum CL_M_SQRT2_F = 1.41421353816986f; 1058 enum CL_M_SQRT1_2_F = 0.70710676908493f; 1059 1060 enum CL_NAN = cl_float.nan; 1061 enum CL_HUGE_VALF = cl_float.infinity; 1062 enum CL_HUGE_VAL = cl_double.infinity; 1063 enum CL_MAXFLOAT = CL_FLT_MAX; 1064 enum CL_INFINITY = CL_HUGE_VALF; 1065 1066 1067 // generate code for the CL vector types 1068 // this might look crazy, but eases further changes 1069 // do a pragma(msg, genCLVectorTypes()); for debugging 1070 import std.conv; 1071 version(GNU) import gcc.attribute; 1072 1073 // TODO: finish compiler-specific vector types, e.g. __attribute__((vector_size(16))); for GDC 1074 // TODO: CPU instruction sets-specific alignment (MMX, SSE*, AVX) 1075 private string genCLVectorTypes() 1076 { 1077 string res; 1078 foreach(type; ["cl_char", "cl_uchar", "cl_short", "cl_ushort", "cl_int", "cl_uint", "cl_long", "cl_ulong", "cl_float", "cl_double"]) 1079 { 1080 res ~= "alias " ~ type ~ "4 " ~ type ~ "3;"; // cl_xx3 is identical in size, alignment and behavior to cl_xx4. See section 6.1.5. of the spec 1081 // now add the rest of the types 1082 foreach (size; [2,4,8,16]) 1083 { 1084 res ~= ` 1085 union ` ~ type ~ to!string(size) ~ ` 1086 { 1087 `; 1088 // add aligned attribute if inside GDC 1089 version(GNU) res ~= `@attribute("aligned", (` ~ to!string(size) ~ ` * ` ~ type ~ `.sizeof).to!string) `; 1090 res ~= type ~ "[" ~ to!string(size) ~ `] s; 1091 alias s this; // allow array access and implicit conversion to the array 1092 struct { ` ~ type ~ ` x, y` ~ (size<=2 ? "" : ", z, w") ~ (size>=16 ? ", __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf" : "") ~ `; } 1093 struct { ` ~ type ~ ` s0, s1` ~ (size<=2 ? "" : ", s2, s3") ~ (size>=8 ? ", s4, s5, s6, s7" : "") ~ (size>=16 ? ", s8, s9, sA, sB, sC, sD, sE, sF" : "") ~ `; } 1094 struct { ` ~ type ~ (size>2 ? to!string(size/2) : "") ~ ` lo, hi; }`; 1095 version(GNU) res ~= ` 1096 @attribute("vector_size", (` ~ to!string(size) ~ ` * ` ~ type ~ `.sizeof).to!string) ` ~ type ~ " v" ~ to!string(size) ~ `;`; 1097 res ~= ` 1098 } 1099 `; 1100 } 1101 } 1102 1103 return res; 1104 } 1105 1106 //pragma(msg, genCLVectorTypes()); 1107 mixin(genCLVectorTypes()); 1108 // NOTE: There are no vector types for half 1109 1110 1111 /** 1112 * Macro to facilitate debugging 1113 * Usage: 1114 * Place mixin(CL_PROGRAM_STRING_DEBUG_INFO) on the line before the first line of your source. 1115 * The first line ends with: CL_PROGRAM_STRING_BEGIN \" 1116 * Each line thereafter of OpenCL C source must have a line end 1117 * The last line is empty; 1118 * 1119 * Example: 1120 * 1121 * string code = mixin(CL_PROGRAM_STRING_DEBUG_INFO) ~ q{ 1122 * kernel void foo( int a, float * b ) 1123 * { 1124 * // my comment 1125 * *b[ get_global_id(0)] = a; 1126 * } 1127 * }; 1128 * 1129 * This should correctly set up the line, (column) and file information for your source 1130 * string so you can do source level debugging. 1131 */ 1132 1133 // Workaround: OpenCL expects Linux dir separators ("unrecognized character escape sequence") 1134 // Usage: createProgram( CL_PROGRAM_STRING_DEBUG_INFO(__LINE__, __FILE__) ~ q{ __kernel code }); 1135 import std..string; 1136 1137 string CL_PROGRAM_STRING_DEBUG_INFO(size_t line = __LINE__, string file = __FILE__) 1138 { 1139 string ret = ""; 1140 1141 debug 1142 { 1143 file = tr(file, "\\", "/"); 1144 ret = "#line " ~ to!string(line) ~ " \"" ~ file ~ "\"" ~ "\n\n"; 1145 } 1146 1147 return ret; 1148 }