summaryrefslogtreecommitdiff
path: root/kms++/inc
diff options
context:
space:
mode:
Diffstat (limited to 'kms++/inc')
-rw-r--r--kms++/inc/kms++/blob.h2
-rw-r--r--kms++/inc/kms++/card.h12
-rw-r--r--kms++/inc/kms++/connector.h4
-rw-r--r--kms++/inc/kms++/crtc.h4
-rw-r--r--kms++/inc/kms++/decls.h1
-rw-r--r--kms++/inc/kms++/dmabufframebuffer.h51
-rw-r--r--kms++/inc/kms++/drmpropobject.h2
-rw-r--r--kms++/inc/kms++/dumbframebuffer.h23
-rw-r--r--kms++/inc/kms++/encoder.h2
-rw-r--r--kms++/inc/kms++/extframebuffer.h22
-rw-r--r--kms++/inc/kms++/framebuffer.h16
-rw-r--r--kms++/inc/kms++/kms++.h1
-rw-r--r--kms++/inc/kms++/plane.h2
-rw-r--r--kms++/inc/kms++/property.h2
14 files changed, 100 insertions, 44 deletions
diff --git a/kms++/inc/kms++/blob.h b/kms++/inc/kms++/blob.h
index fd872f1..31e915c 100644
--- a/kms++/inc/kms++/blob.h
+++ b/kms++/inc/kms++/blob.h
@@ -11,7 +11,7 @@ class Blob : public DrmObject
public:
Blob(Card& card, uint32_t blob_id);
Blob(Card& card, void* data, size_t len);
- virtual ~Blob();
+ ~Blob() override;
std::vector<uint8_t> data();
diff --git a/kms++/inc/kms++/card.h b/kms++/inc/kms++/card.h
index e734689..e561ffc 100644
--- a/kms++/inc/kms++/card.h
+++ b/kms++/inc/kms++/card.h
@@ -50,13 +50,13 @@ public:
bool has_dumb_buffers() const { return m_has_dumb; }
bool has_kms() const;
- const std::vector<Connector*> get_connectors() const { return m_connectors; }
- const std::vector<Encoder*> get_encoders() const { return m_encoders; }
- const std::vector<Crtc*> get_crtcs() const { return m_crtcs; }
- const std::vector<Plane*> get_planes() const { return m_planes; }
- const std::vector<Property*> get_properties() const { return m_properties; }
+ std::vector<Connector*> get_connectors() const { return m_connectors; }
+ std::vector<Encoder*> get_encoders() const { return m_encoders; }
+ std::vector<Crtc*> get_crtcs() const { return m_crtcs; }
+ std::vector<Plane*> get_planes() const { return m_planes; }
+ std::vector<Property*> get_properties() const { return m_properties; }
- const std::vector<DrmObject*> get_objects() const;
+ std::vector<DrmObject*> get_objects() const;
std::vector<Pipeline> get_connected_pipelines();
diff --git a/kms++/inc/kms++/connector.h b/kms++/inc/kms++/connector.h
index 155f916..323d37d 100644
--- a/kms++/inc/kms++/connector.h
+++ b/kms++/inc/kms++/connector.h
@@ -46,9 +46,9 @@ public:
std::vector<Encoder*> get_encoders() const;
private:
Connector(Card& card, uint32_t id, uint32_t idx);
- ~Connector();
+ ~Connector() override;
- void setup();
+ void setup() override;
void restore_mode();
ConnectorPriv* m_priv;
diff --git a/kms++/inc/kms++/crtc.h b/kms++/inc/kms++/crtc.h
index ea20ef8..990fc20 100644
--- a/kms++/inc/kms++/crtc.h
+++ b/kms++/inc/kms++/crtc.h
@@ -42,9 +42,9 @@ public:
int gamma_size() const;
private:
Crtc(Card& card, uint32_t id, uint32_t idx);
- ~Crtc();
+ ~Crtc() override;
- void setup();
+ void setup() override;
void restore_mode(Connector *conn);
CrtcPriv* m_priv;
diff --git a/kms++/inc/kms++/decls.h b/kms++/inc/kms++/decls.h
index 91bce13..438dad5 100644
--- a/kms++/inc/kms++/decls.h
+++ b/kms++/inc/kms++/decls.h
@@ -12,6 +12,7 @@ class DrmPropObject;
class DumbFramebuffer;
class Encoder;
class ExtFramebuffer;
+class DmabufFramebuffer;
class Framebuffer;
class PageFlipHandlerBase;
class Plane;
diff --git a/kms++/inc/kms++/dmabufframebuffer.h b/kms++/inc/kms++/dmabufframebuffer.h
new file mode 100644
index 0000000..73c6d21
--- /dev/null
+++ b/kms++/inc/kms++/dmabufframebuffer.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include "framebuffer.h"
+#include "pixelformats.h"
+#include <vector>
+
+namespace kms
+{
+
+class DmabufFramebuffer : public Framebuffer
+{
+public:
+ DmabufFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
+ std::vector<int> fds, std::vector<uint32_t> pitches, std::vector<uint32_t> offsets);
+ ~DmabufFramebuffer() override;
+
+ uint32_t width() const override { return Framebuffer::width(); }
+ uint32_t height() const override { return Framebuffer::height(); }
+
+ PixelFormat format() const override { return m_format; }
+ unsigned num_planes() const override { return m_num_planes; }
+
+ uint32_t handle(unsigned plane) const { return m_planes[plane].handle; }
+ uint32_t stride(unsigned plane) const override { return m_planes[plane].stride; }
+ uint32_t size(unsigned plane) const override { return m_planes[plane].size; }
+ uint32_t offset(unsigned plane) const override { return m_planes[plane].offset; }
+ uint8_t* map(unsigned plane) override;
+ int prime_fd(unsigned plane) override;
+
+ void begin_cpu_access(CpuAccess access) override;
+ void end_cpu_access() override;
+
+private:
+ struct FramebufferPlane {
+ uint32_t handle;
+ int prime_fd;
+ uint32_t size;
+ uint32_t stride;
+ uint32_t offset;
+ uint8_t *map;
+ };
+
+ unsigned m_num_planes;
+ struct FramebufferPlane m_planes[4];
+
+ PixelFormat m_format;
+
+ uint32_t m_sync_flags = 0;
+};
+
+}
diff --git a/kms++/inc/kms++/drmpropobject.h b/kms++/inc/kms++/drmpropobject.h
index d9ba58e..809caf5 100644
--- a/kms++/inc/kms++/drmpropobject.h
+++ b/kms++/inc/kms++/drmpropobject.h
@@ -31,7 +31,7 @@ protected:
DrmPropObject(Card& card, uint32_t object_type);
DrmPropObject(Card& card, uint32_t id, uint32_t object_type, uint32_t idx = 0);
- virtual ~DrmPropObject();
+ ~DrmPropObject() override;
private:
std::map<uint32_t, uint64_t> m_prop_values;
diff --git a/kms++/inc/kms++/dumbframebuffer.h b/kms++/inc/kms++/dumbframebuffer.h
index fb99d0e..b722615 100644
--- a/kms++/inc/kms++/dumbframebuffer.h
+++ b/kms++/inc/kms++/dumbframebuffer.h
@@ -11,20 +11,20 @@ class DumbFramebuffer : public Framebuffer
public:
DumbFramebuffer(Card& card, uint32_t width, uint32_t height, const std::string& fourcc);
DumbFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format);
- virtual ~DumbFramebuffer();
+ ~DumbFramebuffer() override;
- uint32_t width() const { return Framebuffer::width(); }
- uint32_t height() const { return Framebuffer::height(); }
+ uint32_t width() const override { return Framebuffer::width(); }
+ uint32_t height() const override { return Framebuffer::height(); }
- PixelFormat format() const { return m_format; }
- unsigned num_planes() const { return m_num_planes; }
+ PixelFormat format() const override { return m_format; }
+ unsigned num_planes() const override { return m_num_planes; }
uint32_t handle(unsigned plane) const { return m_planes[plane].handle; }
- uint32_t stride(unsigned plane) const { return m_planes[plane].stride; }
- uint32_t size(unsigned plane) const { return m_planes[plane].size; }
- uint32_t offset(unsigned plane) const { return m_planes[plane].offset; }
- uint8_t* map(unsigned plane);
- int prime_fd(unsigned plane);
+ uint32_t stride(unsigned plane) const override { return m_planes[plane].stride; }
+ uint32_t size(unsigned plane) const override { return m_planes[plane].size; }
+ uint32_t offset(unsigned plane) const override { return m_planes[plane].offset; }
+ uint8_t* map(unsigned plane) override;
+ int prime_fd(unsigned plane) override;
private:
struct FramebufferPlane {
@@ -36,9 +36,6 @@ private:
uint8_t *map;
};
- void Create();
- void Destroy();
-
unsigned m_num_planes;
struct FramebufferPlane m_planes[4];
diff --git a/kms++/inc/kms++/encoder.h b/kms++/inc/kms++/encoder.h
index 1d36adc..72c0213 100644
--- a/kms++/inc/kms++/encoder.h
+++ b/kms++/inc/kms++/encoder.h
@@ -20,7 +20,7 @@ public:
const std::string& get_encoder_type() const;
private:
Encoder(Card& card, uint32_t id, uint32_t idx);
- ~Encoder();
+ ~Encoder() override;
EncoderPriv* m_priv;
};
diff --git a/kms++/inc/kms++/extframebuffer.h b/kms++/inc/kms++/extframebuffer.h
index 5f0660c..0b9d08a 100644
--- a/kms++/inc/kms++/extframebuffer.h
+++ b/kms++/inc/kms++/extframebuffer.h
@@ -2,6 +2,7 @@
#include "framebuffer.h"
#include "pixelformats.h"
+#include <vector>
namespace kms
{
@@ -11,27 +12,22 @@ class ExtFramebuffer : public Framebuffer
public:
ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
std::vector<uint32_t> handles, std::vector<uint32_t> pitches, std::vector<uint32_t> offsets);
- ExtFramebuffer(Card& card, uint32_t width, uint32_t height, PixelFormat format,
- std::vector<int> fds, std::vector<uint32_t> pitches, std::vector<uint32_t> offsets);
- virtual ~ExtFramebuffer();
+ ~ExtFramebuffer() override;
- uint32_t width() const { return Framebuffer::width(); }
- uint32_t height() const { return Framebuffer::height(); }
+ uint32_t width() const override { return Framebuffer::width(); }
+ uint32_t height() const override { return Framebuffer::height(); }
- PixelFormat format() const { return m_format; }
- unsigned num_planes() const { return m_num_planes; }
+ PixelFormat format() const override { return m_format; }
+ unsigned num_planes() const override { return m_num_planes; }
uint32_t handle(unsigned plane) const { return m_planes[plane].handle; }
- uint32_t stride(unsigned plane) const { return m_planes[plane].stride; }
- uint32_t size(unsigned plane) const { return m_planes[plane].size; }
- uint32_t offset(unsigned plane) const { return m_planes[plane].offset; }
- uint8_t* map(unsigned plane);
- int prime_fd(unsigned plane);
+ uint32_t stride(unsigned plane) const override { return m_planes[plane].stride; }
+ uint32_t size(unsigned plane) const override { return m_planes[plane].size; }
+ uint32_t offset(unsigned plane) const override { return m_planes[plane].offset; }
private:
struct FramebufferPlane {
uint32_t handle;
- int prime_fd;
uint32_t size;
uint32_t stride;
uint32_t offset;
diff --git a/kms++/inc/kms++/framebuffer.h b/kms++/inc/kms++/framebuffer.h
index 3d43d08..bcfd1f0 100644
--- a/kms++/inc/kms++/framebuffer.h
+++ b/kms++/inc/kms++/framebuffer.h
@@ -5,6 +5,13 @@
namespace kms
{
+enum class CpuAccess
+{
+ Read,
+ Write,
+ ReadWrite,
+};
+
class IFramebuffer {
public:
virtual ~IFramebuffer() { }
@@ -20,16 +27,19 @@ public:
virtual uint32_t offset(unsigned plane) const { throw std::runtime_error("not implemented"); }
virtual uint8_t* map(unsigned plane) { throw std::runtime_error("not implemented"); }
virtual int prime_fd(unsigned plane) { throw std::runtime_error("not implemented"); }
+
+ virtual void begin_cpu_access(CpuAccess access) { }
+ virtual void end_cpu_access() { }
};
class Framebuffer : public DrmObject, public IFramebuffer
{
public:
Framebuffer(Card& card, uint32_t id);
- virtual ~Framebuffer();
+ ~Framebuffer() override;
- uint32_t width() const { return m_width; }
- uint32_t height() const { return m_height; }
+ uint32_t width() const override { return m_width; }
+ uint32_t height() const override { return m_height; }
void flush();
protected:
diff --git a/kms++/inc/kms++/kms++.h b/kms++/inc/kms++/kms++.h
index 3365ef7..a97505a 100644
--- a/kms++/inc/kms++/kms++.h
+++ b/kms++/inc/kms++/kms++.h
@@ -8,6 +8,7 @@
#include "framebuffer.h"
#include "dumbframebuffer.h"
#include "extframebuffer.h"
+#include "dmabufframebuffer.h"
#include "plane.h"
#include "property.h"
#include "blob.h"
diff --git a/kms++/inc/kms++/plane.h b/kms++/inc/kms++/plane.h
index 27e819b..1d78537 100644
--- a/kms++/inc/kms++/plane.h
+++ b/kms++/inc/kms++/plane.h
@@ -35,7 +35,7 @@ public:
uint32_t gamma_size() const;
private:
Plane(Card& card, uint32_t id, uint32_t idx);
- ~Plane();
+ ~Plane() override;
PlanePriv* m_priv;
};
diff --git a/kms++/inc/kms++/property.h b/kms++/inc/kms++/property.h
index b9097ff..8d6088e 100644
--- a/kms++/inc/kms++/property.h
+++ b/kms++/inc/kms++/property.h
@@ -34,7 +34,7 @@ public:
std::vector<uint32_t> get_blob_ids() const;
private:
Property(Card& card, uint32_t id);
- ~Property();
+ ~Property() override;
PropertyType m_type;