Index: content/browser/renderer_host/render_message_filter.cc |
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc |
index c5eed716df1c3f21b0a0f300e9f6a7a846406f5f..24429fdece25617a4bcaf0178c3e144d54291fcb 100644 |
--- a/content/browser/renderer_host/render_message_filter.cc |
+++ b/content/browser/renderer_host/render_message_filter.cc |
@@ -1254,14 +1254,17 @@ void RenderMessageFilter::OnAllocateGpuMemoryBuffer( |
uint32 width, |
uint32 height, |
uint32 internalformat, |
+ uint32 usage, |
gfx::GpuMemoryBufferHandle* handle) { |
- if (!GpuMemoryBufferImpl::IsFormatValid(internalformat)) { |
+ if (!GpuMemoryBufferImpl::IsFormatValid(internalformat) || |
+ !GpuMemoryBufferImpl::IsUsageValid(usage)) { |
handle->type = gfx::EMPTY_BUFFER; |
return; |
} |
#if defined(OS_MACOSX) |
- if (GpuMemoryBufferImplIOSurface::IsFormatSupported(internalformat)) { |
+ if (GpuMemoryBufferImplIOSurface::IsFormatSupported(internalformat) && |
+ GpuMemoryBufferImplIOSurface::IsUsageSupported(usage)) { |
IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize(); |
if (io_surface_support) { |
base::ScopedCFTypeRef<CFMutableDictionaryRef> properties; |
@@ -1306,7 +1309,8 @@ void RenderMessageFilter::OnAllocateGpuMemoryBuffer( |
#endif |
#if defined(OS_ANDROID) |
- if (GpuMemoryBufferImplSurfaceTexture::IsFormatSupported(internalformat)) { |
+ if (GpuMemoryBufferImplSurfaceTexture::IsFormatSupported(internalformat) && |
+ GpuMemoryBufferImplSurfaceTexture::IsUsageSupported(usage)) { |
// Each surface texture is associated with a render process id. This allows |
// the GPU service and Java Binder IPC to verify that a renderer is not |
// trying to use a surface texture it doesn't own. |
@@ -1334,6 +1338,11 @@ void RenderMessageFilter::OnAllocateGpuMemoryBuffer( |
return; |
} |
+ if (!GpuMemoryBufferImpl::IsUsageSupportedForSharedMemory(usage)) { |
+ handle->type = gfx::EMPTY_BUFFER; |
+ return; |
+ } |
+ |
// Fallback to fake GpuMemoryBuffer that is backed by shared memory and |
// requires an upload before it can be used as a texture. |
handle->type = gfx::SHARED_MEMORY_BUFFER; |