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

Unified Diff: ui/ozone/platform/drm/common/native_pixmap_manager_gbm.cc

Issue 1134993003: ozone: Implement zero/one-copy texture for Ozone GBM. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase to new crrev.com/1128113011 Created 5 years, 6 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
Index: ui/ozone/platform/drm/common/native_pixmap_manager_gbm.cc
diff --git a/ui/ozone/platform/drm/common/native_pixmap_manager_gbm.cc b/ui/ozone/platform/drm/common/native_pixmap_manager_gbm.cc
index ee6fcebca33e0c7f03b54e4e30a53937c2c692f2..4b0c4e6a25a604f3ae75ce8c86e339440d8a6616 100644
--- a/ui/ozone/platform/drm/common/native_pixmap_manager_gbm.cc
+++ b/ui/ozone/platform/drm/common/native_pixmap_manager_gbm.cc
@@ -5,9 +5,27 @@
#include "ui/ozone/platform/drm/common/native_pixmap_manager_gbm.h"
#include "base/file_descriptor_posix.h"
+#include "ui/ozone/platform/drm/gpu/vgem_pixmap.h"
namespace ui {
+namespace {
+
+NativePixmap::BufferUsage NativePixmapBufferUsageFromSurfaceFactoryOzone(
+ SurfaceFactoryOzone::BufferUsage usage) {
+ switch (usage) {
+ case SurfaceFactoryOzone::MAP:
+ return NativePixmap::MAP;
+ case SurfaceFactoryOzone::PERSISTENT_MAP:
+ return NativePixmap::PERSISTENT_MAP;
+ case SurfaceFactoryOzone::SCANOUT:
+ return NativePixmap::SCANOUT;
+ }
+ NOTREACHED();
+ return NativePixmap::SCANOUT;
+}
+}
+
NativePixmapManager* CreateNativePixmapManagerGbm() {
return new NativePixmapManagerGbm();
}
@@ -29,7 +47,26 @@ NativePixmapManagerGbm::GetSupportedNativePixmapConfigurations() const {
std::vector<Configuration> configurations = {
{SurfaceFactoryOzone::BGRA_8888, SurfaceFactoryOzone::SCANOUT},
{SurfaceFactoryOzone::RGBX_8888, SurfaceFactoryOzone::SCANOUT}};
+ // Map requires VGEM supports.
+ if (vgem_fd_.is_valid()) {
+ configurations.push_back(
+ {SurfaceFactoryOzone::BGRA_8888, SurfaceFactoryOzone::MAP});
+ }
return configurations;
}
+scoped_refptr<NativePixmap> NativePixmapManagerGbm::CreateFromFileDescriptor(
+ base::FileDescriptor handle,
+ gfx::Size size,
+ SurfaceFactoryOzone::BufferFormat format,
+ SurfaceFactoryOzone::BufferUsage usage) {
+ scoped_refptr<VgemPixmap> pixmap(new VgemPixmap(
+ handle, base::FileDescriptor(vgem_fd_.get(), false), size, format,
+ NativePixmapBufferUsageFromSurfaceFactoryOzone(usage)));
+ if (!pixmap->Initialize())
+ return nullptr;
+
+ return pixmap;
+}
+
} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698