SharedSurfaceDMABUF.h (1987B)
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_DMABUF_H_ 7 #define SHARED_SURFACE_DMABUF_H_ 8 9 #include "SharedSurface.h" 10 #include "mozilla/widget/DMABufSurface.h" 11 12 namespace mozilla { 13 namespace gl { 14 15 class GLContext; 16 class GLLibraryEGL; 17 18 class SharedSurface_DMABUF final : public SharedSurface { 19 public: 20 const RefPtr<DMABufSurface> mSurface; 21 22 static UniquePtr<SharedSurface_DMABUF> Create(const SharedSurfaceDesc&); 23 24 private: 25 SharedSurface_DMABUF(const SharedSurfaceDesc&, UniquePtr<MozFramebuffer>, 26 RefPtr<DMABufSurface>); 27 28 void UpdateProdTexture(const MutexAutoLock& curAutoLock); 29 30 public: 31 virtual ~SharedSurface_DMABUF(); 32 33 // Exclusive Content/WebGL lock/unlock of surface for write 34 virtual void LockProdImpl() override {} 35 virtual void UnlockProdImpl() override {} 36 37 // Non-exclusive Content/WebGL lock/unlock of surface for write 38 virtual void ProducerAcquireImpl() override {} 39 virtual void ProducerReleaseImpl() override; 40 41 // Non-exclusive Content/WebGL lock/unlock for read from surface 42 virtual void ProducerReadAcquireImpl() override {} 43 virtual void ProducerReadReleaseImpl() override {} 44 45 Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override; 46 47 void WaitForBufferOwnership() override; 48 }; 49 50 class SurfaceFactory_DMABUF : public SurfaceFactory { 51 public: 52 static UniquePtr<SurfaceFactory_DMABUF> Create(GLContext& gl); 53 54 explicit SurfaceFactory_DMABUF(GLContext&); 55 56 public: 57 virtual UniquePtr<SharedSurface> CreateSharedImpl( 58 const SharedSurfaceDesc& desc) override { 59 return SharedSurface_DMABUF::Create(desc); 60 } 61 62 bool CanCreateSurface(GLContext& gl); 63 }; 64 65 } // namespace gl 66 67 } // namespace mozilla 68 69 #endif /* SHARED_SURFACE_DMABUF_H_ */