Changeset View
Changeset View
Standalone View
Standalone View
plugins/platforms/drm/drm_buffer.h
Show All 17 Lines | |||||
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
19 | *********************************************************************/ | 19 | *********************************************************************/ | ||
20 | #ifndef KWIN_DRM_BUFFER_H | 20 | #ifndef KWIN_DRM_BUFFER_H | ||
21 | #define KWIN_DRM_BUFFER_H | 21 | #define KWIN_DRM_BUFFER_H | ||
22 | 22 | | |||
23 | #include <QImage> | 23 | #include <QImage> | ||
24 | #include <QSize> | 24 | #include <QSize> | ||
25 | 25 | | |||
26 | struct gbm_bo; | | |||
27 | struct gbm_surface; | | |||
28 | | ||||
29 | namespace KWin | 26 | namespace KWin | ||
30 | { | 27 | { | ||
31 | 28 | | |||
32 | class DrmBackend; | 29 | class DrmBackend; | ||
33 | 30 | | |||
34 | class DrmBuffer | 31 | class DrmBuffer | ||
35 | { | 32 | { | ||
36 | public: | 33 | public: | ||
37 | ~DrmBuffer(); | 34 | DrmBuffer(DrmBackend *backend); | ||
35 | virtual ~DrmBuffer() = default; | ||||
38 | 36 | | |||
39 | bool map(QImage::Format format = QImage::Format_RGB32); | 37 | virtual bool needsModeChange(DrmBuffer *b) const {Q_UNUSED(b) return false;} | ||
40 | QImage *image() const { | 38 | | ||
41 | return m_image; | 39 | quint32 bufferId() const { | ||
42 | } | 40 | return m_bufferId; | ||
43 | quint32 handle() const { | | |||
44 | return m_handle; | | |||
45 | } | 41 | } | ||
42 | | ||||
46 | const QSize &size() const { | 43 | const QSize &size() const { | ||
47 | return m_size; | 44 | return m_size; | ||
48 | } | 45 | } | ||
49 | quint32 bufferId() const { | 46 | | ||
50 | return m_bufferId; | 47 | virtual void releaseGbm() {} | ||
48 | | ||||
49 | protected: | ||||
50 | DrmBackend *m_backend; | ||||
51 | quint32 m_bufferId = 0; | ||||
52 | QSize m_size; | ||||
53 | }; | ||||
54 | | ||||
55 | class DrmDumbBuffer : public DrmBuffer | ||||
56 | { | ||||
57 | public: | ||||
58 | DrmDumbBuffer(DrmBackend *backend, const QSize &size); | ||||
59 | ~DrmDumbBuffer(); | ||||
60 | | ||||
61 | bool needsModeChange(DrmBuffer *b) const override; | ||||
62 | | ||||
63 | bool map(QImage::Format format = QImage::Format_RGB32); | ||||
64 | quint32 handle() const { | ||||
65 | return m_handle; | ||||
66 | } | ||||
67 | QImage *image() const { | ||||
68 | return m_image; | ||||
51 | } | 69 | } | ||
70 | | ||||
52 | quint32 stride() const { | 71 | quint32 stride() const { | ||
53 | return m_stride; | 72 | return m_stride; | ||
54 | } | 73 | } | ||
55 | gbm_bo *gbm() const { | | |||
56 | return m_bo; | | |||
57 | } | | |||
58 | bool isGbm() const { | | |||
59 | return m_bo != nullptr; | | |||
60 | } | | |||
61 | bool deleteAfterPageFlip() const { | | |||
62 | return m_deleteAfterPageFlip; | | |||
63 | } | | |||
64 | void releaseGbm(); | | |||
65 | 74 | | |||
66 | private: | 75 | private: | ||
67 | friend class DrmBackend; | | |||
68 | DrmBuffer(DrmBackend *backend, const QSize &size); | | |||
69 | DrmBuffer(DrmBackend *backend, gbm_surface *surface); | | |||
70 | DrmBackend *m_backend; | | |||
71 | gbm_surface *m_surface = nullptr; | | |||
72 | gbm_bo *m_bo = nullptr; | | |||
73 | QSize m_size; | | |||
74 | quint32 m_handle = 0; | 76 | quint32 m_handle = 0; | ||
75 | quint32 m_bufferId = 0; | | |||
76 | quint32 m_stride = 0; | | |||
77 | quint64 m_bufferSize = 0; | 77 | quint64 m_bufferSize = 0; | ||
78 | void *m_memory = nullptr; | 78 | void *m_memory = nullptr; | ||
79 | QImage *m_image = nullptr; | 79 | QImage *m_image = nullptr; | ||
80 | bool m_deleteAfterPageFlip = false; | 80 | quint32 m_stride = 0; | ||
81 | }; | 81 | }; | ||
82 | 82 | | |||
83 | } | 83 | } | ||
84 | 84 | | |||
85 | #endif | 85 | #endif | ||
86 | 86 | |