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