12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #ifndef MANDEL_ITERATIONCOMPILER_H
- #define MANDEL_ITERATIONCOMPILER_H
- #include "Generators.h"
- #include "ClGenerators.h"
- #include "IterationIR.h"
- #include <memory>
- namespace mnd
- {
- struct ExecData;
- class CompiledGenerator;
- class CompiledClGenerator;
- // forward declare
- class MandelContext;
- class MandelDevice;
- enum class GeneratorType : int;
- struct GeneratorCollection;
- //mnd::ExecData compile(mnd::MandelContext& mndCtxt);
- std::vector<std::unique_ptr<mnd::MandelGenerator>> compileCpu(mnd::MandelContext& mndCtxt,
- const IterationFormula& z0,
- const IterationFormula& zi);
- std::vector<std::unique_ptr<mnd::MandelGenerator>> compileOpenCl(mnd::MandelDevice& dev,
- const IterationFormula& z0,
- const IterationFormula& zi);
- GeneratorCollection compileFormula(mnd::MandelContext& mndCtxt,
- const IterationFormula& z0,
- const IterationFormula& zi);
- #ifdef WITH_OPENCL
- std::unique_ptr<MandelGenerator> compileClFloat(const ir::Formula&, MandelDevice&);
- std::unique_ptr<MandelGenerator> compileClDouble(const ir::Formula&, MandelDevice&);
- std::unique_ptr<MandelGenerator> compileClDoubleDouble(const ir::Formula&, MandelDevice&);
- #endif // WITH_OPENCL
- }
- //void squareTest();
- struct mnd::GeneratorCollection
- {
- std::vector<std::unique_ptr<mnd::MandelGenerator>> cpuGenerators;
- std::vector<std::unique_ptr<mnd::MandelGenerator>> clGenerators;
- std::unique_ptr<mnd::AdaptiveGenerator> adaptiveGenerator;
- GeneratorCollection(void);
- GeneratorCollection(const GeneratorCollection&) = delete;
- GeneratorCollection(GeneratorCollection&&) = default;
- ~GeneratorCollection(void) = default;
- GeneratorCollection& operator=(GeneratorCollection&&) = default;
- GeneratorCollection& operator=(const GeneratorCollection&) = delete;
- };
- namespace mnd
- {
- CompiledGenerator compile(const ir::Formula& formula);
- std::unique_ptr<MandelGenerator> compileCl(const ir::Formula& formula, MandelDevice& md);
- }
- #endif // MANDEL_ITERATIONCOMPILER_H
|