diff --git a/dlls/opencl/make_opencl b/dlls/opencl/make_opencl index 7e88b6daaaf..088120c8081 100755 --- a/dlls/opencl/make_opencl +++ b/dlls/opencl/make_opencl @@ -37,21 +37,22 @@ my %core_categories = (); my %arg_types = ( - "cl_bitfield" => [ "int64", "wine_dbgstr_longlong(%s)" ], - "double" => [ "double", "%.16e" ], - "float" => [ "float", "%.8e" ], - "int" => [ "long", "%d" ], - "int8_t" => [ "long", "%d" ], - "int16_t" => [ "long", "%d" ], - "int32_t" => [ "long", "%d" ], - "int64_t" => [ "int64", "wine_dbgstr_longlong(%s)" ], - "intptr_t" => [ "long", "%Id" ], - "size_t" => [ "long", "%Iu" ], - "uint8_t" => [ "long", "%u" ], - "uint16_t" => [ "long", "%u" ], - "uint32_t" => [ "long", "%u" ], - "uint64_t" => [ "int64", "wine_dbgstr_longlong(%s)" ], - "unsigned int" => [ "long", "%u" ], + # spec unixlib format + "cl_bitfield" => [ "int64", "ULONGLONG", "wine_dbgstr_longlong(%s)" ], + "double" => [ "double", "DOUBLE", "%.16e" ], + "float" => [ "float", "float", "%.8e" ], + "int" => [ "long", "int", "%d" ], + "int8_t" => [ "long", "int8_t", "%d" ], + "int16_t" => [ "long", "int16_t", "%d" ], + "int32_t" => [ "long", "int32_t", "%d" ], + "int64_t" => [ "int64", "LONGLONG", "wine_dbgstr_longlong(%s)" ], + "intptr_t" => [ "long", "INT_PTR", "%Id" ], + "size_t" => [ "long", "SIZE_T", "%Iu" ], + "uint8_t" => [ "long", "uint8_t", "%u" ], + "uint16_t" => [ "long", "uint16_t", "%u" ], + "uint32_t" => [ "long", "uint32_t", "%u" ], + "uint64_t" => [ "int64", "ULONGLONG", "wine_dbgstr_longlong(%s)" ], + "unsigned int" => [ "long", "unsigned int", "%u" ], ); my %unsupported_extensions = @@ -99,7 +100,7 @@ sub generate_pe_thunk($$) } elsif (defined $arg_types{$ptype}) { - my $format = ${$arg_types{$ptype}}[1]; + my $format = ${$arg_types{$ptype}}[2]; $trace_arg .= ", " . ($format =~ /^%/ ? $format : "%s"); $trace_call_arg .= ", " . sprintf $format =~ /^%/ ? "%s" : $format, $pname; } @@ -220,10 +221,23 @@ sub get_func_params($$) $params .= " $proto* __retval;\n" unless $proto eq "cl_int"; foreach my $arg (@{$func->[1]}) { + my $ptype = get_arg_type( $arg ); next unless $arg->findnodes("./name"); - (my $argtext = $arg->textContent()) =~ s/ +/ /g; - $argtext =~ s/CL_CALLBACK/WINAPI/g; - $params .= " $argtext;\n"; + my $pname = get_arg_name( $arg ); + (my $param = $arg->textContent()) =~ s/ +/ /g; + $param =~ s/CL_CALLBACK/WINAPI/g; + if ($param =~ /[[*]/) + { + $params .= " $param;\n"; + } + elsif (defined $arg_types{$ptype}) + { + $params .= " ${$arg_types{$ptype}}[1] $pname;\n"; + } + else + { + die "Unknown type %s in %s\n", $param, $name; + } } return $params . "};\n"; } @@ -398,7 +412,7 @@ sub parse_file($) my $basetype = @{$type->findnodes("./type")}[0]; if ($type->textContent() =~ /[[*]/) { - $arg_types{$name} = ["ptr", "%p"]; + $arg_types{$name} = ["ptr", $name, "%p"]; } elsif (defined($basetype) and defined($arg_types{$basetype->textContent})) { diff --git a/dlls/opencl/unixlib.h b/dlls/opencl/unixlib.h index 79968a4daf1..5a9b1556a04 100644 --- a/dlls/opencl/unixlib.h +++ b/dlls/opencl/unixlib.h @@ -3,7 +3,7 @@ struct clBuildProgram_params { cl_program program; - cl_uint num_devices; + uint32_t num_devices; const cl_device_id* device_list; const char* options; void (WINAPI* pfn_notify)(cl_program program, void* user_data); @@ -13,10 +13,10 @@ struct clBuildProgram_params struct clCompileProgram_params { cl_program program; - cl_uint num_devices; + uint32_t num_devices; const cl_device_id* device_list; const char* options; - cl_uint num_input_headers; + uint32_t num_input_headers; const cl_program* input_headers; const char** header_include_names; void (WINAPI* pfn_notify)(cl_program program, void* user_data); @@ -27,8 +27,8 @@ struct clCreateBuffer_params { cl_mem* __retval; cl_context context; - cl_mem_flags flags; - size_t size; + ULONGLONG flags; + SIZE_T size; void* host_ptr; cl_int* errcode_ret; }; @@ -38,7 +38,7 @@ struct clCreateCommandQueue_params cl_command_queue* __retval; cl_context context; cl_device_id device; - cl_command_queue_properties properties; + ULONGLONG properties; cl_int* errcode_ret; }; @@ -46,7 +46,7 @@ struct clCreateContext_params { cl_context* __retval; const cl_context_properties* properties; - cl_uint num_devices; + uint32_t num_devices; const cl_device_id* devices; void (WINAPI* pfn_notify)(const char* errinfo, const void* private_info, size_t cb, void* user_data); void* user_data; @@ -57,7 +57,7 @@ struct clCreateContextFromType_params { cl_context* __retval; const cl_context_properties* properties; - cl_device_type device_type; + ULONGLONG device_type; void (WINAPI* pfn_notify)(const char* errinfo, const void* private_info, size_t cb, void* user_data); void* user_data; cl_int* errcode_ret; @@ -67,7 +67,7 @@ struct clCreateImage_params { cl_mem* __retval; cl_context context; - cl_mem_flags flags; + ULONGLONG flags; const cl_image_format* image_format; const cl_image_desc* image_desc; void* host_ptr; @@ -78,11 +78,11 @@ struct clCreateImage2D_params { cl_mem* __retval; cl_context context; - cl_mem_flags flags; + ULONGLONG flags; const cl_image_format* image_format; - size_t image_width; - size_t image_height; - size_t image_row_pitch; + SIZE_T image_width; + SIZE_T image_height; + SIZE_T image_row_pitch; void* host_ptr; cl_int* errcode_ret; }; @@ -91,13 +91,13 @@ struct clCreateImage3D_params { cl_mem* __retval; cl_context context; - cl_mem_flags flags; + ULONGLONG flags; const cl_image_format* image_format; - size_t image_width; - size_t image_height; - size_t image_depth; - size_t image_row_pitch; - size_t image_slice_pitch; + SIZE_T image_width; + SIZE_T image_height; + SIZE_T image_depth; + SIZE_T image_row_pitch; + SIZE_T image_slice_pitch; void* host_ptr; cl_int* errcode_ret; }; @@ -113,7 +113,7 @@ struct clCreateKernel_params struct clCreateKernelsInProgram_params { cl_program program; - cl_uint num_kernels; + uint32_t num_kernels; cl_kernel* kernels; cl_uint* num_kernels_ret; }; @@ -122,7 +122,7 @@ struct clCreateProgramWithBinary_params { cl_program* __retval; cl_context context; - cl_uint num_devices; + uint32_t num_devices; const cl_device_id* device_list; const size_t* lengths; const unsigned char** binaries; @@ -134,7 +134,7 @@ struct clCreateProgramWithBuiltInKernels_params { cl_program* __retval; cl_context context; - cl_uint num_devices; + uint32_t num_devices; const cl_device_id* device_list; const char* kernel_names; cl_int* errcode_ret; @@ -144,7 +144,7 @@ struct clCreateProgramWithSource_params { cl_program* __retval; cl_context context; - cl_uint count; + uint32_t count; const char** strings; const size_t* lengths; cl_int* errcode_ret; @@ -154,9 +154,9 @@ struct clCreateSampler_params { cl_sampler* __retval; cl_context context; - cl_bool normalized_coords; - cl_addressing_mode addressing_mode; - cl_filter_mode filter_mode; + uint32_t normalized_coords; + uint32_t addressing_mode; + uint32_t filter_mode; cl_int* errcode_ret; }; @@ -164,8 +164,8 @@ struct clCreateSubBuffer_params { cl_mem* __retval; cl_mem buffer; - cl_mem_flags flags; - cl_buffer_create_type buffer_create_type; + ULONGLONG flags; + uint32_t buffer_create_type; const void* buffer_create_info; cl_int* errcode_ret; }; @@ -174,7 +174,7 @@ struct clCreateSubDevices_params { cl_device_id in_device; const cl_device_partition_property* properties; - cl_uint num_devices; + uint32_t num_devices; cl_device_id* out_devices; cl_uint* num_devices_ret; }; @@ -194,7 +194,7 @@ struct clEnqueueBarrier_params struct clEnqueueBarrierWithWaitList_params { cl_command_queue command_queue; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -204,10 +204,10 @@ struct clEnqueueCopyBuffer_params cl_command_queue command_queue; cl_mem src_buffer; cl_mem dst_buffer; - size_t src_offset; - size_t dst_offset; - size_t size; - cl_uint num_events_in_wait_list; + SIZE_T src_offset; + SIZE_T dst_offset; + SIZE_T size; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -220,11 +220,11 @@ struct clEnqueueCopyBufferRect_params const size_t* src_origin; const size_t* dst_origin; const size_t* region; - size_t src_row_pitch; - size_t src_slice_pitch; - size_t dst_row_pitch; - size_t dst_slice_pitch; - cl_uint num_events_in_wait_list; + SIZE_T src_row_pitch; + SIZE_T src_slice_pitch; + SIZE_T dst_row_pitch; + SIZE_T dst_slice_pitch; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -234,10 +234,10 @@ struct clEnqueueCopyBufferToImage_params cl_command_queue command_queue; cl_mem src_buffer; cl_mem dst_image; - size_t src_offset; + SIZE_T src_offset; const size_t* dst_origin; const size_t* region; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -250,7 +250,7 @@ struct clEnqueueCopyImage_params const size_t* src_origin; const size_t* dst_origin; const size_t* region; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -262,8 +262,8 @@ struct clEnqueueCopyImageToBuffer_params cl_mem dst_buffer; const size_t* src_origin; const size_t* region; - size_t dst_offset; - cl_uint num_events_in_wait_list; + SIZE_T dst_offset; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -273,10 +273,10 @@ struct clEnqueueFillBuffer_params cl_command_queue command_queue; cl_mem buffer; const void* pattern; - size_t pattern_size; - size_t offset; - size_t size; - cl_uint num_events_in_wait_list; + SIZE_T pattern_size; + SIZE_T offset; + SIZE_T size; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -288,7 +288,7 @@ struct clEnqueueFillImage_params const void* fill_color; const size_t* origin; const size_t* region; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -298,11 +298,11 @@ struct clEnqueueMapBuffer_params void** __retval; cl_command_queue command_queue; cl_mem buffer; - cl_bool blocking_map; - cl_map_flags map_flags; - size_t offset; - size_t size; - cl_uint num_events_in_wait_list; + uint32_t blocking_map; + ULONGLONG map_flags; + SIZE_T offset; + SIZE_T size; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; cl_int* errcode_ret; @@ -313,13 +313,13 @@ struct clEnqueueMapImage_params void** __retval; cl_command_queue command_queue; cl_mem image; - cl_bool blocking_map; - cl_map_flags map_flags; + uint32_t blocking_map; + ULONGLONG map_flags; const size_t* origin; const size_t* region; size_t* image_row_pitch; size_t* image_slice_pitch; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; cl_int* errcode_ret; @@ -334,7 +334,7 @@ struct clEnqueueMarker_params struct clEnqueueMarkerWithWaitList_params { cl_command_queue command_queue; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -342,10 +342,10 @@ struct clEnqueueMarkerWithWaitList_params struct clEnqueueMigrateMemObjects_params { cl_command_queue command_queue; - cl_uint num_mem_objects; + uint32_t num_mem_objects; const cl_mem* mem_objects; - cl_mem_migration_flags flags; - cl_uint num_events_in_wait_list; + ULONGLONG flags; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -354,11 +354,11 @@ struct clEnqueueNDRangeKernel_params { cl_command_queue command_queue; cl_kernel kernel; - cl_uint work_dim; + uint32_t work_dim; const size_t* global_work_offset; const size_t* global_work_size; const size_t* local_work_size; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -368,11 +368,11 @@ struct clEnqueueNativeKernel_params cl_command_queue command_queue; void (WINAPI* user_func)(void*); void* args; - size_t cb_args; - cl_uint num_mem_objects; + SIZE_T cb_args; + uint32_t num_mem_objects; const cl_mem* mem_list; const void** args_mem_loc; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -381,11 +381,11 @@ struct clEnqueueReadBuffer_params { cl_command_queue command_queue; cl_mem buffer; - cl_bool blocking_read; - size_t offset; - size_t size; + uint32_t blocking_read; + SIZE_T offset; + SIZE_T size; void* ptr; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -394,16 +394,16 @@ struct clEnqueueReadBufferRect_params { cl_command_queue command_queue; cl_mem buffer; - cl_bool blocking_read; + uint32_t blocking_read; const size_t* buffer_origin; const size_t* host_origin; const size_t* region; - size_t buffer_row_pitch; - size_t buffer_slice_pitch; - size_t host_row_pitch; - size_t host_slice_pitch; + SIZE_T buffer_row_pitch; + SIZE_T buffer_slice_pitch; + SIZE_T host_row_pitch; + SIZE_T host_slice_pitch; void* ptr; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -412,13 +412,13 @@ struct clEnqueueReadImage_params { cl_command_queue command_queue; cl_mem image; - cl_bool blocking_read; + uint32_t blocking_read; const size_t* origin; const size_t* region; - size_t row_pitch; - size_t slice_pitch; + SIZE_T row_pitch; + SIZE_T slice_pitch; void* ptr; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -427,7 +427,7 @@ struct clEnqueueTask_params { cl_command_queue command_queue; cl_kernel kernel; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -437,7 +437,7 @@ struct clEnqueueUnmapMemObject_params cl_command_queue command_queue; cl_mem memobj; void* mapped_ptr; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -445,7 +445,7 @@ struct clEnqueueUnmapMemObject_params struct clEnqueueWaitForEvents_params { cl_command_queue command_queue; - cl_uint num_events; + uint32_t num_events; const cl_event* event_list; }; @@ -453,11 +453,11 @@ struct clEnqueueWriteBuffer_params { cl_command_queue command_queue; cl_mem buffer; - cl_bool blocking_write; - size_t offset; - size_t size; + uint32_t blocking_write; + SIZE_T offset; + SIZE_T size; const void* ptr; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -466,16 +466,16 @@ struct clEnqueueWriteBufferRect_params { cl_command_queue command_queue; cl_mem buffer; - cl_bool blocking_write; + uint32_t blocking_write; const size_t* buffer_origin; const size_t* host_origin; const size_t* region; - size_t buffer_row_pitch; - size_t buffer_slice_pitch; - size_t host_row_pitch; - size_t host_slice_pitch; + SIZE_T buffer_row_pitch; + SIZE_T buffer_slice_pitch; + SIZE_T host_row_pitch; + SIZE_T host_slice_pitch; const void* ptr; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -484,13 +484,13 @@ struct clEnqueueWriteImage_params { cl_command_queue command_queue; cl_mem image; - cl_bool blocking_write; + uint32_t blocking_write; const size_t* origin; const size_t* region; - size_t input_row_pitch; - size_t input_slice_pitch; + SIZE_T input_row_pitch; + SIZE_T input_slice_pitch; const void* ptr; - cl_uint num_events_in_wait_list; + uint32_t num_events_in_wait_list; const cl_event* event_wait_list; cl_event* event; }; @@ -508,8 +508,8 @@ struct clFlush_params struct clGetCommandQueueInfo_params { cl_command_queue command_queue; - cl_command_queue_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -517,8 +517,8 @@ struct clGetCommandQueueInfo_params struct clGetContextInfo_params { cl_context context; - cl_context_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -526,8 +526,8 @@ struct clGetContextInfo_params struct clGetDeviceIDs_params { cl_platform_id platform; - cl_device_type device_type; - cl_uint num_entries; + ULONGLONG device_type; + uint32_t num_entries; cl_device_id* devices; cl_uint* num_devices; }; @@ -535,8 +535,8 @@ struct clGetDeviceIDs_params struct clGetDeviceInfo_params { cl_device_id device; - cl_device_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -544,8 +544,8 @@ struct clGetDeviceInfo_params struct clGetEventInfo_params { cl_event event; - cl_event_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -553,8 +553,8 @@ struct clGetEventInfo_params struct clGetEventProfilingInfo_params { cl_event event; - cl_profiling_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -562,8 +562,8 @@ struct clGetEventProfilingInfo_params struct clGetImageInfo_params { cl_mem image; - cl_image_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -571,9 +571,9 @@ struct clGetImageInfo_params struct clGetKernelArgInfo_params { cl_kernel kernel; - cl_uint arg_index; - cl_kernel_arg_info param_name; - size_t param_value_size; + uint32_t arg_index; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -581,8 +581,8 @@ struct clGetKernelArgInfo_params struct clGetKernelInfo_params { cl_kernel kernel; - cl_kernel_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -591,8 +591,8 @@ struct clGetKernelWorkGroupInfo_params { cl_kernel kernel; cl_device_id device; - cl_kernel_work_group_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -600,15 +600,15 @@ struct clGetKernelWorkGroupInfo_params struct clGetMemObjectInfo_params { cl_mem memobj; - cl_mem_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; struct clGetPlatformIDs_params { - cl_uint num_entries; + uint32_t num_entries; cl_platform_id* platforms; cl_uint* num_platforms; }; @@ -616,8 +616,8 @@ struct clGetPlatformIDs_params struct clGetPlatformInfo_params { cl_platform_id platform; - cl_platform_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -626,8 +626,8 @@ struct clGetProgramBuildInfo_params { cl_program program; cl_device_id device; - cl_program_build_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -635,8 +635,8 @@ struct clGetProgramBuildInfo_params struct clGetProgramInfo_params { cl_program program; - cl_program_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -644,8 +644,8 @@ struct clGetProgramInfo_params struct clGetSamplerInfo_params { cl_sampler sampler; - cl_sampler_info param_name; - size_t param_value_size; + uint32_t param_name; + SIZE_T param_value_size; void* param_value; size_t* param_value_size_ret; }; @@ -653,9 +653,9 @@ struct clGetSamplerInfo_params struct clGetSupportedImageFormats_params { cl_context context; - cl_mem_flags flags; - cl_mem_object_type image_type; - cl_uint num_entries; + ULONGLONG flags; + uint32_t image_type; + uint32_t num_entries; cl_image_format* image_formats; cl_uint* num_image_formats; }; @@ -664,10 +664,10 @@ struct clLinkProgram_params { cl_program* __retval; cl_context context; - cl_uint num_devices; + uint32_t num_devices; const cl_device_id* device_list; const char* options; - cl_uint num_input_programs; + uint32_t num_input_programs; const cl_program* input_programs; void (WINAPI* pfn_notify)(cl_program program, void* user_data); void* user_data; @@ -757,7 +757,7 @@ struct clRetainSampler_params struct clSetEventCallback_params { cl_event event; - cl_int command_exec_callback_type; + int32_t command_exec_callback_type; void (WINAPI* pfn_notify)(cl_event event, cl_int event_command_status, void *user_data); void* user_data; }; @@ -765,8 +765,8 @@ struct clSetEventCallback_params struct clSetKernelArg_params { cl_kernel kernel; - cl_uint arg_index; - size_t arg_size; + uint32_t arg_index; + SIZE_T arg_size; const void* arg_value; }; @@ -780,7 +780,7 @@ struct clSetMemObjectDestructorCallback_params struct clSetUserEventStatus_params { cl_event event; - cl_int execution_status; + int32_t execution_status; }; struct clUnloadCompiler_params @@ -794,7 +794,7 @@ struct clUnloadPlatformCompiler_params struct clWaitForEvents_params { - cl_uint num_events; + uint32_t num_events; const cl_event* event_list; };