gecko-dev/gfx/layers/DMABUFSurfaceImage.cpp
stransky a832fc14b9 Bug 1770560 [Linux] Move GetAsSourceSurface() implementation from DMABUFSurfaceImage to DMABufSurface r=sotaro,jgilbert
Both DMABUFSurfaceImage and DMABufSurface use its own headless GL context to create GL texture from DMABufSurface.
Let's unity that in DMABufSurface and use only one shared GL context for it.

Depends on D146989

Differential Revision: https://phabricator.services.mozilla.com/D146990
2022-06-06 13:31:03 +00:00

58 lines
2.0 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "DMABUFSurfaceImage.h"
#include "mozilla/widget/DMABufSurface.h"
#include "mozilla/layers/CompositableClient.h"
#include "mozilla/layers/CompositableForwarder.h"
#include "mozilla/layers/DMABUFTextureClientOGL.h"
#include "mozilla/layers/TextureForwarder.h"
#include "mozilla/ScopeExit.h"
#include "mozilla/StaticMutex.h"
#include "GLContext.h"
#include "GLContextProvider.h"
#include "GLBlitHelper.h"
#include "GLReadTexImageHelper.h"
#include "GLContextTypes.h" // for GLContext, etc
#include "GLContextEGL.h"
#include "GLContextProvider.h"
#include "ScopedGLHelpers.h"
using namespace mozilla;
using namespace mozilla::layers;
using namespace mozilla::gfx;
using namespace mozilla::gl;
DMABUFSurfaceImage::DMABUFSurfaceImage(DMABufSurface* aSurface)
: Image(nullptr, ImageFormat::DMABUF), mSurface(aSurface) {
MOZ_DIAGNOSTIC_ASSERT(mSurface->IsGlobalRefSet(),
"DMABufSurface must be marked as used!");
}
DMABUFSurfaceImage::~DMABUFSurfaceImage() {
// Unref as we're done with this surface.
mSurface->GlobalRefRelease();
}
already_AddRefed<gfx::SourceSurface> DMABUFSurfaceImage::GetAsSourceSurface() {
return mSurface->GetAsSourceSurface();
}
TextureClient* DMABUFSurfaceImage::GetTextureClient(
KnowsCompositor* aKnowsCompositor) {
if (!mTextureClient) {
BackendType backend = BackendType::NONE;
mTextureClient = TextureClient::CreateWithData(
DMABUFTextureData::Create(mSurface, backend), TextureFlags::DEFAULT,
aKnowsCompositor->GetTextureForwarder());
}
return mTextureClient;
}
gfx::IntSize DMABUFSurfaceImage::GetSize() const {
return gfx::IntSize::Truncate(mSurface->GetWidth(), mSurface->GetHeight());
}