• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #pragma once
2 
3 #include <kms++/framebuffer.h>
4 #include <kms++/pixelformats.h>
5 
6 struct omap_bo;
7 
8 namespace kms
9 {
10 class OmapCard;
11 
12 class OmapFramebuffer : public Framebuffer
13 {
14 public:
15 	enum Flags
16 	{
17 		None = 0,
18 		Tiled = 1 << 0,
19 		MemContig = 1 << 1,
20 		MemTiler = 1 << 2,
21 		MemPin = 1 << 3,
22 	};
23 
24 	OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, const std::string& fourcc, Flags flags = Flags::None);
25 	OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, PixelFormat format, Flags flags = Flags::None);
26 	virtual ~OmapFramebuffer();
27 
width()28 	uint32_t width() const { return Framebuffer::width(); }
height()29 	uint32_t height() const { return Framebuffer::height(); }
30 
format()31 	PixelFormat format() const { return m_format; }
num_planes()32 	unsigned num_planes() const { return m_num_planes; }
33 
handle(unsigned plane)34 	uint32_t handle(unsigned plane) const { return m_planes[plane].handle; }
stride(unsigned plane)35 	uint32_t stride(unsigned plane) const { return m_planes[plane].stride; }
size(unsigned plane)36 	uint32_t size(unsigned plane) const { return m_planes[plane].size; }
offset(unsigned plane)37 	uint32_t offset(unsigned plane) const { return m_planes[plane].offset; }
38 	uint8_t* map(unsigned plane);
39 	int prime_fd(unsigned plane);
40 
41 private:
42 	OmapCard& m_omap_card;
43 
44 	struct FramebufferPlane {
45 		struct omap_bo* omap_bo;
46 		uint32_t handle;
47 		int prime_fd;
48 		uint32_t size;
49 		uint32_t stride;
50 		uint32_t offset;
51 		uint8_t* map;
52 	};
53 
54 	void Create(Flags buffer_flags);
55 	void Destroy();
56 
57 	unsigned m_num_planes;
58 	struct FramebufferPlane m_planes[3];
59 
60 	PixelFormat m_format;
61 };
62 }
63