ocl.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef BFG_OCL_H
  2. #define BFG_OCL_H
  3. #include "config.h"
  4. #include <stdbool.h>
  5. #include <stdio.h>
  6. #ifdef HAVE_OPENCL
  7. #include "CL/cl.h"
  8. #include "miner.h"
  9. struct opencl_kernel_info;
  10. typedef struct _clState _clState;
  11. typedef cl_int (*queue_kernel_parameters_func_t)(const struct opencl_kernel_info *, _clState *, struct work *, cl_uint);
  12. struct opencl_kernel_info {
  13. bool loaded;
  14. cl_program program;
  15. cl_kernel kernel;
  16. bool goffset;
  17. enum cl_kernels interface;
  18. size_t wsize;
  19. queue_kernel_parameters_func_t queue_kernel_parameters;
  20. };
  21. struct _clState {
  22. cl_device_id devid;
  23. char *platform_ver_str;
  24. bool is_mesa;
  25. cl_context context;
  26. cl_command_queue commandQueue;
  27. struct opencl_kernel_info kernel_sha256d;
  28. struct opencl_kernel_info kernel_scrypt;
  29. cl_mem outputBuffer;
  30. #ifdef USE_SCRYPT
  31. cl_mem CLbuffer0;
  32. cl_mem padbuffer8;
  33. size_t padbufsize;
  34. void * cldata;
  35. #endif
  36. bool hasBitAlign;
  37. bool hasOpenCL11plus;
  38. cl_uint preferred_vwidth;
  39. cl_uint vwidth;
  40. size_t max_work_size;
  41. cl_uint max_compute_units;
  42. };
  43. extern FILE *opencl_open_kernel(const char *filename);
  44. extern char *file_contents(const char *filename, int *length);
  45. extern char *opencl_kernel_source(const char *filename, int *out_sourcelen, enum cl_kernels *out_kinterface);
  46. extern int clDevicesNum(void);
  47. extern _clState *opencl_create_clState(unsigned int gpu, char *name, size_t nameSize);
  48. extern bool opencl_load_kernel(struct cgpu_info *, _clState *clState, const char *name, struct opencl_kernel_info *, const char *kernel_file, const struct mining_algorithm *);
  49. #endif /* HAVE_OPENCL */
  50. #endif /* __OCL_H__ */