clCreateKernel should check that there is a least one executable available, otherwise it has to trigger CL_INVALID_PROGRAM_EXECUTABLE --- src/gallium/state_trackers/clover/api/kernel.cpp | 3 +++ src/gallium/state_trackers/clover/core/program.cpp | 11 +++++++++++ src/gallium/state_trackers/clover/core/program.hpp | 1 + 3 files changed, 15 insertions(+)
diff --git a/src/gallium/state_trackers/clover/api/kernel.cpp b/src/gallium/state_trackers/clover/api/kernel.cpp index 05cc392..4fe1756 100644 --- a/src/gallium/state_trackers/clover/api/kernel.cpp +++ b/src/gallium/state_trackers/clover/api/kernel.cpp @@ -33,6 +33,9 @@ clCreateKernel(cl_program d_prog, const char *name, cl_int *r_errcode) try { if (!name) throw error(CL_INVALID_VALUE); + if (!prog.has_executable()) + throw error(CL_INVALID_PROGRAM_EXECUTABLE); + auto &sym = find(name_equals(name), prog.symbols()); ret_error(r_errcode, CL_SUCCESS); diff --git a/src/gallium/state_trackers/clover/core/program.cpp b/src/gallium/state_trackers/clover/core/program.cpp index 8553ca7..5e05a33 100644 --- a/src/gallium/state_trackers/clover/core/program.cpp +++ b/src/gallium/state_trackers/clover/core/program.cpp @@ -71,6 +71,17 @@ program::build(const ref_vector<device> &devs, const char *opts, } } +bool +program::has_executable() const { + for (auto &bin : _binaries) { + if (any_of(type_equals(module::section::text_executable), + bin.second.secs)) + return true; + } + + return false; +} + const std::string & program::source() const { return _source; diff --git a/src/gallium/state_trackers/clover/core/program.hpp b/src/gallium/state_trackers/clover/core/program.hpp index 661fa03..7f61d88 100644 --- a/src/gallium/state_trackers/clover/core/program.hpp +++ b/src/gallium/state_trackers/clover/core/program.hpp @@ -50,6 +50,7 @@ namespace clover { void build(const ref_vector<device> &devs, const char *opts, const header_map &headers = {}); + bool has_executable() const; const bool has_source; const std::string &source() const; -- 2.2.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev