Chromium Code Reviews| Index: gpu/ipc/service/gpu_memory_buffer_factory_win.h |
| diff --git a/gpu/ipc/service/gpu_memory_buffer_factory_win.h b/gpu/ipc/service/gpu_memory_buffer_factory_win.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..aa6aa575d88ca3e59089a628c1dfdee1818d3f6a |
| --- /dev/null |
| +++ b/gpu/ipc/service/gpu_memory_buffer_factory_win.h |
| @@ -0,0 +1,63 @@ |
| +// 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. |
| + |
| +#ifndef GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_WIN_H_ |
| +#define GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_WIN_H_ |
| + |
| +#include <unordered_map> |
| + |
| +#include "base/hash.h" |
| +#include "gpu/command_buffer/service/image_factory.h" |
| +#include "gpu/ipc/service/gpu_memory_buffer_factory.h" |
| +#include "ui/gl/gl_image.h" |
| + |
| +namespace gpu { |
| + |
| +class GPU_EXPORT GpuMemoryBufferFactoryWin : public GpuMemoryBufferFactory, |
| + public ImageFactory { |
| + public: |
| + GpuMemoryBufferFactoryWin(); |
| + ~GpuMemoryBufferFactoryWin() override; |
| + |
| + // Overridden from GpuMemoryBufferFactory: |
| + gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer( |
| + gfx::GpuMemoryBufferId id, |
| + const gfx::Size& size, |
| + gfx::BufferFormat format, |
| + gfx::BufferUsage usage, |
| + int client_id, |
| + SurfaceHandle surface_handle) override; |
| + void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id, |
| + int client_id) override; |
| + ImageFactory* AsImageFactory() override; |
| + |
| + // Overridden from ImageFactory: |
| + scoped_refptr<gl::GLImage> CreateImageForGpuMemoryBuffer( |
| + const gfx::GpuMemoryBufferHandle& handle, |
| + const gfx::Size& size, |
| + gfx::BufferFormat format, |
| + unsigned internalformat, |
| + int client_id, |
| + SurfaceHandle surface_handle) override; |
| + scoped_refptr<gl::GLImage> CreateAnonymousImage( |
| + const gfx::Size& size, |
| + gfx::BufferFormat format, |
| + unsigned internalformat) override; |
| + unsigned RequiredTextureType() override; |
| + bool SupportsFormatRGB() override; |
| + |
| + private: |
| + using UsageMapKey = std::pair<gfx::GpuMemoryBufferId, int>; |
| + |
| + base::Lock lock_; |
| + std:: |
| + unordered_map<UsageMapKey, gfx::BufferUsage, base_hash::hash<UsageMapKey>> |
| + usage_map_; |
|
reveman
2017/06/14 21:35:58
The factory needs to be stateless to handle GPU pr
jbauman
2017/06/14 22:18:16
I could put the buffer usage in the handle so it c
|
| + |
| + DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferFactoryWin); |
| +}; |
| + |
| +} // namespace gpu |
| + |
| +#endif // GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_WIN_H_ |