1 // Copyright 2017 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 #ifndef GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_DXGI_H_
6 #define GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_DXGI_H_
7 
8 #include <utility>
9 
10 #include <D3D11.h>
11 #include <DXGI.h>
12 
13 #include "base/macros.h"
14 #include "base/memory/ref_counted.h"
15 #include "base/synchronization/lock.h"
16 #include "gpu/command_buffer/service/image_factory.h"
17 #include "gpu/ipc/service/gpu_ipc_service_export.h"
18 #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
19 #include "ui/gfx/geometry/size.h"
20 #include "ui/gl/gl_image_dxgi.h"
21 
22 namespace gl {
23 class GLImage;
24 }
25 
26 namespace gpu {
27 
28 class GPU_IPC_SERVICE_EXPORT GpuMemoryBufferFactoryDXGI
29     : public GpuMemoryBufferFactory,
30       public ImageFactory {
31  public:
32   GpuMemoryBufferFactoryDXGI();
33   ~GpuMemoryBufferFactoryDXGI() override;
34 
35   // Overridden from GpuMemoryBufferFactory:
36   gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer(
37       gfx::GpuMemoryBufferId id,
38       const gfx::Size& size,
39       const gfx::Size& framebuffer_size,
40       gfx::BufferFormat format,
41       gfx::BufferUsage usage,
42       int client_id,
43       SurfaceHandle surface_handle) override;
44   void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
45                               int client_id) override;
46   ImageFactory* AsImageFactory() override;
47 
48   // Overridden from ImageFactory:
49   scoped_refptr<gl::GLImage> CreateImageForGpuMemoryBuffer(
50       gfx::GpuMemoryBufferHandle handle,
51       const gfx::Size& size,
52       gfx::BufferFormat format,
53       int client_id,
54       SurfaceHandle surface_handle) override;
55   unsigned RequiredTextureType() override;
56   bool SupportsFormatRGB() override;
57 
58  private:
59   DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferFactoryDXGI);
60 };
61 
62 }  // namespace gpu
63 
64 #endif  // GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_DXGI_H_
65