diff --git a/gfx/webrender_bindings/RenderCompositorANGLE.cpp b/gfx/webrender_bindings/RenderCompositorANGLE.cpp index 56d3cd96b8d7..b662e8b1971e 100644 --- a/gfx/webrender_bindings/RenderCompositorANGLE.cpp +++ b/gfx/webrender_bindings/RenderCompositorANGLE.cpp @@ -38,11 +38,8 @@ UniquePtr RenderCompositorANGLE::Create( return nullptr; } - const auto& gle = gl::GLContextEGL::Cast(gl); - const auto& egl = gle->mEgl; - UniquePtr compositor = - MakeUnique(std::move(aWidget), egl); + MakeUnique(std::move(aWidget)); if (!compositor->Initialize()) { return nullptr; } @@ -50,14 +47,11 @@ UniquePtr RenderCompositorANGLE::Create( } RenderCompositorANGLE::RenderCompositorANGLE( - RefPtr&& aWidget, gl::GLLibraryEGL* const egl) + RefPtr&& aWidget) : RenderCompositor(std::move(aWidget)), - mEgl(egl), mEGLConfig(nullptr), mEGLSurface(nullptr), - mUseTripleBuffering(false) { - MOZ_ASSERT(mEgl); -} + mUseTripleBuffering(false) {} RenderCompositorANGLE::~RenderCompositorANGLE() { DestroyEGLSurface(); @@ -65,20 +59,20 @@ RenderCompositorANGLE::~RenderCompositorANGLE() { } ID3D11Device* RenderCompositorANGLE::GetDeviceOfEGLDisplay() { - MOZ_ASSERT(mEgl); - if (!mEgl || - !mEgl->IsExtensionSupported(gl::GLLibraryEGL::EXT_device_query)) { + auto* egl = gl::GLLibraryEGL::Get(); + MOZ_ASSERT(egl); + if (!egl || !egl->IsExtensionSupported(gl::GLLibraryEGL::EXT_device_query)) { return nullptr; } // Fetch the D3D11 device. EGLDeviceEXT eglDevice = nullptr; - mEgl->fQueryDisplayAttribEXT(mEgl->Display(), LOCAL_EGL_DEVICE_EXT, - (EGLAttrib*)&eglDevice); + egl->fQueryDisplayAttribEXT(egl->Display(), LOCAL_EGL_DEVICE_EXT, + (EGLAttrib*)&eglDevice); MOZ_ASSERT(eglDevice); ID3D11Device* device = nullptr; - mEgl->fQueryDeviceAttribEXT(eglDevice, LOCAL_EGL_D3D11_DEVICE_ANGLE, - (EGLAttrib*)&device); + egl->fQueryDeviceAttribEXT(eglDevice, LOCAL_EGL_D3D11_DEVICE_ANGLE, + (EGLAttrib*)&device); if (!device) { gfxCriticalNote << "Failed to get D3D11Device from EGLDisplay"; return nullptr; @@ -87,7 +81,8 @@ ID3D11Device* RenderCompositorANGLE::GetDeviceOfEGLDisplay() { } bool RenderCompositorANGLE::SutdownEGLLibraryIfNecessary() { - if (!mEgl) { + const RefPtr egl = gl::GLLibraryEGL::Get(); + if (!egl) { // egl is not initialized yet; return true; } @@ -105,7 +100,7 @@ bool RenderCompositorANGLE::SutdownEGLLibraryIfNecessary() { RenderThread::Get()->RendererCount() == 0) { // Shutdown GLLibraryEGL for updating EGLDisplay. RenderThread::Get()->ClearSharedGL(); - mEgl->Shutdown(); + egl->Shutdown(); } return true; } @@ -120,7 +115,8 @@ bool RenderCompositorANGLE::Initialize() { if (!SutdownEGLLibraryIfNecessary()) { return false; } - if (!RenderThread::Get()->SharedGL()) { + const auto gl = RenderThread::Get()->SharedGL(); + if (!gl) { gfxCriticalNote << "[WR] failed to get shared GL context."; return false; } @@ -231,7 +227,9 @@ bool RenderCompositorANGLE::Initialize() { // Force enable alpha channel to make sure ANGLE use correct framebuffer // formart - if (!gl::CreateConfig(mEgl, &mEGLConfig, /* bpp */ 32, + const auto& gle = gl::GLContextEGL::Cast(gl); + const auto& egl = gle->mEgl; + if (!gl::CreateConfig(egl, &mEGLConfig, /* bpp */ 32, /* enableDepthBuffer */ true)) { gfxCriticalNote << "Failed to create EGLConfig for WebRender"; } @@ -442,11 +440,14 @@ bool RenderCompositorANGLE::ResizeBufferIfNeeded() { const auto buffer = reinterpret_cast(backBuf.get()); - const EGLSurface surface = mEgl->fCreatePbufferFromClientBuffer( - mEgl->Display(), LOCAL_EGL_D3D_TEXTURE_ANGLE, buffer, mEGLConfig, + const auto gl = RenderThread::Get()->SharedGL(); + const auto& gle = gl::GLContextEGL::Cast(gl); + const auto& egl = gle->mEgl; + const EGLSurface surface = egl->fCreatePbufferFromClientBuffer( + egl->Display(), LOCAL_EGL_D3D_TEXTURE_ANGLE, buffer, mEGLConfig, pbuffer_attribs); - EGLint err = mEgl->fGetError(); + EGLint err = egl->fGetError(); if (err != LOCAL_EGL_SUCCESS) { gfxCriticalError() << "Failed to create Pbuffer of back buffer error: " << gfx::hexa(err) << " Size : " << size; @@ -462,8 +463,10 @@ bool RenderCompositorANGLE::ResizeBufferIfNeeded() { void RenderCompositorANGLE::DestroyEGLSurface() { // Release EGLSurface of back buffer before calling ResizeBuffers(). if (mEGLSurface) { - gl::GLContextEGL::Cast(gl())->SetEGLSurfaceOverride(EGL_NO_SURFACE); - mEgl->fDestroySurface(mEgl->Display(), mEGLSurface); + const auto& gle = gl::GLContextEGL::Cast(gl()); + const auto& egl = gle->mEgl; + gle->SetEGLSurfaceOverride(EGL_NO_SURFACE); + egl->fDestroySurface(egl->Display(), mEGLSurface); mEGLSurface = nullptr; } } diff --git a/gfx/webrender_bindings/RenderCompositorANGLE.h b/gfx/webrender_bindings/RenderCompositorANGLE.h index 83b7c54128d1..d2ccaf38fd4e 100644 --- a/gfx/webrender_bindings/RenderCompositorANGLE.h +++ b/gfx/webrender_bindings/RenderCompositorANGLE.h @@ -35,8 +35,7 @@ class RenderCompositorANGLE : public RenderCompositor { static UniquePtr Create( RefPtr&& aWidget); - explicit RenderCompositorANGLE(RefPtr&& aWidget, - gl::GLLibraryEGL*); + explicit RenderCompositorANGLE(RefPtr&& aWidget); virtual ~RenderCompositorANGLE(); bool Initialize(); @@ -68,7 +67,6 @@ class RenderCompositorANGLE : public RenderCompositor { bool SutdownEGLLibraryIfNecessary(); RefPtr GetD3D11Query(); - RefPtr mEgl; EGLConfig mEGLConfig; EGLSurface mEGLSurface;