aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdB <[email protected]>2015-04-24 12:59:56 +0200
committerTom Stellard <[email protected]>2015-04-29 12:45:07 +0000
commit2d112ed96152bc62e5417472270f29966c8feece (patch)
treee3165009b639671a6d48c10ca5295e7db8b70944
parent5ca9b23319db66d9768d46c0a7504b7bb079164a (diff)
clover: make module::symbol::name a string
Acked-by: Francisco Jerez <[email protected]> Reviewed-by: Tom Stellard <[email protected]>
-rw-r--r--src/gallium/state_trackers/clover/api/program.cpp3
-rw-r--r--src/gallium/state_trackers/clover/core/module.cpp21
-rw-r--r--src/gallium/state_trackers/clover/core/module.hpp4
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;