diff options
author | Thomas White <taw@bitwiz.org.uk> | 2010-02-20 22:25:39 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2010-02-20 22:26:22 +0100 |
commit | cc0db0054d76474e55393c05806f715a0e2f6d08 (patch) | |
tree | f7c357a2b08507bcddf080ff8c8594f1ef567f23 /src/diffraction-gpu.c | |
parent | 0fab44d676aacde5e04156ad2b2e24a580bfab18 (diff) |
Move OpenCL utility stuff to a separate module
Diffstat (limited to 'src/diffraction-gpu.c')
-rw-r--r-- | src/diffraction-gpu.c | 101 |
1 files changed, 1 insertions, 100 deletions
diff --git a/src/diffraction-gpu.c b/src/diffraction-gpu.c index 7896c2d5..1da23e91 100644 --- a/src/diffraction-gpu.c +++ b/src/diffraction-gpu.c @@ -22,6 +22,7 @@ #include "cell.h" #include "diffraction.h" #include "sfac.h" +#include "cl-utils.h" #define SAMPLING (4) @@ -42,109 +43,9 @@ struct gpu_context cl_mem diff; size_t diff_size; - }; -static const char *clError(cl_int err) -{ - switch ( err ) { - case CL_SUCCESS : return "no error"; - case CL_INVALID_PLATFORM : return "invalid platform"; - case CL_INVALID_KERNEL : return "invalid kernel"; - case CL_INVALID_ARG_INDEX : return "invalid argument index"; - case CL_INVALID_ARG_VALUE : return "invalid argument value"; - case CL_INVALID_MEM_OBJECT : return "invalid memory object"; - case CL_INVALID_SAMPLER : return "invalid sampler"; - case CL_INVALID_ARG_SIZE : return "invalid argument size"; - case CL_INVALID_COMMAND_QUEUE : return "invalid command queue"; - case CL_INVALID_CONTEXT : return "invalid context"; - case CL_INVALID_VALUE : return "invalid value"; - case CL_INVALID_EVENT_WAIT_LIST : return "invalid wait list"; - case CL_MAP_FAILURE : return "map failure"; - case CL_MEM_OBJECT_ALLOCATION_FAILURE : return "object allocation failure"; - case CL_OUT_OF_HOST_MEMORY : return "out of host memory"; - case CL_OUT_OF_RESOURCES : return "out of resources"; - case CL_INVALID_KERNEL_NAME : return "invalid kernel name"; - case CL_INVALID_KERNEL_ARGS : return "invalid kernel arguments"; - default : - ERROR("Error code: %i\n", err); - return "unknown error"; - } -} - - -static cl_device_id get_first_dev(cl_context ctx) -{ - cl_device_id dev; - cl_int r; - - r = clGetContextInfo(ctx, CL_CONTEXT_DEVICES, sizeof(dev), &dev, NULL); - if ( r != CL_SUCCESS ) { - ERROR("Couldn't get device\n"); - return 0; - } - - return dev; -} - - -static void show_build_log(cl_program prog, cl_device_id dev) -{ - cl_int r; - char log[4096]; - size_t s; - - r = clGetProgramBuildInfo(prog, dev, CL_PROGRAM_BUILD_LOG, 4096, log, - &s); - - STATUS("%s\n", log); -} - - -static cl_program load_program(const char *filename, cl_context ctx, - cl_device_id dev, cl_int *err) -{ - FILE *fh; - cl_program prog; - char *source; - size_t len; - cl_int r; - - fh = fopen(filename, "r"); - if ( fh == NULL ) { - ERROR("Couldn't open '%s'\n", filename); - *err = CL_INVALID_PROGRAM; - return 0; - } - source = malloc(16384); - len = fread(source, 1, 16383, fh); - fclose(fh); - source[len] = '\0'; - - prog = clCreateProgramWithSource(ctx, 1, (const char **)&source, - NULL, err); - if ( *err != CL_SUCCESS ) { - ERROR("Couldn't load source\n"); - return 0; - } - - r = clBuildProgram(prog, 0, NULL, - "-Werror -I"DATADIR"/crystfel/ -cl-no-signed-zeros", - NULL, NULL); - if ( r != CL_SUCCESS ) { - ERROR("Couldn't build program '%s'\n", filename); - show_build_log(prog, dev); - *err = r; - return 0; - } - - free(source); - *err = CL_SUCCESS; - return prog; -} - - void get_diffraction_gpu(struct gpu_context *gctx, struct image *image, int na, int nb, int nc, int no_sfac) { |