Index: content/browser/gpu/browser_gpu_memory_buffer_manager.cc |
diff --git a/content/browser/gpu/browser_gpu_memory_buffer_manager.cc b/content/browser/gpu/browser_gpu_memory_buffer_manager.cc |
index b4b474e4d484d111461d3725380902b76ed455c1..bc0d534dfa9645ca59b6eec954deb9ca33c00564 100644 |
--- a/content/browser/gpu/browser_gpu_memory_buffer_manager.cc |
+++ b/content/browser/gpu/browser_gpu_memory_buffer_manager.cc |
@@ -29,6 +29,7 @@ |
#if defined(OS_ANDROID) |
#include "content/common/gpu/gpu_memory_buffer_factory_surface_texture.h" |
+#include "ui/gl/android/surface_texture.h" |
#endif |
#if defined(USE_OZONE) |
@@ -216,6 +217,13 @@ bool BrowserGpuMemoryBufferManager::IsNativeGpuMemoryBuffersEnabled() { |
return false; |
} |
+#if defined(OS_ANDROID) |
+ // Single buffer SurfaceTexture mode is required for native buffers on |
+ // Android. |
+ if (!gfx::SurfaceTexture::IsSingleBufferModeSupported()) |
+ return false; |
+#endif |
+ |
#if defined(OS_MACOSX) |
return !base::CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kDisableNativeGpuMemoryBuffers); |
@@ -237,16 +245,17 @@ uint32 BrowserGpuMemoryBufferManager::GetImageTextureTarget( |
} |
switch (GpuMemoryBufferFactory::GetNativeType()) { |
- case gfx::SURFACE_TEXTURE_BUFFER: |
case gfx::OZONE_NATIVE_PIXMAP: |
- // GPU memory buffers that are shared with the GL using EGLImages |
+ // GPU memory buffers that are bound to GL textures using EGLImages |
// require TEXTURE_EXTERNAL_OES. |
return GL_TEXTURE_EXTERNAL_OES; |
case gfx::IO_SURFACE_BUFFER: |
// IOSurface backed images require GL_TEXTURE_RECTANGLE_ARB. |
return GL_TEXTURE_RECTANGLE_ARB; |
- case gfx::SHARED_MEMORY_BUFFER: |
+ case gfx::SURFACE_TEXTURE_BUFFER: |
+ // GPU memory buffers that require a copy expects GL_TEXTURE_2D as target. |
return GL_TEXTURE_2D; |
+ case gfx::SHARED_MEMORY_BUFFER: |
case gfx::EMPTY_BUFFER: |
NOTREACHED(); |
return GL_TEXTURE_2D; |