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 |