gpu_memory_buffer_factory_dxgi.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. #ifndef GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_DXGI_H_
  5. #define GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_DXGI_H_
  6. #include <d3d11_1.h>
  7. #include <dxgi.h>
  8. #include <wrl/client.h>
  9. #include "base/memory/ref_counted.h"
  10. #include "base/synchronization/lock.h"
  11. #include "base/threading/thread_checker.h"
  12. #include "gpu/command_buffer/service/image_factory.h"
  13. #include "gpu/ipc/service/gpu_ipc_service_export.h"
  14. #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
  15. #include "ui/gfx/geometry/size.h"
  16. #include "ui/gl/gl_image_dxgi.h"
  17. namespace gl {
  18. class GLImage;
  19. }
  20. namespace gpu {
  21. class GPU_IPC_SERVICE_EXPORT GpuMemoryBufferFactoryDXGI
  22. : public GpuMemoryBufferFactory,
  23. public ImageFactory {
  24. public:
  25. GpuMemoryBufferFactoryDXGI();
  26. ~GpuMemoryBufferFactoryDXGI() override;
  27. GpuMemoryBufferFactoryDXGI(const GpuMemoryBufferFactoryDXGI&) = delete;
  28. GpuMemoryBufferFactoryDXGI& operator=(const GpuMemoryBufferFactoryDXGI&) =
  29. delete;
  30. // Overridden from GpuMemoryBufferFactory:
  31. gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer(
  32. gfx::GpuMemoryBufferId id,
  33. const gfx::Size& size,
  34. const gfx::Size& framebuffer_size,
  35. gfx::BufferFormat format,
  36. gfx::BufferUsage usage,
  37. int client_id,
  38. SurfaceHandle surface_handle) override;
  39. void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
  40. int client_id) override;
  41. bool FillSharedMemoryRegionWithBufferContents(
  42. gfx::GpuMemoryBufferHandle buffer_handle,
  43. base::UnsafeSharedMemoryRegion shared_memory) override;
  44. ImageFactory* AsImageFactory() override;
  45. // Overridden from ImageFactory:
  46. scoped_refptr<gl::GLImage> CreateImageForGpuMemoryBuffer(
  47. gfx::GpuMemoryBufferHandle handle,
  48. const gfx::Size& size,
  49. gfx::BufferFormat format,
  50. const gfx::ColorSpace& color_space,
  51. gfx::BufferPlane plane,
  52. int client_id,
  53. SurfaceHandle surface_handle) override;
  54. unsigned RequiredTextureType() override;
  55. bool SupportsFormatRGB() override;
  56. private:
  57. Microsoft::WRL::ComPtr<ID3D11Device> GetOrCreateD3D11Device();
  58. Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device_;
  59. Microsoft::WRL::ComPtr<ID3D11Texture2D> staging_texture_;
  60. THREAD_CHECKER(thread_checker_);
  61. };
  62. } // namespace gpu
  63. #endif // GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_DXGI_H_