diff --git a/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc b/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc index b1ebc1544ea19..8cd70229c25b3 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc @@ -357,6 +357,31 @@ class SharedImageRepresentationGLTexturePassthroughImpl scoped_refptr<gles2::TexturePassthrough> texture_passthrough_; }; +class SharedImageRepresentationOverlayImpl + : public SharedImageRepresentationOverlay { + public: + SharedImageRepresentationOverlayImpl(SharedImageManager* manager, + SharedImageBacking* backing, + MemoryTypeTracker* tracker, + gl::GLImage* gl_image) + : SharedImageRepresentationOverlay(manager, backing, tracker), + gl_image_(gl_image) {} + ~SharedImageRepresentationOverlayImpl() override = default; + +#if defined(OS_ANDROID) + void NotifyOverlayPromotion(bool promotion, + const gfx::Rect& bounds) override { + NOTIMPLEMENTED() << "Promotion hints are only required for media overlays"; + } +#endif + bool BeginReadAccess() override { return true; } + void EndReadAccess() override {} + gl::GLImage* GetGLImage() override { return gl_image_; } + + private: + gl::GLImage* gl_image_; +}; + class SharedImageBackingWithReadAccess : public SharedImageBacking { public: SharedImageBackingWithReadAccess(const Mailbox& mailbox, @@ -610,6 +635,20 @@ class SharedImageBackingGLTexture : public SharedImageBackingWithReadAccess { manager, this, tracker, texture_); } + std::unique_ptr<SharedImageRepresentationOverlay> ProduceOverlay( + SharedImageManager* manager, + MemoryTypeTracker* tracker) override { + gl::GLImage* image = + texture_->GetLevelImage(texture_->target(), 0, nullptr); + if (!image) { + LOG(ERROR) + << "Trying to create overlay representation from a native GL texture"; + return nullptr; + } + return std::make_unique<SharedImageRepresentationOverlayImpl>( + manager, this, tracker, image); + } + std::unique_ptr<SharedImageRepresentationGLTexture> ProduceRGBEmulationGLTexture(SharedImageManager* manager, MemoryTypeTracker* tracker) override {