Bug 1876177 [wpt PR 44153] - [FedCM] Add a WPT test for authz, a=testonly
[gecko.git] / gfx / gl / SharedSurfaceANGLE.h
blob30967ea0f6a8897601dc6aa680e2b1570ad20cbe
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/. */
6 #ifndef SHARED_SURFACE_ANGLE_H_
7 #define SHARED_SURFACE_ANGLE_H_
9 #include <windows.h>
10 #include <memory>
11 #include "SharedSurface.h"
13 struct IDXGIKeyedMutex;
14 struct ID3D11Texture2D;
16 namespace mozilla {
18 namespace gfx {
19 class FileHandleWrapper;
20 } // namespace gfx
22 namespace gl {
24 class GLContext;
25 class EglDisplay;
27 class SharedSurface_ANGLEShareHandle final : public SharedSurface {
28 public:
29 const std::weak_ptr<EglDisplay> mEGL;
30 const EGLSurface mPBuffer;
31 const RefPtr<gfx::FileHandleWrapper> mSharedHandle;
32 const RefPtr<IDXGIKeyedMutex> mKeyedMutex;
34 static UniquePtr<SharedSurface_ANGLEShareHandle> Create(
35 const SharedSurfaceDesc&);
37 private:
38 SharedSurface_ANGLEShareHandle(const SharedSurfaceDesc&,
39 const std::weak_ptr<EglDisplay>& egl,
40 EGLSurface pbuffer,
41 RefPtr<gfx::FileHandleWrapper>&& aSharedHandle,
42 const RefPtr<IDXGIKeyedMutex>& keyedMutex);
44 public:
45 virtual ~SharedSurface_ANGLEShareHandle();
47 virtual void LockProdImpl() override;
48 virtual void UnlockProdImpl() override;
50 virtual bool ProducerAcquireImpl() override;
51 virtual void ProducerReleaseImpl() override;
52 virtual bool ProducerReadAcquireImpl() override;
53 virtual void ProducerReadReleaseImpl() override;
55 Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override;
58 class SurfaceFactory_ANGLEShareHandle final : public SurfaceFactory {
59 public:
60 static UniquePtr<SurfaceFactory_ANGLEShareHandle> Create(GLContext& gl);
62 private:
63 explicit SurfaceFactory_ANGLEShareHandle(const PartialSharedSurfaceDesc& desc)
64 : SurfaceFactory(desc) {}
66 virtual UniquePtr<SharedSurface> CreateSharedImpl(
67 const SharedSurfaceDesc& desc) override {
68 return SharedSurface_ANGLEShareHandle::Create(desc);
72 } // namespace gl
73 } /* namespace mozilla */
75 #endif /* SHARED_SURFACE_ANGLE_H_ */