| 32 | } |
| 33 | |
| 34 | Status LoadOpenCL() { |
| 35 | void* libopencl = dlopen("libOpenCL.so", RTLD_NOW | RTLD_LOCAL); |
| 36 | if (libopencl) { |
| 37 | LoadOpenCLFunctions(libopencl, false); |
| 38 | return OkStatus(); |
| 39 | } else { |
| 40 | // Pixel phone? |
| 41 | libopencl = dlopen("libOpenCL-pixel.so", RTLD_NOW | RTLD_LOCAL); |
| 42 | if (libopencl) { |
| 43 | typedef void (*enableOpenCL_t)(); |
| 44 | enableOpenCL_t enableOpenCL = |
| 45 | reinterpret_cast<enableOpenCL_t>(dlsym(libopencl, "enableOpenCL")); |
| 46 | enableOpenCL(); |
| 47 | LoadOpenCLFunctions(libopencl, true); |
| 48 | return OkStatus(); |
| 49 | } else { |
| 50 | return UnknownError( |
| 51 | absl::StrCat("OpenCL library not loaded - ", dlerror())); |
| 52 | } |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | void LoadOpenCLFunctions(void* libopencl, bool is_pixel) { |
| 57 | typedef void* (*loadOpenCLPointer_t)(const char* name); |