diff options
author | EdB <[email protected]> | 2015-04-24 12:59:56 +0200 |
---|---|---|
committer | Tom Stellard <[email protected]> | 2015-04-29 12:45:07 +0000 |
commit | 2d112ed96152bc62e5417472270f29966c8feece (patch) | |
tree | e3165009b639671a6d48c10ca5295e7db8b70944 /src/gallium/state_trackers/clover | |
parent | 5ca9b23319db66d9768d46c0a7504b7bb079164a (diff) |
clover: make module::symbol::name a string
Acked-by: Francisco Jerez <[email protected]>
Reviewed-by: Tom Stellard <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/clover')
-rw-r--r-- | src/gallium/state_trackers/clover/api/program.cpp | 3 | ||||
-rw-r--r-- | src/gallium/state_trackers/clover/core/module.cpp | 21 | ||||
-rw-r--r-- | src/gallium/state_trackers/clover/core/module.hpp | 4 |
3 files changed, 24 insertions, 4 deletions
diff --git a/src/gallium/state_trackers/clover/api/program.cpp b/src/gallium/state_trackers/clover/api/program.cpp index b3be2b8d1bb..913d195a16f 100644 --- a/src/gallium/state_trackers/clover/api/program.cpp +++ b/src/gallium/state_trackers/clover/api/program.cpp @@ -293,8 +293,7 @@ clGetProgramInfo(cl_program d_prog, cl_program_info param, case CL_PROGRAM_KERNEL_NAMES: buf.as_string() = fold([](const std::string &a, const module::symbol &s) { - return ((a.empty() ? "" : a + ";") + - std::string(s.name.begin(), s.name.size())); + return ((a.empty() ? "" : a + ";") + s.name); }, std::string(), prog.symbols()); break; diff --git a/src/gallium/state_trackers/clover/core/module.cpp b/src/gallium/state_trackers/clover/core/module.cpp index be10e35d15d..f098b05312b 100644 --- a/src/gallium/state_trackers/clover/core/module.cpp +++ b/src/gallium/state_trackers/clover/core/module.cpp @@ -133,6 +133,27 @@ namespace { } }; + /// (De)serialize a string. + template<> + struct _serializer<std::string> { + static void + proc(compat::ostream &os, const std::string &s) { + _proc<uint32_t>(os, s.size()); + os.write(&s[0], s.size() * sizeof(std::string::value_type)); + } + + static void + proc(compat::istream &is, std::string &s) { + s.resize(_proc<uint32_t>(is)); + is.read(&s[0], s.size() * sizeof(std::string::value_type)); + } + + static void + proc(module::size_t &sz, const std::string &s) { + sz += sizeof(uint32_t) + sizeof(std::string::value_type) * s.size(); + } + }; + /// (De)serialize a module::section. template<> struct _serializer<module::section> { diff --git a/src/gallium/state_trackers/clover/core/module.hpp b/src/gallium/state_trackers/clover/core/module.hpp index ee6caf9690c..46112a38c91 100644 --- a/src/gallium/state_trackers/clover/core/module.hpp +++ b/src/gallium/state_trackers/clover/core/module.hpp @@ -100,12 +100,12 @@ namespace clover { }; struct symbol { - symbol(const compat::vector<char> &name, resource_id section, + symbol(const std::string &name, resource_id section, size_t offset, const compat::vector<argument> &args) : name(name), section(section), offset(offset), args(args) { } symbol() : name(), section(0), offset(0), args() { } - compat::vector<char> name; + std::string name; resource_id section; size_t offset; compat::vector<argument> args; |