Mesa (master): clover: Optimize module serialization for vectors of fundamental types.
Francisco Jerez
currojerez at kemper.freedesktop.org
Thu Jun 19 18:20:12 UTC 2014
Module: Mesa
Branch: master
Commit: ab023c27a374bb69bd7300b5b6f0789844fc8ba9
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab023c27a374bb69bd7300b5b6f0789844fc8ba9
Author: Francisco Jerez <currojerez at riseup.net>
Date: Sat Jun 14 20:53:35 2014 +0200
clover: Optimize module serialization for vectors of fundamental types.
Tested-by: Tom Stellard <thomas.stellard at amd.com>
---
src/gallium/state_trackers/clover/core/module.cpp | 23 ++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/src/gallium/state_trackers/clover/core/module.cpp b/src/gallium/state_trackers/clover/core/module.cpp
index 3e3ad99..41de734 100644
--- a/src/gallium/state_trackers/clover/core/module.cpp
+++ b/src/gallium/state_trackers/clover/core/module.cpp
@@ -69,7 +69,9 @@ namespace {
/// (De)serialize a vector.
template<typename T>
- struct _serializer<compat::vector<T>> {
+ struct _serializer<compat::vector<T>,
+ typename std::enable_if<
+ !std::is_scalar<T>::value>::type> {
static void
proc(compat::ostream &os, const compat::vector<T> &v) {
_proc<uint32_t>(os, v.size());
@@ -87,6 +89,25 @@ namespace {
}
};
+ template<typename T>
+ struct _serializer<compat::vector<T>,
+ typename std::enable_if<
+ std::is_scalar<T>::value>::type> {
+ static void
+ proc(compat::ostream &os, const compat::vector<T> &v) {
+ _proc<uint32_t>(os, v.size());
+ os.write(reinterpret_cast<const char *>(v.begin()),
+ v.size() * sizeof(T));
+ }
+
+ static void
+ proc(compat::istream &is, compat::vector<T> &v) {
+ v.reserve(_proc<uint32_t>(is));
+ is.read(reinterpret_cast<char *>(v.begin()),
+ v.size() * sizeof(T));
+ }
+ };
+
/// (De)serialize a module::section.
template<>
struct _serializer<module::section> {
More information about the mesa-commit
mailing list