SharedSurfaceEGL.h (3486B)
1 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 4; -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef SHARED_SURFACE_EGL_H_ 7 #define SHARED_SURFACE_EGL_H_ 8 9 #include "mozilla/Attributes.h" 10 #include "mozilla/Mutex.h" 11 #include "CompositorTypes.h" 12 #include "SharedSurface.h" 13 14 #ifdef MOZ_WIDGET_ANDROID 15 # include "AndroidNativeWindow.h" 16 # include "GLLibraryEGL.h" 17 #endif 18 19 namespace mozilla { 20 namespace gl { 21 22 class EglDisplay; 23 class GLLibraryEGL; 24 25 // - 26 // EGLImage 27 28 class SharedSurface_EGLImage final : public SharedSurface { 29 mutable Mutex mMutex MOZ_UNANNOTATED; 30 EGLSync mSync = 0; 31 const std::weak_ptr<EglDisplay> mEglDisplay; 32 33 public: 34 const EGLImage mImage; 35 36 static UniquePtr<SharedSurface_EGLImage> Create(const SharedSurfaceDesc&); 37 38 protected: 39 SharedSurface_EGLImage(const SharedSurfaceDesc&, 40 UniquePtr<MozFramebuffer>&& fb, EGLImage); 41 42 void UpdateProdTexture(const MutexAutoLock& curAutoLock); 43 44 public: 45 virtual ~SharedSurface_EGLImage(); 46 47 virtual void LockProdImpl() override {} 48 virtual void UnlockProdImpl() override {} 49 50 virtual void ProducerAcquireImpl() override {} 51 virtual void ProducerReleaseImpl() override; 52 53 virtual void ProducerReadAcquireImpl() override; 54 virtual void ProducerReadReleaseImpl() override {}; 55 56 Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override; 57 }; 58 59 class SurfaceFactory_EGLImage final : public SurfaceFactory { 60 public: 61 static UniquePtr<SurfaceFactory_EGLImage> Create(GLContext&); 62 63 private: 64 explicit SurfaceFactory_EGLImage(const PartialSharedSurfaceDesc& desc) 65 : SurfaceFactory(desc) {} 66 67 public: 68 virtual UniquePtr<SharedSurface> CreateSharedImpl( 69 const SharedSurfaceDesc& desc) override { 70 return SharedSurface_EGLImage::Create(desc); 71 } 72 }; 73 74 // - 75 // SurfaceTexture 76 77 #ifdef MOZ_WIDGET_ANDROID 78 79 class SharedSurface_SurfaceTexture final : public SharedSurface { 80 const java::GeckoSurface::GlobalRef mSurface; 81 const EGLSurface mEglSurface; 82 const std::weak_ptr<EglDisplay> mEglDisplay; 83 EGLSurface mOrigEglSurface = 0; 84 85 public: 86 static UniquePtr<SharedSurface_SurfaceTexture> Create( 87 const SharedSurfaceDesc&); 88 89 java::GeckoSurface::Param JavaSurface() { return mSurface; } 90 91 protected: 92 SharedSurface_SurfaceTexture(const SharedSurfaceDesc&, 93 java::GeckoSurface::Param surface, EGLSurface); 94 95 public: 96 virtual ~SharedSurface_SurfaceTexture(); 97 98 virtual void LockProdImpl() override; 99 virtual void UnlockProdImpl() override; 100 101 virtual void ProducerAcquireImpl() override {} 102 virtual void ProducerReleaseImpl() override {} 103 virtual void ProducerReadReleaseImpl() override; 104 105 Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override; 106 107 virtual void Commit() override; 108 109 virtual void WaitForBufferOwnership() override; 110 111 virtual bool IsBufferAvailable() const override; 112 113 bool IsValid() const override; 114 }; 115 116 class SurfaceFactory_SurfaceTexture final : public SurfaceFactory { 117 public: 118 explicit SurfaceFactory_SurfaceTexture(GLContext&); 119 120 virtual UniquePtr<SharedSurface> CreateSharedImpl( 121 const SharedSurfaceDesc& desc) override { 122 return SharedSurface_SurfaceTexture::Create(desc); 123 } 124 }; 125 126 #endif // MOZ_WIDGET_ANDROID 127 128 } // namespace gl 129 130 } /* namespace mozilla */ 131 132 #endif /* SHARED_SURFACE_EGL_H_ */