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