Skip to content

Commit

Permalink
added cl:create_program_with_builtin_kernels/3, not test yet, lack an…
Browse files Browse the repository at this point in the history
…y hardware to support it
  • Loading branch information
tonyrog committed May 11, 2014
1 parent 75d6e4e commit 53d237a
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
52 changes: 52 additions & 0 deletions c_src/cl_nif.c
Expand Up @@ -397,6 +397,10 @@ static ERL_NIF_TERM ecl_create_program_with_source(ErlNifEnv* env, int argc,
const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM ecl_create_program_with_binary(ErlNifEnv* env, int argc,
const ERL_NIF_TERM argv[]);
#if CL_VERSION_1_2 == 1
static ERL_NIF_TERM ecl_create_program_with_builtin_kernels(
ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
#endif
static ERL_NIF_TERM ecl_async_build_program(ErlNifEnv* env, int argc,
const ERL_NIF_TERM argv[]);

Expand Down Expand Up @@ -580,6 +584,10 @@ ErlNifFunc ecl_funcs[] =
// Program
{ "create_program_with_source", 2, ecl_create_program_with_source },
{ "create_program_with_binary", 3, ecl_create_program_with_binary },
#if CL_VERSION_1_2 == 1
{ "create_program_with_builtin_kernels", 3,
ecl_create_program_with_builtin_kernels },
#endif
{ "async_build_program", 3, ecl_async_build_program },
#if CL_VERSION_1_2 == 1
{ "unload_platform_compiler", 1, ecl_unload_platform_compiler },
Expand Down Expand Up @@ -4040,6 +4048,50 @@ static ERL_NIF_TERM ecl_create_program_with_binary(ErlNifEnv* env, int argc,
return ecl_make_error(env, err);
}


//
// cl:create_program_with_builtin_kernels(Context::cl_context(),
// DeviceList::[cl_device_id()],
// KernelNames::string()) ->
// {'ok', cl_program()} | {'error', cl_error()}
//
#if CL_VERSION_1_2 == 1

static ERL_NIF_TERM ecl_create_program_with_builtin_kernels(
ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
ecl_object_t* o_context;
cl_program program;
cl_device_id device_list[MAX_DEVICES];
cl_uint num_devices = MAX_DEVICES;
char kernel_names[MAX_KERNEL_NAME];
cl_int err;
UNUSED(argc);

if (!get_ecl_object(env, argv[0], &context_r, false, &o_context))
return enif_make_badarg(env);
if (!get_object_list(env, argv[1], &device_r, false,
(void**) device_list, &num_devices))
return enif_make_badarg(env);
if (!enif_get_string(env, argv[2], kernel_names, sizeof(kernel_names),
ERL_NIF_LATIN1))
return enif_make_badarg(env);

program = clCreateProgramWithBuiltInKernels(
o_context->context,
num_devices,
(const cl_device_id*) device_list,
kernel_names,
&err);
if (!err) {
ERL_NIF_TERM t;
t = ecl_make_object(env, &program_r,(void*) program, o_context);
return enif_make_tuple2(env, ATOM(ok), t);
}
return ecl_make_error(env, err);
}
#endif

//
// @spec async_build_program(Program::cl_program(),
// DeviceList::[cl_device_id()],
Expand Down
9 changes: 9 additions & 0 deletions src/cl.erl
Expand Up @@ -124,6 +124,7 @@
%% Program
-export([create_program_with_source/2]).
-export([create_program_with_binary/3]).
-export([create_program_with_builtin_kernels/3]).
-export([release_program/1]).
-export([retain_program/1]).
-export([build_program/3, async_build_program/3]).
Expand Down Expand Up @@ -1419,6 +1420,14 @@ create_program_with_source(_Context, _Source) ->
create_program_with_binary(_Context, _DeviceList, _BinaryList) ->
erlang:error(nif_not_loaded).

-spec create_program_with_builtin_kernels(Context::cl_context(),
DeviceList::[cl_device_id()],
KernelNames::string()) ->
{'ok', cl_program()} | {'error', cl_error()}.

create_program_with_builtin_kernels(_Context, _DeviceList, _KernelNames) ->
erlang:error(nif_not_loaded).

%%
%% @spec retain_program(Program::cl_program()) ->
%% 'ok' | {'error', cl_error()}
Expand Down

0 comments on commit 53d237a

Please sign in to comment.