123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #ifndef MANDEL_CLGENERATORS_H
- #define MANDEL_CLGENERATORS_H
- #ifdef WITH_OPENCL
- #include "Generators.h"
- #ifdef __APPLE__
- #include <OpenCL/cl.hpp>
- #else
- #include <CL/cl.hpp>
- #endif
- namespace mnd
- {
- class ClGenerator;
- class ClGeneratorFloat;
- class ClGeneratorDoubleFloat;
- class ClGeneratorDouble;
- class ClGeneratorDoubleDouble;
- class ClGeneratorQuadDouble;
- class ClGenerator128;
- class ClGenerator64;
- }
- class mnd::ClGenerator : public MandelGenerator
- {
- protected:
- cl::Device device;
- cl::Context context;
- cl::Program program;
- cl::CommandQueue queue;
- public:
- ClGenerator(cl::Device device, const mnd::Real& precision);
- virtual ~ClGenerator(void);
- virtual void generate(const MandelInfo& info, float* data);
- protected:
- virtual std::string getKernelCode(bool smooth) const = 0;
- };
- class mnd::ClGeneratorFloat : public ClGenerator
- {
- public:
- ClGeneratorFloat(cl::Device device, const std::string& code);
- virtual ~ClGeneratorFloat(void) = default;
- protected:
- virtual std::string getKernelCode(bool smooth) const;
- };
- class mnd::ClGeneratorDoubleFloat : public ClGenerator
- {
- public:
- ClGeneratorDoubleFloat(cl::Device device);
- virtual ~ClGeneratorDoubleFloat(void) = default;
- virtual void generate(const MandelInfo& info, float* data);
- protected:
- virtual std::string getKernelCode(bool smooth) const;
- };
- class mnd::ClGeneratorDouble : public ClGenerator
- {
- public:
- ClGeneratorDouble(cl::Device device);
- virtual ~ClGeneratorDouble(void) = default;
- virtual void generate(const MandelInfo& info, float* data);
- protected:
- virtual std::string getKernelCode(bool smooth) const;
- };
- class mnd::ClGeneratorDoubleDouble : public ClGenerator
- {
- bool smooth;
- public:
- ClGeneratorDoubleDouble(cl::Device device);
- virtual ~ClGeneratorDoubleDouble(void) = default;
- virtual void generate(const MandelInfo& info, float* data);
- protected:
- virtual std::string getKernelCode(bool smooth) const;
- };
- class mnd::ClGeneratorQuadDouble : public ClGenerator
- {
- bool smooth;
- public:
- ClGeneratorQuadDouble(cl::Device device);
- virtual ~ClGeneratorQuadDouble(void) = default;
- virtual void generate(const MandelInfo& info, float* data);
- protected:
- virtual std::string getKernelCode(bool smooth) const;
- };
- class mnd::ClGenerator128 : public ClGenerator
- {
- public:
- ClGenerator128(cl::Device device);
- virtual ~ClGenerator128(void) = default;
- virtual void generate(const MandelInfo& info, float* data);
- protected:
- virtual std::string getKernelCode(bool smooth) const;
- };
- class mnd::ClGenerator64 : public ClGenerator
- {
- public:
- ClGenerator64(cl::Device device);
- virtual ~ClGenerator64(void) = default;
- virtual void generate(const MandelInfo& info, float* data);
- protected:
- virtual std::string getKernelCode(bool smooth) const;
- };
- #endif // WITH_OPENCL
- #endif // MANDEL_CLGENERATORS_H
|