xref: /aosp_15_r20/external/libkmsxx/kms++/inc/kms++/framebuffer.h (revision f0687c8a10b3e371dbe09214db6664e37c283cca)
1*f0687c8aSRaman Tenneti #pragma once
2*f0687c8aSRaman Tenneti 
3*f0687c8aSRaman Tenneti #include "drmobject.h"
4*f0687c8aSRaman Tenneti #include "pixelformats.h"
5*f0687c8aSRaman Tenneti 
6*f0687c8aSRaman Tenneti namespace kms
7*f0687c8aSRaman Tenneti {
8*f0687c8aSRaman Tenneti enum class CpuAccess {
9*f0687c8aSRaman Tenneti 	Read,
10*f0687c8aSRaman Tenneti 	Write,
11*f0687c8aSRaman Tenneti 	ReadWrite,
12*f0687c8aSRaman Tenneti };
13*f0687c8aSRaman Tenneti 
14*f0687c8aSRaman Tenneti class IFramebuffer
15*f0687c8aSRaman Tenneti {
16*f0687c8aSRaman Tenneti public:
~IFramebuffer()17*f0687c8aSRaman Tenneti 	virtual ~IFramebuffer() {}
18*f0687c8aSRaman Tenneti 
19*f0687c8aSRaman Tenneti 	virtual uint32_t width() const = 0;
20*f0687c8aSRaman Tenneti 	virtual uint32_t height() const = 0;
21*f0687c8aSRaman Tenneti 
format()22*f0687c8aSRaman Tenneti 	virtual PixelFormat format() const { throw std::runtime_error("not implemented"); }
num_planes()23*f0687c8aSRaman Tenneti 	virtual unsigned num_planes() const { throw std::runtime_error("not implemented"); }
24*f0687c8aSRaman Tenneti 
stride(unsigned plane)25*f0687c8aSRaman Tenneti 	virtual uint32_t stride(unsigned plane) const { throw std::runtime_error("not implemented"); }
size(unsigned plane)26*f0687c8aSRaman Tenneti 	virtual uint32_t size(unsigned plane) const { throw std::runtime_error("not implemented"); }
offset(unsigned plane)27*f0687c8aSRaman Tenneti 	virtual uint32_t offset(unsigned plane) const { throw std::runtime_error("not implemented"); }
map(unsigned plane)28*f0687c8aSRaman Tenneti 	virtual uint8_t* map(unsigned plane) { throw std::runtime_error("not implemented"); }
prime_fd(unsigned plane)29*f0687c8aSRaman Tenneti 	virtual int prime_fd(unsigned plane) { throw std::runtime_error("not implemented"); }
30*f0687c8aSRaman Tenneti 
begin_cpu_access(CpuAccess access)31*f0687c8aSRaman Tenneti 	virtual void begin_cpu_access(CpuAccess access) {}
end_cpu_access()32*f0687c8aSRaman Tenneti 	virtual void end_cpu_access() {}
33*f0687c8aSRaman Tenneti };
34*f0687c8aSRaman Tenneti 
35*f0687c8aSRaman Tenneti class Framebuffer : public DrmObject, public IFramebuffer
36*f0687c8aSRaman Tenneti {
37*f0687c8aSRaman Tenneti public:
38*f0687c8aSRaman Tenneti 	Framebuffer(Card& card, uint32_t id);
39*f0687c8aSRaman Tenneti 	~Framebuffer() override;
40*f0687c8aSRaman Tenneti 
width()41*f0687c8aSRaman Tenneti 	uint32_t width() const override { return m_width; }
height()42*f0687c8aSRaman Tenneti 	uint32_t height() const override { return m_height; }
43*f0687c8aSRaman Tenneti 
44*f0687c8aSRaman Tenneti 	void flush();
45*f0687c8aSRaman Tenneti 
46*f0687c8aSRaman Tenneti protected:
47*f0687c8aSRaman Tenneti 	Framebuffer(Card& card, uint32_t width, uint32_t height);
48*f0687c8aSRaman Tenneti 
49*f0687c8aSRaman Tenneti private:
50*f0687c8aSRaman Tenneti 	uint32_t m_width;
51*f0687c8aSRaman Tenneti 	uint32_t m_height;
52*f0687c8aSRaman Tenneti };
53*f0687c8aSRaman Tenneti 
54*f0687c8aSRaman Tenneti } // namespace kms
55