ClGenerators.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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 ClGeneratorDoubleFloat;
  15. class ClGeneratorDouble;
  16. class ClGeneratorDoubleDouble;
  17. class ClGeneratorQuadDouble;
  18. class ClGenerator128;
  19. }
  20. class mnd::ClGenerator : public Generator
  21. {
  22. protected:
  23. cl::Device device;
  24. cl::Context context;
  25. cl::Program program;
  26. cl::CommandQueue queue;
  27. public:
  28. ClGenerator(cl::Device device);
  29. virtual ~ClGenerator(void);
  30. virtual void generate(const MandelInfo& info, float* data);
  31. protected:
  32. virtual std::string getKernelCode(bool smooth) const = 0;
  33. };
  34. class mnd::ClGeneratorFloat : public ClGenerator
  35. {
  36. public:
  37. ClGeneratorFloat(cl::Device device);
  38. virtual ~ClGeneratorFloat(void) = default;
  39. protected:
  40. virtual std::string getKernelCode(bool smooth) const;
  41. };
  42. class mnd::ClGeneratorDoubleFloat : public ClGenerator
  43. {
  44. public:
  45. ClGeneratorDoubleFloat(cl::Device device);
  46. virtual ~ClGeneratorDoubleFloat(void) = default;
  47. virtual void generate(const MandelInfo& info, float* data);
  48. protected:
  49. virtual std::string getKernelCode(bool smooth) const;
  50. };
  51. class mnd::ClGeneratorDouble : public ClGenerator
  52. {
  53. public:
  54. ClGeneratorDouble(cl::Device device);
  55. virtual ~ClGeneratorDouble(void) = default;
  56. virtual void generate(const MandelInfo& info, float* data);
  57. protected:
  58. virtual std::string getKernelCode(bool smooth) const;
  59. };
  60. class mnd::ClGeneratorDoubleDouble : public ClGenerator
  61. {
  62. bool smooth;
  63. public:
  64. ClGeneratorDoubleDouble(cl::Device device);
  65. virtual ~ClGeneratorDoubleDouble(void) = default;
  66. virtual void generate(const MandelInfo& info, float* data);
  67. protected:
  68. virtual std::string getKernelCode(bool smooth) const;
  69. };
  70. class mnd::ClGeneratorQuadDouble : public ClGenerator
  71. {
  72. bool smooth;
  73. public:
  74. ClGeneratorQuadDouble(cl::Device device);
  75. virtual ~ClGeneratorQuadDouble(void) = default;
  76. virtual void generate(const MandelInfo& info, float* data);
  77. protected:
  78. virtual std::string getKernelCode(bool smooth) const;
  79. };
  80. class mnd::ClGenerator128 : public ClGenerator
  81. {
  82. public:
  83. ClGenerator128(cl::Device device);
  84. virtual ~ClGenerator128(void) = default;
  85. virtual void generate(const MandelInfo& info, float* data);
  86. protected:
  87. virtual std::string getKernelCode(bool smooth) const;
  88. };
  89. #endif // WITH_OPENCL
  90. #endif // MANDEL_CLGENERATORS_H