Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(397)

Unified Diff: ui/ozone/platform/drm/gpu/gbm_buffer.cc

Issue 2623963002: ozone: Allocate scanout buffers according to KMS modifiers. (Closed)
Patch Set: Remove unused modifier_. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/ozone/platform/drm/gpu/gbm_buffer.h ('k') | ui/ozone/platform/drm/gpu/gbm_buffer_base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/ozone/platform/drm/gpu/gbm_buffer.cc
diff --git a/ui/ozone/platform/drm/gpu/gbm_buffer.cc b/ui/ozone/platform/drm/gpu/gbm_buffer.cc
index de628ac8007d89274d1472f5118bc4c130671000..ebd499fa7662f3b7ecdbb5e29cfac16d6b38cc3b 100644
--- a/ui/ozone/platform/drm/gpu/gbm_buffer.cc
+++ b/ui/ozone/platform/drm/gpu/gbm_buffer.cc
@@ -30,10 +30,13 @@ GbmBuffer::GbmBuffer(const scoped_refptr<GbmDevice>& gbm,
gbm_bo* bo,
uint32_t format,
uint32_t flags,
+ uint64_t modifier,
+ uint32_t addfb_flags,
std::vector<base::ScopedFD>&& fds,
const gfx::Size& size,
+
const std::vector<gfx::NativePixmapPlane>&& planes)
- : GbmBufferBase(gbm, bo, format, flags),
+ : GbmBufferBase(gbm, bo, format, flags, modifier, addfb_flags),
format_(format),
flags_(flags),
fds_(std::move(fds)),
@@ -91,17 +94,14 @@ gfx::Size GbmBuffer::GetSize() const {
return size_;
}
-// static
-scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer(
+scoped_refptr<GbmBuffer> GbmBuffer::CreateBufferForBO(
const scoped_refptr<GbmDevice>& gbm,
+ gbm_bo* bo,
uint32_t format,
const gfx::Size& size,
- uint32_t flags) {
- TRACE_EVENT2("drm", "GbmBuffer::CreateBuffer", "device",
- gbm->device_path().value(), "size", size.ToString());
-
- gbm_bo* bo =
- gbm_bo_create(gbm->device(), size.width(), size.height(), format, flags);
+ uint32_t flags,
+ uint64_t modifier,
+ uint32_t addfb_flags) {
if (!bo)
return nullptr;
@@ -128,8 +128,9 @@ scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer(
gbm_bo_get_plane_stride(bo, i), gbm_bo_get_plane_offset(bo, i),
gbm_bo_get_plane_size(bo, i), gbm_bo_get_plane_format_modifier(bo, i));
}
- scoped_refptr<GbmBuffer> buffer(new GbmBuffer(
- gbm, bo, format, flags, std::move(fds), size, std::move(planes)));
+ scoped_refptr<GbmBuffer> buffer(
+ new GbmBuffer(gbm, bo, format, flags, modifier, addfb_flags,
+ std::move(fds), size, std::move(planes)));
if (flags & GBM_BO_USE_SCANOUT && !buffer->GetFramebufferId())
return nullptr;
@@ -137,6 +138,40 @@ scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer(
}
// static
+scoped_refptr<GbmBuffer> GbmBuffer::CreateBufferWithModifiers(
+ const scoped_refptr<GbmDevice>& gbm,
+ uint32_t format,
+ const gfx::Size& size,
+ uint32_t flags,
+ const std::vector<uint64_t>& modifiers) {
+ TRACE_EVENT2("drm", "GbmBuffer::CreateBufferWithModifiers", "device",
+ gbm->device_path().value(), "size", size.ToString());
+
+ gbm_bo* bo =
+ gbm_bo_create_with_modifiers(gbm->device(), size.width(), size.height(),
+ format, modifiers.data(), modifiers.size());
+
+ return CreateBufferForBO(gbm, bo, format, size, flags,
+ gbm_bo_get_format_modifier(bo),
+ DRM_MODE_FB_MODIFIERS);
+}
+
+// static
+scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer(
+ const scoped_refptr<GbmDevice>& gbm,
+ uint32_t format,
+ const gfx::Size& size,
+ uint32_t flags) {
+ TRACE_EVENT2("drm", "GbmBuffer::CreateBuffer", "device",
+ gbm->device_path().value(), "size", size.ToString());
+
+ gbm_bo* bo =
+ gbm_bo_create(gbm->device(), size.width(), size.height(), format, flags);
+
+ return CreateBufferForBO(gbm, bo, format, size, flags, 0, 0);
+}
+
+// static
scoped_refptr<GbmBuffer> GbmBuffer::CreateBufferFromFds(
const scoped_refptr<GbmDevice>& gbm,
uint32_t format,
@@ -177,7 +212,7 @@ scoped_refptr<GbmBuffer> GbmBuffer::CreateBufferFromFds(
if (use_scanout)
flags |= GBM_BO_USE_SCANOUT;
scoped_refptr<GbmBuffer> buffer(new GbmBuffer(
- gbm, bo, format, flags, std::move(fds), size, std::move(planes)));
+ gbm, bo, format, flags, 0, 0, std::move(fds), size, std::move(planes)));
// If scanout support for buffer is expected then make sure we managed to
// create a framebuffer for it as otherwise using it for scanout will fail.
if (use_scanout && !buffer->GetFramebufferId())
« no previous file with comments | « ui/ozone/platform/drm/gpu/gbm_buffer.h ('k') | ui/ozone/platform/drm/gpu/gbm_buffer_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698