Index: components/exo/display.cc |
diff --git a/components/exo/display.cc b/components/exo/display.cc |
index b13c7fe828224065966c2dc9e8bd5422c79a5567..51a353ace0d2c9d435c6338a5e7c62150b84f46f 100644 |
--- a/components/exo/display.cc |
+++ b/components/exo/display.cc |
@@ -11,6 +11,14 @@ |
#include "components/exo/sub_surface.h" |
#include "components/exo/surface.h" |
+#if defined(USE_OZONE) |
+#include "components/exo/buffer.h" |
+#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |
+#include "third_party/khronos/GLES2/gl2.h" |
+#include "third_party/khronos/GLES2/gl2ext.h" |
+#include "ui/aura/env.h" |
+#endif |
+ |
namespace exo { |
//////////////////////////////////////////////////////////////////////////////// |
@@ -37,6 +45,33 @@ scoped_ptr<SharedMemory> Display::CreateSharedMemory( |
return make_scoped_ptr(new SharedMemory(handle)); |
} |
+#if defined(USE_OZONE) |
+scoped_ptr<Buffer> Display::CreatePrimeBuffer(base::ScopedFD fd, |
+ const gfx::Size& size, |
+ gfx::BufferFormat format, |
+ int stride) { |
+ TRACE_EVENT1("exo", "Display::CreatePrimeBuffer", "size", size.ToString()); |
+ |
+ gfx::GpuMemoryBufferHandle handle; |
+ handle.type = gfx::OZONE_NATIVE_PIXMAP; |
+ handle.native_pixmap_handle.fd = base::FileDescriptor(fd.Pass()); |
+ handle.native_pixmap_handle.stride = stride; |
+ |
+ scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer = |
+ aura::Env::GetInstance() |
+ ->context_factory() |
+ ->GetGpuMemoryBufferManager() |
+ ->CreateGpuMemoryBufferFromHandle(handle, size, format); |
+ if (!gpu_memory_buffer) { |
+ LOG(ERROR) << "Failed to create GpuMemoryBuffer from handle"; |
+ return nullptr; |
+ } |
+ |
+ return make_scoped_ptr( |
+ new Buffer(gpu_memory_buffer.Pass(), GL_TEXTURE_EXTERNAL_OES)); |
+} |
+#endif |
+ |
scoped_ptr<ShellSurface> Display::CreateShellSurface(Surface* surface) { |
TRACE_EVENT1("exo", "Display::CreateShellSurface", "surface", |
surface->AsTracedValue()); |