opencl: Don't call callback functions from the Unix side.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2021-11-23 15:10:53 +01:00
parent f153ca0d14
commit f91c009786
1 changed files with 3 additions and 79 deletions

View File

@ -26,80 +26,21 @@
WINE_DEFAULT_DEBUG_CHANNEL(opencl);
struct program_callback
{
void (WINAPI *pfn_notify)(cl_program program, void *user_data);
void *user_data;
};
static void CL_CALLBACK program_callback_wrapper(cl_program program, void *user_data)
{
struct program_callback *callback = user_data;
TRACE("(%p, %p)\n", program, user_data);
callback->pfn_notify(program, callback->user_data);
free(callback);
}
cl_int WINAPI wrap_clBuildProgram( cl_program program, cl_uint num_devices,
const cl_device_id *device_list, const char *options,
void (WINAPI *pfn_notify)(cl_program program, void *user_data),
void *user_data )
{
if (pfn_notify)
{
struct program_callback *callback;
cl_int ret;
if (!(callback = malloc(sizeof(*callback))))
return CL_OUT_OF_HOST_MEMORY;
callback->pfn_notify = pfn_notify;
callback->user_data = user_data;
if ((ret = clBuildProgram( program, num_devices, device_list, options,
program_callback_wrapper, callback )) != CL_SUCCESS)
free( callback );
return ret;
}
if (pfn_notify) FIXME( "notify callback not supported\n" );
return clBuildProgram( program, num_devices, device_list, options, NULL, NULL );
}
struct context_callback
{
void (WINAPI *pfn_notify)(const char *errinfo, const void *private_info, size_t cb, void *user_data);
void *user_data;
};
static void CL_CALLBACK context_callback_wrapper(const char *errinfo,
const void *private_info, size_t cb, void *user_data)
{
struct context_callback *callback = user_data;
TRACE("(%s, %p, %zu, %p)\n", debugstr_a(errinfo), private_info, cb, user_data);
callback->pfn_notify(errinfo, private_info, cb, callback->user_data);
}
cl_context WINAPI wrap_clCreateContext( const cl_context_properties *properties,
cl_uint 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, cl_int *errcode_ret )
{
if (pfn_notify)
{
struct context_callback *callback;
cl_context ret;
/* FIXME: the callback structure is currently leaked */
if (!(callback = malloc(sizeof(*callback))))
{
*errcode_ret = CL_OUT_OF_HOST_MEMORY;
return NULL;
}
callback->pfn_notify = pfn_notify;
callback->user_data = user_data;
if (!(ret = clCreateContext( properties, num_devices, devices, context_callback_wrapper, callback, errcode_ret )))
free( callback );
return ret;
}
if (pfn_notify) FIXME( "notify callback not supported\n" );
return clCreateContext( properties, num_devices, devices, NULL, NULL, errcode_ret );
}
@ -107,24 +48,7 @@ cl_context WINAPI wrap_clCreateContextFromType( const cl_context_properties *pro
void (WINAPI *pfn_notify)(const char *errinfo, const void *private_info, size_t cb, void *user_data),
void *user_data, cl_int *errcode_ret )
{
if (pfn_notify)
{
struct context_callback *callback;
cl_context ret;
/* FIXME: the callback structure is currently leaked */
if (!(callback = malloc(sizeof(*callback))))
{
*errcode_ret = CL_OUT_OF_HOST_MEMORY;
return NULL;
}
callback->pfn_notify = pfn_notify;
callback->user_data = user_data;
if (!(ret = clCreateContextFromType( properties, device_type, context_callback_wrapper, callback, errcode_ret )))
free( callback );
return ret;
}
if (pfn_notify) FIXME( "notify callback not supported\n" );
return clCreateContextFromType( properties, device_type, NULL, NULL, errcode_ret );
}