CL_PROGRAM_BINARY_TYPE have been added to clGetProgramBuildInfo in CL1.2 --- src/gallium/state_trackers/clover/api/program.cpp | 5 +++++ src/gallium/state_trackers/clover/core/module.cpp | 1 + src/gallium/state_trackers/clover/core/module.hpp | 5 +++++ src/gallium/state_trackers/clover/llvm/codegen.hpp | 3 +++ src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp | 11 +++++++++-- src/gallium/state_trackers/clover/llvm/codegen/common.cpp | 2 +- src/gallium/state_trackers/clover/llvm/invocation.cpp | 2 +- src/gallium/state_trackers/clover/tgsi/compiler.cpp | 2 +- 8 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/src/gallium/state_trackers/clover/api/program.cpp b/src/gallium/state_trackers/clover/api/program.cpp index c3f9cb9..543eeb6 100644 --- a/src/gallium/state_trackers/clover/api/program.cpp +++ b/src/gallium/state_trackers/clover/api/program.cpp @@ -401,6 +401,11 @@ clGetProgramBuildInfo(cl_program d_prog, cl_device_id d_dev, buf.as_string() = prog.build(dev).log; break; + case CL_PROGRAM_BINARY_TYPE: + buf.as_scalar<cl_program_binary_type>() = + prog.build(dev).binary.binary_type; + break; + default: throw error(CL_INVALID_VALUE); } diff --git a/src/gallium/state_trackers/clover/core/module.cpp b/src/gallium/state_trackers/clover/core/module.cpp index a6c5b98..cc24a2b 100644 --- a/src/gallium/state_trackers/clover/core/module.cpp +++ b/src/gallium/state_trackers/clover/core/module.cpp @@ -202,6 +202,7 @@ namespace { template<typename S, typename QT> static void proc(S &s, QT &x) { + _proc(s, x.binary_type); _proc(s, x.syms); _proc(s, x.secs); } diff --git a/src/gallium/state_trackers/clover/core/module.hpp b/src/gallium/state_trackers/clover/core/module.hpp index 5db0548..bcf2a29 100644 --- a/src/gallium/state_trackers/clover/core/module.hpp +++ b/src/gallium/state_trackers/clover/core/module.hpp @@ -114,10 +114,15 @@ namespace clover { std::vector<argument> args; }; + module() : binary_type(0), syms(), secs() { } + module(size_t binary_type) : + binary_type(binary_type), syms(), secs() { } + void serialize(std::ostream &os) const; static module deserialize(std::istream &is); size_t size() const; + size_t binary_type; std::vector<symbol> syms; std::vector<section> secs; }; diff --git a/src/gallium/state_trackers/clover/llvm/codegen.hpp b/src/gallium/state_trackers/clover/llvm/codegen.hpp index e0e9901..49de79d 100644 --- a/src/gallium/state_trackers/clover/llvm/codegen.hpp +++ b/src/gallium/state_trackers/clover/llvm/codegen.hpp @@ -46,6 +46,9 @@ namespace clover { print_module_bitcode(const ::llvm::Module &mod); module + build_module_compiled(const ::llvm::Module &mod); + + module build_module_library(const ::llvm::Module &mod); std::unique_ptr<::llvm::Module> diff --git a/src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp b/src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp index 658cce9..c75514b 100644 --- a/src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp +++ b/src/gallium/state_trackers/clover/llvm/codegen/bitcode.cpp @@ -80,13 +80,20 @@ clover::llvm::print_module_bitcode(const ::llvm::Module &mod) { } module -clover::llvm::build_module_library(const ::llvm::Module &mod) { - module m; +clover::llvm::build_module_compiled(const ::llvm::Module &mod) { + module m(CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT); const auto code = emit_code(mod); m.secs.emplace_back(0, module::section::text, code.size(), code); return m; } +module +clover::llvm::build_module_library(const ::llvm::Module &mod) { + module m = build_module_compiled(mod); + m.binary_type = CL_PROGRAM_BINARY_TYPE_LIBRARY; + return m; +} + std::unique_ptr<::llvm::Module> clover::llvm::parse_module_library(const module &m, ::llvm::LLVMContext &ctx, std::string &r_log) { diff --git a/src/gallium/state_trackers/clover/llvm/codegen/common.cpp b/src/gallium/state_trackers/clover/llvm/codegen/common.cpp index 834b06a..bd7207f 100644 --- a/src/gallium/state_trackers/clover/llvm/codegen/common.cpp +++ b/src/gallium/state_trackers/clover/llvm/codegen/common.cpp @@ -195,7 +195,7 @@ clover::llvm::build_module_common(const Module &mod, const std::map<std::string, unsigned> &offsets, const clang::CompilerInstance &c) { - module m; + module m(CL_PROGRAM_BINARY_TYPE_EXECUTABLE); for (const auto &name : map(std::mem_fn(&Function::getName), get_kernels(mod))) { diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp index b5e8b52..fe10b78 100644 --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp @@ -211,7 +211,7 @@ clover::llvm::compile_program(const std::string &source, if (has_flag(debug::llvm)) debug::log(".ll", print_module_bitcode(*mod)); - return build_module_library(*mod); + return build_module_compiled(*mod); } namespace { diff --git a/src/gallium/state_trackers/clover/tgsi/compiler.cpp b/src/gallium/state_trackers/clover/tgsi/compiler.cpp index 9bbd454..a4d0355 100644 --- a/src/gallium/state_trackers/clover/tgsi/compiler.cpp +++ b/src/gallium/state_trackers/clover/tgsi/compiler.cpp @@ -104,7 +104,7 @@ clover::tgsi::compile_program(const std::string &source, std::string &r_log) { } const char *body = &source[body_pos]; - module m; + module m(CL_PROGRAM_BINARY_TYPE_EXECUTABLE); read_header({ source.begin(), source.begin() + body_pos }, m, r_log); read_body(body, m, r_log); -- 2.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev