summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/base/framebuffer.cc17
-rw-r--r--src/base/framebuffer.hh29
-rw-r--r--src/sim/serialize.cc2
3 files changed, 46 insertions, 2 deletions
diff --git a/src/base/framebuffer.cc b/src/base/framebuffer.cc
index dc4c2e1c2..73f724892 100644
--- a/src/base/framebuffer.cc
+++ b/src/base/framebuffer.cc
@@ -122,6 +122,23 @@ FrameBuffer::~FrameBuffer()
{
}
+
+void
+FrameBuffer::serialize(CheckpointOut &cp) const
+{
+ SERIALIZE_SCALAR(_width);
+ SERIALIZE_SCALAR(_height);
+ SERIALIZE_CONTAINER(pixels);
+}
+
+void
+FrameBuffer::unserialize(CheckpointIn &cp)
+{
+ UNSERIALIZE_SCALAR(_width);
+ UNSERIALIZE_SCALAR(_height);
+ UNSERIALIZE_CONTAINER(pixels);
+}
+
void
FrameBuffer::resize(unsigned width, unsigned height)
{
diff --git a/src/base/framebuffer.hh b/src/base/framebuffer.hh
index 457c6d06d..eaac25111 100644
--- a/src/base/framebuffer.hh
+++ b/src/base/framebuffer.hh
@@ -43,9 +43,14 @@
#include <cmath>
#include <cstdint>
+#include <string>
#include <vector>
+#include "base/compiler.hh"
+#include "base/cprintf.hh"
+#include "base/str.hh"
#include "base/types.hh"
+#include "sim/serialize.hh"
/**
* Internal gem5 representation of a Pixel.
@@ -73,7 +78,6 @@ operator==(const Pixel &lhs, const Pixel &rhs)
lhs.padding == rhs.padding;
}
-
/**
* Configurable RGB pixel converter.
*
@@ -208,6 +212,24 @@ class PixelConverter
static const PixelConverter rgb565_be;
};
+inline bool
+to_number(const std::string &value, Pixel &retval)
+{
+ uint32_t num;
+ if (!to_number(value, num))
+ return false;
+
+ retval = PixelConverter::rgba8888_le.toPixel(num);
+ return true;
+}
+
+inline std::ostream &
+operator<<(std::ostream &os, const Pixel &pxl)
+{
+ os << csprintf("0x%.08x", PixelConverter::rgba8888_le.fromPixel(pxl));
+ return os;
+}
+
/**
* Internal gem5 representation of a frame buffer
*
@@ -219,7 +241,7 @@ class PixelConverter
* corner. The backing store is a linear vector of Pixels ordered left
* to right starting in the upper left corner.
*/
-class FrameBuffer
+class FrameBuffer : public Serializable
{
public:
/**
@@ -234,6 +256,9 @@ class FrameBuffer
virtual ~FrameBuffer();
+ void serialize(CheckpointOut &cp) const M5_ATTR_OVERRIDE;
+ void unserialize(CheckpointIn &cp) M5_ATTR_OVERRIDE;
+
/**
* Resize the frame buffer.
*
diff --git a/src/sim/serialize.cc b/src/sim/serialize.cc
index a7c1834cf..b74b4bc9d 100644
--- a/src/sim/serialize.cc
+++ b/src/sim/serialize.cc
@@ -55,6 +55,7 @@
#include <string>
#include <vector>
+#include "base/framebuffer.hh"
#include "base/inifile.hh"
#include "base/misc.hh"
#include "base/output.hh"
@@ -418,6 +419,7 @@ INSTANTIATE_PARAM_TEMPLATES(bool)
INSTANTIATE_PARAM_TEMPLATES(float)
INSTANTIATE_PARAM_TEMPLATES(double)
INSTANTIATE_PARAM_TEMPLATES(string)
+INSTANTIATE_PARAM_TEMPLATES(Pixel)
/////////////////////////////