text: // Copyright 2018 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_COMMAND_BUFFER_SERVICE_WRAPPED_SK_IMAGE_H_
  #define GPU_COMMAND_BUFFER_SERVICE_WRAPPED_SK_IMAGE_H_
  
  #include <memory>
  
  #include "base/macros.h"
  #include "components/viz/common/resources/resource_format.h"
  #include "gpu/command_buffer/service/shared_image_backing_factory.h"
  #include "gpu/command_buffer/service/texture_base.h"
  #include "gpu/gpu_gles2_export.h"
  #include "third_party/skia/include/core/SkImage.h"
  #include "ui/gfx/geometry/size.h"
  
  namespace gpu {
  
  class SharedContextState;
  
  namespace raster {
  
  class GPU_GLES2_EXPORT WrappedSkImageFactory
      : public gpu::SharedImageBackingFactory {
   public:
    explicit WrappedSkImageFactory(
        scoped_refptr<SharedContextState> context_state);
    ~WrappedSkImageFactory() override;
  
    // SharedImageBackingFactory implementation:
    std::unique_ptr<SharedImageBacking> CreateSharedImage(
        const Mailbox& mailbox,
        viz::ResourceFormat format,
        SurfaceHandle surface_handle,
        const gfx::Size& size,
        const gfx::ColorSpace& color_space,
        GrSurfaceOrigin surface_origin,
        SkAlphaType alpha_type,
        uint32_t usage,
        bool is_thread_safe) override;
    std::unique_ptr<SharedImageBacking> CreateSharedImage(
        const Mailbox& mailbox,
        viz::ResourceFormat format,
        const gfx::Size& size,
        const gfx::ColorSpace& color_space,
        GrSurfaceOrigin surface_origin,
        SkAlphaType alpha_type,
        uint32_t usage,
        base::span<const uint8_t> pixel_data) override;
    std::unique_ptr<SharedImageBacking> CreateSharedImage(
        const Mailbox& mailbox,
        int client_id,
        gfx::GpuMemoryBufferHandle handle,
        gfx::BufferFormat format,
        gfx::BufferPlane plane,
        SurfaceHandle surface_handle,
        const gfx::Size& size,
        const gfx::ColorSpace& color_space,
        GrSurfaceOrigin surface_origin,
        SkAlphaType alpha_type,
        uint32_t usage) override;
    bool IsSupported(uint32_t usage,
                     viz::ResourceFormat format,
                     bool thread_safe,
                     gfx::GpuMemoryBufferType gmb_type,
                     GrContextType gr_context_type,
                     bool* allow_legacy_mailbox) override;
  
   private:
    bool CanImportGpuMemoryBuffer(gfx::GpuMemoryBufferType memory_buffer_type);
    bool CanUseWrappedSkImage(uint32_t usage,
                              GrContextType gr_context_type) const;
  
    scoped_refptr<SharedContextState> context_state_;
  
    DISALLOW_COPY_AND_ASSIGN(WrappedSkImageFactory);
  };
  
  }  // namespace raster
  }  // namespace gpu
  
  #endif  // GPU_COMMAND_BUFFER_SERVICE_WRAPPED_SK_IMAGE_H_
  