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