gpu_memory_buffer_impl_win.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/common/gpu/client/gpu_memory_buffer_impl.h" 6 7#include "content/common/gpu/client/gpu_memory_buffer_impl_shm.h" 8 9namespace content { 10 11// static 12scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::Create( 13 const gfx::Size& size, 14 unsigned internalformat, 15 unsigned usage) { 16 if (GpuMemoryBufferImplShm::IsConfigurationSupported( 17 size, internalformat, usage)) { 18 scoped_ptr<GpuMemoryBufferImplShm> buffer( 19 new GpuMemoryBufferImplShm(size, internalformat)); 20 if (!buffer->Initialize()) 21 return scoped_ptr<GpuMemoryBufferImpl>(); 22 23 return buffer.PassAs<GpuMemoryBufferImpl>(); 24 } 25 26 return scoped_ptr<GpuMemoryBufferImpl>(); 27} 28 29// static 30void GpuMemoryBufferImpl::AllocateForChildProcess( 31 const gfx::Size& size, 32 unsigned internalformat, 33 unsigned usage, 34 base::ProcessHandle child_process, 35 const AllocationCallback& callback) { 36 if (GpuMemoryBufferImplShm::IsConfigurationSupported( 37 size, internalformat, usage)) { 38 GpuMemoryBufferImplShm::AllocateSharedMemoryForChildProcess( 39 size, internalformat, child_process, callback); 40 return; 41 } 42 43 callback.Run(gfx::GpuMemoryBufferHandle()); 44} 45 46// static 47scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle( 48 gfx::GpuMemoryBufferHandle handle, 49 const gfx::Size& size, 50 unsigned internalformat) { 51 switch (handle.type) { 52 case gfx::SHARED_MEMORY_BUFFER: { 53 scoped_ptr<GpuMemoryBufferImplShm> buffer( 54 new GpuMemoryBufferImplShm(size, internalformat)); 55 if (!buffer->InitializeFromHandle(handle)) 56 return scoped_ptr<GpuMemoryBufferImpl>(); 57 58 return buffer.PassAs<GpuMemoryBufferImpl>(); 59 } 60 default: 61 return scoped_ptr<GpuMemoryBufferImpl>(); 62 } 63} 64 65} // namespace content 66