IterationCompiler.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #ifndef MANDEL_ITERATIONCOMPILER_H
  2. #define MANDEL_ITERATIONCOMPILER_H
  3. #include "Generators.h"
  4. #include "ClGenerators.h"
  5. #include "IterationIR.h"
  6. #include <memory>
  7. namespace mnd
  8. {
  9. struct ExecData;
  10. class CompiledGenerator;
  11. class CompiledClGenerator;
  12. // forward declare
  13. class MandelContext;
  14. class MandelDevice;
  15. enum class GeneratorType : int;
  16. struct GeneratorCollection;
  17. //mnd::ExecData compile(mnd::MandelContext& mndCtxt);
  18. std::vector<std::unique_ptr<mnd::MandelGenerator>> compileCpu(mnd::MandelContext& mndCtxt,
  19. const IterationFormula& z0,
  20. const IterationFormula& zi);
  21. std::vector<std::unique_ptr<mnd::MandelGenerator>> compileOpenCl(mnd::MandelDevice& dev,
  22. const IterationFormula& z0,
  23. const IterationFormula& zi);
  24. GeneratorCollection compileFormula(mnd::MandelContext& mndCtxt,
  25. const IterationFormula& z0,
  26. const IterationFormula& zi);
  27. #ifdef WITH_OPENCL
  28. std::unique_ptr<MandelGenerator> compileClFloat(const ir::Formula&, MandelDevice&);
  29. std::unique_ptr<MandelGenerator> compileClDouble(const ir::Formula&, MandelDevice&);
  30. std::unique_ptr<MandelGenerator> compileClDoubleDouble(const ir::Formula&, MandelDevice&);
  31. std::unique_ptr<MandelGenerator> compileClQuadDouble(const ir::Formula&, MandelDevice&);
  32. #endif // WITH_OPENCL
  33. }
  34. //void squareTest();
  35. struct mnd::GeneratorCollection
  36. {
  37. std::vector<std::unique_ptr<mnd::MandelGenerator>> cpuGenerators;
  38. std::vector<std::unique_ptr<mnd::MandelGenerator>> clGenerators;
  39. std::unique_ptr<mnd::AdaptiveGenerator> adaptiveGenerator;
  40. GeneratorCollection(void);
  41. GeneratorCollection(const GeneratorCollection&) = delete;
  42. GeneratorCollection(GeneratorCollection&&) = default;
  43. ~GeneratorCollection(void) = default;
  44. GeneratorCollection& operator=(GeneratorCollection&&) = default;
  45. GeneratorCollection& operator=(const GeneratorCollection&) = delete;
  46. };
  47. namespace mnd
  48. {
  49. CompiledGenerator compile(const ir::Formula& formula);
  50. std::unique_ptr<MandelGenerator> compileCl(const ir::Formula& formula, MandelDevice& md);
  51. }
  52. #endif // MANDEL_ITERATIONCOMPILER_H