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