12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // Copyright 2014 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_IO_SURFACE_H_
- #define GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_IO_SURFACE_H_
- #include <unordered_map>
- #include <utility>
- #include <IOSurface/IOSurface.h>
- #include "base/mac/scoped_cftyperef.h"
- #include "base/memory/ref_counted.h"
- #include "base/synchronization/lock.h"
- #include "gpu/command_buffer/service/image_factory.h"
- #include "gpu/ipc/service/gpu_ipc_service_export.h"
- #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
- #include "ui/gfx/geometry/size.h"
- #include "ui/gfx/gpu_memory_buffer.h"
- #include "ui/gfx/mac/io_surface.h"
- namespace gl {
- class GLImage;
- }
- namespace gpu {
- class GPU_IPC_SERVICE_EXPORT GpuMemoryBufferFactoryIOSurface
- : public GpuMemoryBufferFactory,
- public ImageFactory {
- public:
- GpuMemoryBufferFactoryIOSurface();
- GpuMemoryBufferFactoryIOSurface(const GpuMemoryBufferFactoryIOSurface&) =
- delete;
- GpuMemoryBufferFactoryIOSurface& operator=(
- const GpuMemoryBufferFactoryIOSurface&) = delete;
- ~GpuMemoryBufferFactoryIOSurface() override;
- // Overridden from GpuMemoryBufferFactory:
- gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer(
- gfx::GpuMemoryBufferId id,
- const gfx::Size& size,
- const gfx::Size& framebuffer_size,
- gfx::BufferFormat format,
- gfx::BufferUsage usage,
- int client_id,
- SurfaceHandle surface_handle) override;
- void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
- int client_id) override;
- bool FillSharedMemoryRegionWithBufferContents(
- gfx::GpuMemoryBufferHandle buffer_handle,
- base::UnsafeSharedMemoryRegion shared_memory) override;
- ImageFactory* AsImageFactory() override;
- // Overridden from ImageFactory:
- scoped_refptr<gl::GLImage> CreateImageForGpuMemoryBuffer(
- gfx::GpuMemoryBufferHandle handle,
- const gfx::Size& size,
- gfx::BufferFormat format,
- const gfx::ColorSpace& color_space,
- gfx::BufferPlane plane,
- int client_id,
- SurfaceHandle surface_handle) override;
- bool SupportsCreateAnonymousImage() const override;
- scoped_refptr<gl::GLImage> CreateAnonymousImage(const gfx::Size& size,
- gfx::BufferFormat format,
- gfx::BufferUsage usage,
- SurfaceHandle surface_handle,
- bool* is_cleared) override;
- unsigned RequiredTextureType() override;
- bool SupportsFormatRGB() override;
- private:
- typedef std::pair<gfx::IOSurfaceId, int> IOSurfaceMapKey;
- typedef std::unordered_map<IOSurfaceMapKey,
- base::ScopedCFTypeRef<IOSurfaceRef>>
- IOSurfaceMap;
- IOSurfaceMap io_surfaces_;
- base::Lock io_surfaces_lock_;
- };
- } // namespace gpu
- #endif // GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_IO_SURFACE_H_
|