| Index: gpu/ipc/service/gpu_memory_buffer_factory_win.cc | 
| diff --git a/gpu/ipc/service/gpu_memory_buffer_factory_win.cc b/gpu/ipc/service/gpu_memory_buffer_factory_win.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..78bc326fd5807174767ea1326e237dcfa763641b | 
| --- /dev/null | 
| +++ b/gpu/ipc/service/gpu_memory_buffer_factory_win.cc | 
| @@ -0,0 +1,80 @@ | 
| + | 
| +// Copyright 2017 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/service/gpu_memory_buffer_factory_win.h" | 
| + | 
| +#include "gpu/ipc/service/gl_image_direct_composition.h" | 
| + | 
| +namespace gpu { | 
| + | 
| +GpuMemoryBufferFactoryWin::GpuMemoryBufferFactoryWin() {} | 
| + | 
| +GpuMemoryBufferFactoryWin::~GpuMemoryBufferFactoryWin() {} | 
| + | 
| +gfx::GpuMemoryBufferHandle GpuMemoryBufferFactoryWin::CreateGpuMemoryBuffer( | 
| +    gfx::GpuMemoryBufferId id, | 
| +    const gfx::Size& size, | 
| +    gfx::BufferFormat format, | 
| +    gfx::BufferUsage usage, | 
| +    int client_id, | 
| +    SurfaceHandle surface_handle) { | 
| +  base::AutoLock lock(lock_); | 
| +  gfx::GpuMemoryBufferHandle handle; | 
| +  handle.type = gfx::DIRECT_COMPOSITION; | 
| +  handle.id = id; | 
| +  UsageMapKey key(id, client_id); | 
| +  usage_map_[key] = usage; | 
| + | 
| +  return handle; | 
| +} | 
| + | 
| +void GpuMemoryBufferFactoryWin::DestroyGpuMemoryBuffer( | 
| +    gfx::GpuMemoryBufferId id, | 
| +    int client_id) { | 
| +  base::AutoLock lock(lock_); | 
| +  UsageMapKey key(id, client_id); | 
| +  usage_map_.erase(key); | 
| +} | 
| + | 
| +ImageFactory* GpuMemoryBufferFactoryWin::AsImageFactory() { | 
| +  return this; | 
| +} | 
| + | 
| +// Overridden from ImageFactory: | 
| +scoped_refptr<gl::GLImage> | 
| +GpuMemoryBufferFactoryWin::CreateImageForGpuMemoryBuffer( | 
| +    const gfx::GpuMemoryBufferHandle& handle, | 
| +    const gfx::Size& size, | 
| +    gfx::BufferFormat format, | 
| +    unsigned internalformat, | 
| +    int client_id, | 
| +    SurfaceHandle surface_handle) { | 
| +  base::AutoLock lock(lock_); | 
| +  UsageMapKey key(handle.id, client_id); | 
| +  auto it = usage_map_.find(key); | 
| +  if (it == usage_map_.end()) | 
| +    return nullptr; | 
| + | 
| +  gfx::BufferUsage usage = it->second; | 
| +  return make_scoped_refptr(new GLImageDirectComposition(size, format, usage)); | 
| +} | 
| + | 
| +scoped_refptr<gl::GLImage> GpuMemoryBufferFactoryWin::CreateAnonymousImage( | 
| +    const gfx::Size& size, | 
| +    gfx::BufferFormat format, | 
| +    unsigned internalformat) { | 
| +  NOTIMPLEMENTED(); | 
| +  return nullptr; | 
| +} | 
| + | 
| +unsigned GpuMemoryBufferFactoryWin::RequiredTextureType() { | 
| +  return GL_TEXTURE_2D; | 
| +} | 
| + | 
| +bool GpuMemoryBufferFactoryWin::SupportsFormatRGB() { | 
| +  return false; | 
| +} | 
| + | 
| +}  // namespace gpu | 
|  |