Backed out changeset 31bd912fba54 (bug 1322650) Backed out changeset 4d486c7469eb (bug 1322650) Backed out changeset 4cf8f4d5064c (bug 1322650) Backed out changeset 3cb108f7492f (bug 1322650) Backed out changeset bd53533c108e (bug 1322650) Backed out changeset 3522917d8f10 (bug 1322650) Backed out changeset 2c2c1e33eccc (bug 1322650) Backed out changeset 2f19977cd6ab (bug 1322650) Backed out changeset 4519296a323e (bug 1322650) Backed out changeset e56e5e1c8786 (bug 1322650) Backed out changeset 96fe52231b57 (bug 1322650)
137 lines
3.9 KiB
C++
137 lines
3.9 KiB
C++
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
* 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 "GLContext.h" // for GLContext, etc
|
|
#include "mozilla/Assertions.h" // for MOZ_ASSERT, etc
|
|
#include "mozilla/layers/ISurfaceAllocator.h"
|
|
#include "mozilla/layers/TextureClientOGL.h"
|
|
#include "mozilla/gfx/Point.h" // for IntSize
|
|
#include "GLLibraryEGL.h"
|
|
|
|
using namespace mozilla::gl;
|
|
|
|
namespace mozilla {
|
|
namespace layers {
|
|
|
|
class CompositableForwarder;
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// EGLImage
|
|
|
|
EGLImageTextureData::EGLImageTextureData(EGLImageImage* aImage, gfx::IntSize aSize)
|
|
: mImage(aImage)
|
|
, mSize(aSize)
|
|
{
|
|
MOZ_ASSERT(aImage);
|
|
}
|
|
|
|
already_AddRefed<TextureClient>
|
|
EGLImageTextureData::CreateTextureClient(EGLImageImage* aImage, gfx::IntSize aSize,
|
|
LayersIPCChannel* aAllocator, TextureFlags aFlags)
|
|
{
|
|
MOZ_ASSERT(XRE_IsParentProcess(),
|
|
"Can't pass an `EGLImage` between processes.");
|
|
|
|
if (!aImage || !XRE_IsParentProcess()) {
|
|
return nullptr;
|
|
}
|
|
|
|
// XXX - This is quite sad and slow.
|
|
aFlags |= TextureFlags::DEALLOCATE_CLIENT;
|
|
|
|
if (aImage->GetOriginPos() == gl::OriginPos::BottomLeft) {
|
|
aFlags |= TextureFlags::ORIGIN_BOTTOM_LEFT;
|
|
}
|
|
|
|
return TextureClient::CreateWithData(
|
|
new EGLImageTextureData(aImage, aSize),
|
|
aFlags, aAllocator
|
|
);
|
|
}
|
|
|
|
void
|
|
EGLImageTextureData::FillInfo(TextureData::Info& aInfo) const
|
|
{
|
|
aInfo.size = mSize;
|
|
aInfo.format = gfx::SurfaceFormat::UNKNOWN;
|
|
aInfo.hasIntermediateBuffer = false;
|
|
aInfo.hasSynchronization = false;
|
|
aInfo.supportsMoz2D = false;
|
|
aInfo.canExposeMappedData = false;
|
|
}
|
|
|
|
bool
|
|
EGLImageTextureData::Serialize(SurfaceDescriptor& aOutDescriptor)
|
|
{
|
|
const bool hasAlpha = true;
|
|
aOutDescriptor =
|
|
EGLImageDescriptor((uintptr_t)mImage->GetImage(),
|
|
(uintptr_t)mImage->GetSync(),
|
|
mImage->GetSize(), hasAlpha);
|
|
return true;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// AndroidSurface
|
|
|
|
#ifdef MOZ_WIDGET_ANDROID
|
|
|
|
already_AddRefed<TextureClient>
|
|
AndroidSurfaceTextureData::CreateTextureClient(AndroidSurfaceTexture* aSurfTex,
|
|
gfx::IntSize aSize,
|
|
gl::OriginPos aOriginPos,
|
|
LayersIPCChannel* aAllocator,
|
|
TextureFlags aFlags)
|
|
{
|
|
MOZ_ASSERT(XRE_IsParentProcess(),
|
|
"Can't pass an android surfaces between processes.");
|
|
|
|
if (!aSurfTex || !XRE_IsParentProcess()) {
|
|
return nullptr;
|
|
}
|
|
|
|
if (aOriginPos == gl::OriginPos::BottomLeft) {
|
|
aFlags |= TextureFlags::ORIGIN_BOTTOM_LEFT;
|
|
}
|
|
|
|
return TextureClient::CreateWithData(
|
|
new AndroidSurfaceTextureData(aSurfTex, aSize),
|
|
aFlags, aAllocator
|
|
);
|
|
}
|
|
|
|
AndroidSurfaceTextureData::AndroidSurfaceTextureData(AndroidSurfaceTexture* aSurfTex,
|
|
gfx::IntSize aSize)
|
|
: mSurfTex(aSurfTex)
|
|
, mSize(aSize)
|
|
{}
|
|
|
|
AndroidSurfaceTextureData::~AndroidSurfaceTextureData()
|
|
{}
|
|
|
|
void
|
|
AndroidSurfaceTextureData::FillInfo(TextureData::Info& aInfo) const
|
|
{
|
|
aInfo.size = mSize;
|
|
aInfo.format = gfx::SurfaceFormat::UNKNOWN;
|
|
aInfo.hasIntermediateBuffer = false;
|
|
aInfo.hasSynchronization = false;
|
|
aInfo.supportsMoz2D = false;
|
|
aInfo.canExposeMappedData = false;
|
|
}
|
|
|
|
bool
|
|
AndroidSurfaceTextureData::Serialize(SurfaceDescriptor& aOutDescriptor)
|
|
{
|
|
aOutDescriptor = SurfaceTextureDescriptor((uintptr_t)mSurfTex.get(),
|
|
mSize);
|
|
return true;
|
|
}
|
|
|
|
#endif // MOZ_WIDGET_ANDROID
|
|
|
|
} // namespace layers
|
|
} // namespace mozilla
|