Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. //
  2. // Copyright 2012 Francisco Jerez
  3. //
  4. // Permission is hereby granted, free of charge, to any person obtaining a
  5. // copy of this software and associated documentation files (the "Software"),
  6. // to deal in the Software without restriction, including without limitation
  7. // the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. // and/or sell copies of the Software, and to permit persons to whom the
  9. // Software is furnished to do so, subject to the following conditions:
  10. //
  11. // The above copyright notice and this permission notice shall be included in
  12. // all copies or substantial portions of the Software.
  13. //
  14. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  17. // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18. // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19. // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20. // OTHER DEALINGS IN THE SOFTWARE.
  21. //
  22.  
  23. #ifndef CLOVER_CORE_PROGRAM_HPP
  24. #define CLOVER_CORE_PROGRAM_HPP
  25.  
  26. #include <map>
  27.  
  28. #include "core/object.hpp"
  29. #include "core/context.hpp"
  30. #include "core/module.hpp"
  31. #include "core/compiler.hpp"
  32.  
  33. namespace clover {
  34.    class program : public ref_counter, public _cl_program {
  35.    private:
  36.       typedef adaptor_range<
  37.          evals, const std::vector<intrusive_ref<device>> &> device_range;
  38.  
  39.    public:
  40.       program(clover::context &ctx,
  41.               const std::string &source);
  42.       program(clover::context &ctx,
  43.               const ref_vector<device> &devs,
  44.               const std::vector<module> &binaries);
  45.  
  46.       program(const program &prog) = delete;
  47.       program &
  48.       operator=(const program &prog) = delete;
  49.  
  50.       void build(const ref_vector<device> &devs, const char *opts,
  51.                  const header_map &headers = {});
  52.  
  53.       const bool has_source;
  54.       const std::string &source() const;
  55.  
  56.       device_range devices() const;
  57.  
  58.       const module &binary(const device &dev) const;
  59.       cl_build_status build_status(const device &dev) const;
  60.       std::string build_opts(const device &dev) const;
  61.       std::string build_log(const device &dev) const;
  62.  
  63.       const std::vector<module::symbol> &symbols() const;
  64.  
  65.       unsigned kernel_ref_count() const;
  66.  
  67.       const intrusive_ref<clover::context> context;
  68.  
  69.       friend class kernel;
  70.  
  71.    private:
  72.       std::vector<intrusive_ref<device>> _devices;
  73.       std::map<const device *, module> _binaries;
  74.       std::map<const device *, std::string> _logs;
  75.       std::map<const device *, std::string> _opts;
  76.       std::string _source;
  77.       ref_counter _kernel_ref_counter;
  78.    };
  79. }
  80.  
  81. #endif
  82.