diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/base/framebuffer.cc | 17 | ||||
-rw-r--r-- | src/base/framebuffer.hh | 29 | ||||
-rw-r--r-- | src/sim/serialize.cc | 2 |
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) ///////////////////////////// |