ClGenerators.h 1.9 KB

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