ClGenerators.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #ifndef MANDEL_CLGENERATORS_H
  2. #define MANDEL_CLGENERATORS_H
  3. #include "Generators.h"
  4. #ifdef __APPLE__
  5. #include <OpenCL/cl.hpp>
  6. #else
  7. #include <CL/cl.hpp>
  8. #endif
  9. namespace mnd
  10. {
  11. class ClGenerator;
  12. class ClGeneratorFloat;
  13. class ClGeneratorDouble;
  14. class ClGenerator128;
  15. }
  16. class mnd::ClGenerator : public Generator
  17. {
  18. protected:
  19. cl::Device device;
  20. cl::Context context;
  21. cl::Program program;
  22. cl::CommandQueue queue;
  23. public:
  24. ClGenerator(cl::Device device);
  25. virtual ~ClGenerator(void);
  26. virtual void generate(const MandelInfo& info, float* data);
  27. protected:
  28. virtual std::string getKernelCode(void) const = 0;
  29. };
  30. class mnd::ClGeneratorFloat : public ClGenerator
  31. {
  32. public:
  33. ClGeneratorFloat(cl::Device device);
  34. virtual ~ClGeneratorFloat(void) = default;
  35. protected:
  36. virtual std::string getKernelCode(void) const;
  37. };
  38. class mnd::ClGeneratorDouble : public ClGenerator
  39. {
  40. public:
  41. ClGeneratorDouble(cl::Device device);
  42. virtual ~ClGeneratorDouble(void) = default;
  43. virtual void generate(const MandelInfo& info, float* data);
  44. protected:
  45. virtual std::string getKernelCode(void) const;
  46. };
  47. class mnd::ClGenerator128 : public ClGenerator
  48. {
  49. public:
  50. ClGenerator128(cl::Device device);
  51. virtual ~ClGenerator128(void) = default;
  52. virtual void generate(const MandelInfo& info, float* data);
  53. protected:
  54. virtual std::string getKernelCode(void) const;
  55. };
  56. #endif // MANDEL_CLGENERATORS_H