123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- // 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_NATIVE_PIXMAP_H_
- #define GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_NATIVE_PIXMAP_H_
- #include <vulkan/vulkan_core.h>
- #include <unordered_map>
- #include <utility>
- #include "base/hash/hash.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/native_pixmap.h"
- namespace gl {
- class GLImage;
- }
- namespace gpu {
- class GPU_IPC_SERVICE_EXPORT GpuMemoryBufferFactoryNativePixmap
- : public GpuMemoryBufferFactory,
- public ImageFactory {
- public:
- GpuMemoryBufferFactoryNativePixmap();
- explicit GpuMemoryBufferFactoryNativePixmap(
- viz::VulkanContextProvider* vulkan_context_provider);
- GpuMemoryBufferFactoryNativePixmap(
- const GpuMemoryBufferFactoryNativePixmap&) = delete;
- GpuMemoryBufferFactoryNativePixmap& operator=(
- const GpuMemoryBufferFactoryNativePixmap&) = delete;
- ~GpuMemoryBufferFactoryNativePixmap() 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 CreateGpuMemoryBufferAsync(
- gfx::GpuMemoryBufferId id,
- const gfx::Size& size,
- gfx::BufferFormat format,
- gfx::BufferUsage usage,
- int client_id,
- SurfaceHandle surface_handle,
- CreateGpuMemoryBufferAsyncCallback callback) 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;
- private:
- using NativePixmapMapKey = std::pair<int, int>;
- using NativePixmapMapKeyHash = base::IntPairHash<NativePixmapMapKey>;
- using NativePixmapMap = std::unordered_map<NativePixmapMapKey,
- scoped_refptr<gfx::NativePixmap>,
- NativePixmapMapKeyHash>;
- static void OnNativePixmapCreated(
- gfx::GpuMemoryBufferId id,
- const gfx::Size& size,
- gfx::BufferFormat format,
- gfx::BufferUsage usage,
- int client_id,
- CreateGpuMemoryBufferAsyncCallback callback,
- base::WeakPtr<GpuMemoryBufferFactoryNativePixmap> weak_ptr,
- scoped_refptr<gfx::NativePixmap> pixmap);
- gfx::GpuMemoryBufferHandle CreateGpuMemoryBufferFromNativePixmap(
- gfx::GpuMemoryBufferId id,
- const gfx::Size& size,
- gfx::BufferFormat format,
- gfx::BufferUsage usage,
- int client_id,
- scoped_refptr<gfx::NativePixmap> pixmap);
- VkDevice GetVulkanDevice();
- scoped_refptr<viz::VulkanContextProvider> vulkan_context_provider_;
- NativePixmapMap native_pixmaps_;
- base::Lock native_pixmaps_lock_;
- base::WeakPtrFactory<GpuMemoryBufferFactoryNativePixmap> weak_factory_{this};
- };
- } // namespace gpu
- #endif // GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_NATIVE_PIXMAP_H_
|