summaryrefslogtreecommitdiff
path: root/kms++
diff options
context:
space:
mode:
Diffstat (limited to 'kms++')
-rw-r--r--kms++/inc/kms++/omap/omapframebuffer.h6
-rw-r--r--kms++/src/omap/omapframebuffer.cpp13
2 files changed, 10 insertions, 9 deletions
diff --git a/kms++/inc/kms++/omap/omapframebuffer.h b/kms++/inc/kms++/omap/omapframebuffer.h
index 9b628f4..d23e5ba 100644
--- a/kms++/inc/kms++/omap/omapframebuffer.h
+++ b/kms++/inc/kms++/omap/omapframebuffer.h
@@ -10,8 +10,8 @@ class OmapCard;
class OmapFramebuffer : public MappedFramebuffer
{
public:
- OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, const std::string& fourcc);
- OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, PixelFormat format);
+ OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, const std::string& fourcc, bool cached = false);
+ OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, PixelFormat format, bool cached = false);
virtual ~OmapFramebuffer();
uint32_t width() const { return Framebuffer::width(); }
@@ -37,7 +37,7 @@ private:
uint8_t* map;
};
- void Create();
+ void Create(bool cached);
void Destroy();
unsigned m_num_planes;
diff --git a/kms++/src/omap/omapframebuffer.cpp b/kms++/src/omap/omapframebuffer.cpp
index 312552c..0c8489e 100644
--- a/kms++/src/omap/omapframebuffer.cpp
+++ b/kms++/src/omap/omapframebuffer.cpp
@@ -19,15 +19,15 @@ using namespace std;
namespace kms
{
-OmapFramebuffer::OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, const string& fourcc)
- : OmapFramebuffer(card, width, height, FourCCToPixelFormat(fourcc))
+OmapFramebuffer::OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, const string& fourcc, bool cached)
+ : OmapFramebuffer(card, width, height, FourCCToPixelFormat(fourcc), cached)
{
}
-OmapFramebuffer::OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, PixelFormat format)
+OmapFramebuffer::OmapFramebuffer(OmapCard& card, uint32_t width, uint32_t height, PixelFormat format, bool cached)
: MappedFramebuffer(card, width, height), m_format(format)
{
- Create();
+ Create(cached);
}
OmapFramebuffer::~OmapFramebuffer()
@@ -35,7 +35,7 @@ OmapFramebuffer::~OmapFramebuffer()
Destroy();
}
-void OmapFramebuffer::Create()
+void OmapFramebuffer::Create(bool cached)
{
const PixelFormatInfo& format_info = get_pixel_format_info(m_format);
@@ -49,8 +49,9 @@ void OmapFramebuffer::Create()
uint32_t size = stride * height();
struct drm_omap_gem_new creq = {
.size = { .bytes = size },
- .flags = OMAP_BO_SCANOUT | OMAP_BO_WC,
};
+ creq.flags = (cached ? OMAP_BO_CACHED : OMAP_BO_WC)
+ | OMAP_BO_SCANOUT;
int r = drmIoctl(card().fd(), DRM_IOCTL_OMAP_GEM_NEW, &creq);
if (r)
throw invalid_argument(string("DRM_IOCTL_OMAP_GEM_NEW failed: ") + strerror(errno));