ClGenerators.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. }
  15. class mnd::ClGenerator : public Generator
  16. {
  17. protected:
  18. cl::Device device;
  19. cl::Context context;
  20. cl::Program program;
  21. cl::CommandQueue queue;
  22. public:
  23. ClGenerator(cl::Device device);
  24. virtual ~ClGenerator(void);
  25. virtual void generate(const MandelInfo& info, float* data);
  26. protected:
  27. virtual std::string getKernelCode(void) const = 0;
  28. };
  29. class mnd::ClGeneratorFloat : public ClGenerator
  30. {
  31. public:
  32. ClGeneratorFloat(cl::Device device);
  33. virtual ~ClGeneratorFloat(void) = default;
  34. protected:
  35. virtual std::string getKernelCode(void) const;
  36. };
  37. class mnd::ClGeneratorDouble : public ClGenerator
  38. {
  39. public:
  40. ClGeneratorDouble(cl::Device device);
  41. virtual ~ClGeneratorDouble(void) = default;
  42. virtual void generate(const MandelInfo& info, float* data);
  43. protected:
  44. virtual std::string getKernelCode(void) const;
  45. };
  46. #endif // MANDEL_CLGENERATORS_H