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