Index: gpu/ipc/common/gpu_memory_buffer_support.cc |
diff --git a/gpu/ipc/common/gpu_memory_buffer_support.cc b/gpu/ipc/common/gpu_memory_buffer_support.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0d1c510f3612a82b49e7894e7a54cc3191e23421 |
--- /dev/null |
+++ b/gpu/ipc/common/gpu_memory_buffer_support.cc |
@@ -0,0 +1,74 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "gpu/ipc/common/gpu_memory_buffer_support.h" |
+ |
+#include "base/logging.h" |
+#include "build/build_config.h" |
+ |
+#if defined(USE_OZONE) |
+#include "ui/ozone/public/client_native_pixmap_factory.h" |
+#endif |
+ |
+namespace gpu { |
+ |
+gfx::GpuMemoryBufferType GetNativeGpuMemoryBufferType() { |
+#if defined(OS_MACOSX) |
+ return gfx::IO_SURFACE_BUFFER; |
+#endif |
+#if defined(OS_ANDROID) |
dcheng
2016/03/23 23:42:12
elif? Or are these not mutually exclusive?
Fady Samuel
2016/03/23 23:49:54
They are mutually exclusive. Done.
|
+ return gfx::SURFACE_TEXTURE_BUFFER; |
+#endif |
+#if defined(USE_OZONE) |
+ return gfx::OZONE_NATIVE_PIXMAP; |
+#endif |
+ return gfx::EMPTY_BUFFER; |
+} |
+ |
+bool IsNativeGpuMemoryBufferConfigurationSupported(gfx::BufferFormat format, |
+ gfx::BufferUsage usage) { |
+#if defined(OS_MACOSX) |
+ switch (usage) { |
+ case gfx::BufferUsage::GPU_READ: |
+ case gfx::BufferUsage::SCANOUT: |
+ return format == gfx::BufferFormat::BGRA_8888 || |
+ format == gfx::BufferFormat::RGBA_8888; |
+ case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE: |
+ case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT: |
+ return format == gfx::BufferFormat::R_8 || |
+ format == gfx::BufferFormat::BGRA_8888 || |
+ format == gfx::BufferFormat::UYVY_422 || |
+ format == gfx::BufferFormat::YUV_420_BIPLANAR; |
+ } |
+ NOTREACHED(); |
+ return false; |
+#endif |
dcheng
2016/03/23 23:42:12
Similar comment here about #elif
Fady Samuel
2016/03/23 23:49:54
Done.
|
+ |
+#if defined(OS_ANDROID) |
+ switch (usage) { |
+ case gfx::BufferUsage::GPU_READ: |
+ case gfx::BufferUsage::SCANOUT: |
+ case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT: |
+ return false; |
+ case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE: |
+ return format == gfx::BufferFormat::RGBA_8888; |
+ } |
+ NOTREACHED(); |
+ return false; |
+#endif |
+ |
+#if defined(USE_OZONE) |
+ if (!ui::ClientNativePixmapFactory::GetInstance()) { |
+ // unittests don't have to set ClientNativePixmapFactory. |
+ return false; |
+ } |
+ return ui::ClientNativePixmapFactory::GetInstance()->IsConfigurationSupported( |
+ format, usage); |
+#endif |
+ |
+ NOTREACHED(); |
+ return false; |
+} |
+ |
+} // namespace gpu |