Backed out 14 changesets (bug 1833855) for causing build bustages in DMABufSurface.cpp CLOSED TREE

Backed out changeset b8daeb03b670 (bug 1833855)
Backed out changeset cc17af8bae3d (bug 1833855)
Backed out changeset 2d4f6b8ad5d3 (bug 1833855)
Backed out changeset 3b75e59357bb (bug 1833855)
Backed out changeset 86948033f163 (bug 1833855)
Backed out changeset 3e6387b95e39 (bug 1833855)
Backed out changeset 7f22e082786c (bug 1833855)
Backed out changeset 9d5ae056d3c8 (bug 1833855)
Backed out changeset b0a7ca2dfbd6 (bug 1833855)
Backed out changeset ac0947e6e601 (bug 1833855)
Backed out changeset a058367a436a (bug 1833855)
Backed out changeset 7b4da292159c (bug 1833855)
Backed out changeset d50ae530998d (bug 1833855)
Backed out changeset 895b93846598 (bug 1833855)
This commit is contained in:
Cristian Tuns 2023-06-22 08:05:40 -04:00
Родитель b6b6043ff3
Коммит ac8a8744d7
60 изменённых файлов: 214 добавлений и 250 удалений

Просмотреть файл

@ -636,7 +636,7 @@ RefPtr<WebGLContext> WebGLContext::Create(HostWebGLContext& host,
if (kIsAndroid) {
types[layers::SurfaceDescriptor::TSurfaceTextureDescriptor] = true;
}
if (kIsLinux) {
if (kIsX11 || kIsWayland) {
types[layers::SurfaceDescriptor::TSurfaceDescriptorDMABuf] = true;
}
return types;

Просмотреть файл

@ -62,8 +62,8 @@ TEST(MediaDataDecoder, H264)
}
}
// Decoding AV1 via. ffvpx is supported on Linux only.
#if defined(MOZ_AV1) && defined(MOZ_WIDGET_GTK) && defined(MOZ_FFVPX) && \
// Decoding AV1 via. ffvpx is supported on Linux/Wayland only.
#if defined(MOZ_AV1) && defined(MOZ_WAYLAND) && defined(MOZ_FFVPX) && \
!defined(MOZ_FFVPX_AUDIOONLY)
TEST(MediaDataDecoder, AV1)
{

Просмотреть файл

@ -291,7 +291,7 @@ AVFrame* FFmpegDataDecoder<LIBAV_VER>::PrepareFrame() {
return aLib->avcodec_find_decoder(aCodec);
}
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
/* static */ AVCodec* FFmpegDataDecoder<LIBAV_VER>::FindHardwareAVCodec(
FFmpegLibWrapper* aLib, AVCodecID aCodec) {
void* opaque = nullptr;

Просмотреть файл

@ -41,7 +41,7 @@ class FFmpegDataDecoder<LIBAV_VER>
RefPtr<ShutdownPromise> Shutdown() override;
static AVCodec* FindAVCodec(FFmpegLibWrapper* aLib, AVCodecID aCodec);
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
static AVCodec* FindHardwareAVCodec(FFmpegLibWrapper* aLib, AVCodecID aCodec);
#endif

Просмотреть файл

@ -11,7 +11,7 @@
#include "mozilla/Types.h"
#include "PlatformDecoderModule.h"
#include "prlink.h"
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
# include "mozilla/gfx/gfxVars.h"
# include "mozilla/widget/DMABufLibWrapper.h"
#endif
@ -200,7 +200,7 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link() {
AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 |
AV_FUNC_60)
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
AV_FUNC_OPTION_SILENT(avcodec_get_hw_config,
AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60)
AV_FUNC_OPTION_SILENT(av_codec_iterate, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60)
@ -236,7 +236,7 @@ FFmpegLibWrapper::LinkResult FFmpegLibWrapper::Link() {
#undef AV_FUNC
#undef AV_FUNC_OPTION
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
# define VA_FUNC_OPTION_SILENT(func) \
if (!(func = (decltype(func))PR_FindSymbol(mVALib, #func))) { \
func = (decltype(func))nullptr; \
@ -294,7 +294,7 @@ void FFmpegLibWrapper::Unlink() {
PR_UnloadLibrary(mAVCodecLib);
}
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
if (mVALib) {
PR_UnloadLibrary(mVALib);
}
@ -305,7 +305,7 @@ void FFmpegLibWrapper::Unlink() {
PodZero(this);
}
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
void FFmpegLibWrapper::LinkVAAPILibs() {
if (!gfx::gfxVars::CanUseHardwareVideoDecoding() || !XRE_IsRDDProcess()) {
return;
@ -335,7 +335,7 @@ void FFmpegLibWrapper::LinkVAAPILibs() {
}
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
bool FFmpegLibWrapper::IsVAAPIAvailable() {
# define VA_FUNC_LOADED(func) (func != nullptr)
return VA_FUNC_LOADED(avcodec_get_hw_config) &&

Просмотреть файл

@ -17,7 +17,7 @@ struct AVPacket;
struct AVDictionary;
struct AVCodecParserContext;
struct PRLibrary;
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
struct AVCodecHWConfig;
struct AVVAAPIHWConfig;
struct AVHWFramesConstraints;
@ -56,7 +56,7 @@ struct MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS FFmpegLibWrapper {
// Reset the wrapper and unlink all attached libraries.
void Unlink();
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
// Check if mVALib are available and we can use HW decode.
bool IsVAAPIAvailable();
void LinkVAAPILibs();
@ -138,7 +138,7 @@ struct MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS FFmpegLibWrapper {
int (*av_frame_get_colorspace)(const AVFrame* frame);
int (*av_frame_get_color_range)(const AVFrame* frame);
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
const AVCodecHWConfig* (*avcodec_get_hw_config)(const AVCodec* codec,
int index);
AVBufferRef* (*av_hwdevice_ctx_alloc)(int);
@ -170,7 +170,7 @@ struct MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS FFmpegLibWrapper {
PRLibrary* mAVCodecLib;
PRLibrary* mAVUtilLib;
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
PRLibrary* mVALib;
PRLibrary* mVALibDrm;
#endif

Просмотреть файл

@ -60,7 +60,7 @@ bool FFmpegRuntimeLinker::Init() {
return sLinkStatus == LinkStatus_SUCCEEDED;
}
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
sLibAV.LinkVAAPILibs();
#endif

Просмотреть файл

@ -28,7 +28,7 @@
# include "va/va.h"
#endif
#if defined(MOZ_AV1) && defined(MOZ_WIDGET_GTK) && \
#if defined(MOZ_AV1) && defined(MOZ_WAYLAND) && \
(defined(FFVPX_VERSION) || LIBAVCODEC_VERSION_MAJOR >= 59)
# define FFMPEG_AV1_DECODE 1
# include "AOMDecoder.h"
@ -1752,7 +1752,7 @@ nsTArray<AVCodecID> FFmpegVideoDecoder<LIBAV_VER>::GetAcceleratedFormats() {
FFMPEG_LOG(" vaQueryConfigProfiles() failed %s", vaErrorStr(status));
return supportedHWCodecs;
}
numProfiles = std::min(numProfiles, maxProfiles);
numProfiles = MIN(numProfiles, maxProfiles);
entryPoints = new VAEntrypoint[maxEntryPoints];
for (int p = 0; p < numProfiles; p++) {
@ -1771,7 +1771,7 @@ nsTArray<AVCodecID> FFmpegVideoDecoder<LIBAV_VER>::GetAcceleratedFormats() {
vaErrorStr(status), (int)profile);
continue;
}
numEntryPoints = std::min(numEntryPoints, maxEntryPoints);
numEntryPoints = MIN(numEntryPoints, maxEntryPoints);
FFMPEG_LOG(" Profile %s:", VAProfileName(profile));
for (int e = 0; e < numEntryPoints; e++) {

Просмотреть файл

@ -26,7 +26,7 @@ if CONFIG['CC_TYPE'] == 'gcc':
CXXFLAGS += [
'-Wno-attributes',
]
if CONFIG['MOZ_WIDGET_GTK']:
if CONFIG['MOZ_WAYLAND']:
CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS']
if CONFIG['MOZ_ENABLE_VAAPI'] or CONFIG['MOZ_ENABLE_V4L2']:
UNIFIED_SOURCES += ['../FFmpegVideoFramePool.cpp']

Просмотреть файл

@ -26,7 +26,7 @@ if CONFIG["CC_TYPE"] == "gcc":
CXXFLAGS += [
"-Wno-attributes",
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
if CONFIG["MOZ_WAYLAND"]:
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"]

Просмотреть файл

@ -26,7 +26,7 @@ if CONFIG["CC_TYPE"] == "gcc":
CXXFLAGS += [
"-Wno-attributes",
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
if CONFIG["MOZ_WAYLAND"]:
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"]

Просмотреть файл

@ -59,7 +59,7 @@ bool FFVPXRuntimeLinker::Init() {
MOZ_ASSERT(NS_IsMainThread());
sLinkStatus = LinkStatus_FAILED;
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
sFFVPXLib.LinkVAAPILibs();
#endif

Просмотреть файл

@ -37,7 +37,7 @@ if CONFIG["CC_TYPE"] == "gcc":
DEFINES["FFVPX_VERSION"] = 46465650
DEFINES["USING_MOZFFVPX"] = True
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
if CONFIG["MOZ_WAYLAND"]:
CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_VAAPI"] or CONFIG["MOZ_ENABLE_V4L2"]:
UNIFIED_SOURCES += ["../FFmpegVideoFramePool.cpp"]

Просмотреть файл

@ -22,7 +22,7 @@ UNIFIED_SOURCES += [
"FFmpegRuntimeLinker.cpp",
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
if CONFIG["MOZ_WAYLAND"]:
include("/ipc/chromium/chromium-config.mozbuild")
FINAL_LIBRARY = "xul"

Просмотреть файл

@ -30,5 +30,5 @@ DEFINES['ANGLE_SKIP_DXGI_1_2_CHECK'] = True
DEFINES['ANGLE_ENABLE_KEYEDMUTEX'] = True
DEFINES['ANGLE_TRANSLATOR_ESSL_ONLY'] = True
if CONFIG["MOZ_WIDGET_GTK"]:
if CONFIG["MOZ_WAYLAND"]:
CXXFLAGS += [ "-DWL_EGL_PLATFORM" ]

Просмотреть файл

@ -41,10 +41,9 @@
# include "mozilla/layers/D3D11YCbCrImage.h"
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
# include "mozilla/layers/DMABUFSurfaceImage.h"
# include "mozilla/widget/DMABufSurface.h"
# include "mozilla/widget/DMABufLibWrapper.h"
#endif
using mozilla::layers::PlanarYCbCrData;
@ -877,7 +876,7 @@ bool GLBlitHelper::BlitSdToFramebuffer(const layers::SurfaceDescriptor& asd,
return Blit(surfaceTexture, destSize, destOrigin);
}
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
case layers::SurfaceDescriptor::TSurfaceDescriptorDMABuf: {
const auto& sd = asd.get_SurfaceDescriptorDMABuf();
RefPtr<DMABufSurface> surface = DMABufSurface::CreateDMABufSurface(sd);
@ -947,7 +946,7 @@ bool GLBlitHelper::BlitImageToFramebuffer(layers::Image* const srcImage,
return false;
#endif
case ImageFormat::DMABUF:
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
return BlitImage(static_cast<layers::DMABUFSurfaceImage*>(srcImage),
destSize, destOrigin);
#else
@ -1426,7 +1425,7 @@ bool GLBlitHelper::BlitImage(layers::GPUVideoImage* const srcImage,
const auto& subdescUnion =
desc.get_SurfaceDescriptorRemoteDecoder().subdesc();
switch (subdescUnion.type()) {
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
case layers::RemoteDecoderVideoSubDescriptor::TSurfaceDescriptorDMABuf: {
const auto& subdesc = subdescUnion.get_SurfaceDescriptorDMABuf();
RefPtr<DMABufSurface> surface =
@ -1469,7 +1468,7 @@ bool GLBlitHelper::BlitImage(layers::GPUVideoImage* const srcImage,
}
// -------------------------------------
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
bool GLBlitHelper::Blit(DMABufSurface* surface, const gfx::IntSize& destSize,
OriginPos destOrigin) const {
const auto& srcOrigin = OriginPos::BottomLeft;

Просмотреть файл

@ -44,7 +44,7 @@ class MacIOSurface;
# include "mozilla/java/GeckoSurfaceTextureWrappers.h"
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
class DMABufSurface;
#endif
@ -74,7 +74,7 @@ class SurfaceTextureDescriptor;
class MacIOSurfaceImage;
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
class DMABUFSurfaceImage;
#endif
} // namespace layers
@ -235,7 +235,7 @@ class GLBlitHelper final {
bool BlitImage(layers::MacIOSurfaceImage* srcImage,
const gfx::IntSize& destSize, OriginPos destOrigin) const;
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
bool Blit(DMABufSurface* surface, const gfx::IntSize& destSize,
OriginPos destOrigin) const;
bool BlitImage(layers::DMABUFSurfaceImage* srcImage,

Просмотреть файл

@ -3543,7 +3543,7 @@ class GLContext : public GenericAtomicRefCounted, public SupportsWeakPtr {
virtual GLenum GetPreferredARGB32Format() const { return LOCAL_GL_RGBA; }
virtual GLenum GetPreferredEGLImageTextureTarget() const {
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
return LOCAL_GL_TEXTURE_2D;
#else
return IsExtensionSupported(OES_EGL_image_external)

Просмотреть файл

@ -255,7 +255,7 @@ already_AddRefed<GLContext> GLContextEGLFactory::CreateImpl(
gfxCriticalNote << "Failed to create EGLConfig for WebRender ANGLE!";
return nullptr;
}
} else if (kIsLinux) {
} else if (kIsWayland || kIsX11) {
const int bpp = 32;
if (!CreateConfig(*egl, &config, bpp, false, aUseGles)) {
gfxCriticalNote << "Failed to create EGLConfig for WebRender!";
@ -968,7 +968,7 @@ bool CreateConfig(EglDisplay& aEgl, EGLConfig* aConfig, int32_t aDepth,
}
}
if (kIsLinux && fallbackConfig) {
if (kIsX11 && fallbackConfig) {
*aConfig = fallbackConfig.value();
return true;
}

Просмотреть файл

@ -37,9 +37,9 @@
#include "ScopedGLHelpers.h"
#ifdef MOZ_WIDGET_GTK
# include "mozilla/WidgetUtilsGtk.h"
# include "mozilla/widget/DMABufLibWrapper.h"
# ifdef MOZ_WAYLAND
# include "mozilla/widget/nsWaylandDisplay.h"
# include "mozilla/widget/DMABufLibWrapper.h"
# endif // MOZ_WIDGET_GTK
# include <gdk/gdk.h>
#endif // MOZ_WAYLAND
@ -163,7 +163,7 @@ static std::shared_ptr<EglDisplay> GetAndInitDisplay(
return EglDisplay::Create(egl, display, false, aProofOfLock);
}
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
static std::shared_ptr<EglDisplay> GetAndInitDeviceDisplay(
GLLibraryEGL& egl, const StaticMutexAutoLock& aProofOfLock) {
nsAutoCString drmRenderDevice(gfx::gfxVars::DrmRenderDevice());
@ -897,15 +897,13 @@ std::shared_ptr<EglDisplay> GLLibraryEGL::CreateDisplayLocked(
}
} else {
void* nativeDisplay = EGL_DEFAULT_DISPLAY;
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
if (!gdk_display_get_default()) {
ret = GetAndInitDeviceDisplay(*this, aProofOfLock);
if (!ret) {
ret = GetAndInitSurfacelessDisplay(*this, aProofOfLock);
}
}
# ifdef MOZ_WAYLAND
else if (widget::GdkIsWaylandDisplay()) {
} else if (widget::GdkIsWaylandDisplay()) {
// Wayland does not support EGL_DEFAULT_DISPLAY
nativeDisplay = widget::WaylandDisplayGetWLDisplay();
if (!nativeDisplay) {
@ -913,7 +911,6 @@ std::shared_ptr<EglDisplay> GLLibraryEGL::CreateDisplayLocked(
return nullptr;
}
}
# endif
#endif
if (!ret) {
ret = GetAndInitDisplay(*this, nativeDisplay, aProofOfLock);

Просмотреть файл

@ -31,10 +31,9 @@
# include "SharedSurfaceIO.h"
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
# include "gfxPlatformGtk.h"
# include "SharedSurfaceDMABUF.h"
# include "mozilla/widget/DMABufLibWrapper.h"
#endif
#ifdef MOZ_WIDGET_ANDROID
@ -99,7 +98,7 @@ UniquePtr<SurfaceFactory> SurfaceFactory::Create(
#endif
case layers::TextureType::DMABUF:
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
if (gl.GetContextType() == GLContextType::EGL &&
widget::DMABufDevice::IsDMABufWebGLEnabled()) {
return SurfaceFactory_DMABUF::Create(gl);

Просмотреть файл

@ -10,7 +10,6 @@
#include "MozFramebuffer.h"
#include "mozilla/layers/LayersSurfaces.h" // for SurfaceDescriptor, etc
#include "mozilla/gfx/gfxVars.h"
#include "mozilla/widget/DMABufLibWrapper.h"
namespace mozilla::gl {

Просмотреть файл

@ -110,12 +110,14 @@ elif gl_provider == "Linux":
# as it includes X11 headers which cause conflicts.
SOURCES += [
"GLContextProviderLinux.cpp",
"SharedSurfaceDMABUF.cpp",
]
EXPORTS += ["GLContextGLX.h", "GLXLibrary.h"]
if CONFIG["MOZ_X11"]:
SOURCES += ["GLContextProviderGLX.cpp"]
if CONFIG["MOZ_WAYLAND"]:
SOURCES += ["SharedSurfaceDMABUF.cpp"]
UNIFIED_SOURCES += [
"AndroidSurfaceTexture.cpp",
"Colorspaces.cpp",

Просмотреть файл

@ -38,8 +38,15 @@ constexpr bool kIsMacOS =
false;
#endif
constexpr bool kIsLinux =
#ifdef MOZ_WIDGET_GTK
constexpr bool kIsX11 =
#ifdef MOZ_X11
true;
#else
false;
#endif
constexpr bool kIsWayland =
#ifdef MOZ_WAYLAND
true;
#else
false;

Просмотреть файл

@ -14,9 +14,8 @@
#include "PersistentBufferProvider.h"
#include "WebGLTypes.h"
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
# include "mozilla/widget/DMABufSurface.h"
# include "mozilla/widget/DMABufLibWrapper.h"
#endif
namespace mozilla {
@ -111,8 +110,8 @@ TextureType TexTypeForWebgl(KnowsCompositor* const knowsCompositor) {
return TextureType::MacIOSurface;
}
#ifdef MOZ_WIDGET_GTK
if (kIsLinux) {
#ifdef MOZ_WAYLAND
if (kIsWayland) {
if (!knowsCompositor->UsingSoftwareWebRender() &&
widget::DMABufDevice::IsDMABufWebGLEnabled()) {
return TextureType::DMABUF;

Просмотреть файл

@ -79,7 +79,7 @@ class SharedRGBImage;
class SurfaceTextureImage;
#elif defined(XP_MACOSX)
class MacIOSurfaceImage;
#elif MOZ_WIDGET_GTK
#elif MOZ_WAYLAND
class DMABUFSurfaceImage;
#endif
@ -147,7 +147,7 @@ class Image {
virtual MacIOSurfaceImage* AsMacIOSurfaceImage() { return nullptr; }
#endif
virtual PlanarYCbCrImage* AsPlanarYCbCrImage() { return nullptr; }
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
virtual DMABUFSurfaceImage* AsDMABUFSurfaceImage() { return nullptr; }
#endif

Просмотреть файл

@ -46,13 +46,11 @@
# include "mozilla/gfx/DeviceManagerDx.h"
# include "mozilla/layers/TextureD3D11.h"
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
# include <gtk/gtkx.h>
# include "gfxPlatformGtk.h"
# include "mozilla/layers/DMABUFTextureClientOGL.h"
# include "mozilla/widget/DMABufLibWrapper.h"
#endif
#ifdef MOZ_WAYLAND
# include "mozilla/widget/nsWaylandDisplay.h"
#endif
@ -274,7 +272,7 @@ static TextureType GetTextureType(gfx::SurfaceFormat aFormat,
}
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
if ((layersBackend == LayersBackend::LAYERS_WR &&
!aKnowsCompositor->UsingSoftwareWebRender()) &&
widget::DMABufDevice::IsDMABufTexturesEnabled() &&
@ -340,7 +338,7 @@ TextureData* TextureData::Create(TextureForwarder* aAllocator,
textureType = TextureType::Unknown;
}
#if defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK)
#if defined(XP_MACOSX) || defined(MOZ_WAYLAND)
gfx::BackendType moz2DBackend = BackendTypeForBackendSelector(
aKnowsCompositor->GetCompositorBackendType(), aSelector);
#endif
@ -351,7 +349,7 @@ TextureData* TextureData::Create(TextureForwarder* aAllocator,
return D3D11TextureData::Create(aSize, aFormat, aAllocFlags);
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
case TextureType::DMABUF:
return DMABUFTextureData::Create(aSize, aFormat, moz2DBackend);
#endif

Просмотреть файл

@ -231,27 +231,23 @@ EXPORTS.mozilla.layers += [
"ZoomConstraints.h",
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
EXPORTS.mozilla.layers += [
"DMABUFSurfaceImage.h",
"opengl/DMABUFTextureClientOGL.h",
"opengl/DMABUFTextureHostOGL.h",
]
SOURCES += [
"DMABUFSurfaceImage.cpp",
"opengl/DMABUFTextureClientOGL.cpp",
"opengl/DMABUFTextureHostOGL.cpp",
]
if CONFIG["MOZ_WAYLAND"]:
EXPORTS.mozilla.layers += [
"DMABUFSurfaceImage.h",
"NativeLayerWayland.h",
"opengl/DMABUFTextureClientOGL.h",
"opengl/DMABUFTextureHostOGL.h",
"SurfacePoolWayland.h",
]
UNIFIED_SOURCES += [
"NativeLayerWayland.cpp",
"SurfacePoolWayland.cpp",
]
SOURCES += [
"DMABUFSurfaceImage.cpp",
"opengl/DMABUFTextureClientOGL.cpp",
"opengl/DMABUFTextureHostOGL.cpp",
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa":
EXPORTS.mozilla.layers += [

Просмотреть файл

@ -50,7 +50,7 @@
#include "HeapCopyOfStackArray.h"
#include "GLBlitHelper.h"
#include "mozilla/gfx/Swizzle.h"
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
# include "mozilla/widget/GtkCompositorWidget.h"
#endif
#if MOZ_WIDGET_ANDROID
@ -745,7 +745,7 @@ Maybe<IntRect> CompositorOGL::BeginFrame(const nsIntRegion& aInvalidRegion,
MakeCurrent(ForceMakeCurrent);
mWidgetSize = LayoutDeviceIntSize::FromUnknownSize(rect.Size());
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
if (mWidget && mWidget->AsGTK()) {
mWidget->AsGTK()->SetEGLNativeWindowSize(mWidgetSize);
}
@ -1636,7 +1636,7 @@ void CompositorOGL::Pause() {
if (!gl() || gl()->IsDestroyed()) return;
// ReleaseSurface internally calls MakeCurrent
gl()->ReleaseSurface();
#elif defined(MOZ_WIDGET_GTK)
#elif defined(MOZ_WAYLAND)
// ReleaseSurface internally calls MakeCurrent
gl()->ReleaseSurface();
#endif
@ -1644,7 +1644,7 @@ void CompositorOGL::Pause() {
bool CompositorOGL::Resume() {
#if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_UIKIT) || \
defined(MOZ_WIDGET_GTK)
defined(MOZ_WAYLAND)
if (!gl() || gl()->IsDestroyed()) return false;
// RenewSurface internally calls MakeCurrent.

Просмотреть файл

@ -111,7 +111,7 @@ void ShaderConfigOGL::SetColorMultiplier(uint32_t aMultiplier) {
void ShaderConfigOGL::SetNV12(bool aEnabled) {
SetFeature(ENABLE_TEXTURE_NV12, aEnabled);
MOZ_ASSERT(!(mFeatures & ENABLE_TEXTURE_YCBCR));
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
SetFeature(ENABLE_TEXTURE_NV12_GA_SWITCH, aEnabled);
#endif
}

Просмотреть файл

@ -32,7 +32,7 @@
# include "mozilla/webrender/RenderAndroidSurfaceTextureHost.h"
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
# include "mozilla/layers/DMABUFTextureHostOGL.h"
#endif
@ -88,7 +88,7 @@ already_AddRefed<TextureHost> CreateTextureHostOGL(
break;
}
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
case SurfaceDescriptor::TSurfaceDescriptorDMABuf: {
result = new DMABUFTextureHostOGL(aFlags, aDesc);
break;

Просмотреть файл

@ -3046,7 +3046,7 @@ void gfxPlatform::InitWebGLConfig() {
}
}
if (kIsLinux) {
if (kIsWayland || kIsX11) {
nsCString discardFailureId;
int32_t status;
FeatureState& feature =

Просмотреть файл

@ -66,8 +66,6 @@
#ifdef MOZ_WAYLAND
# include <gdk/gdkwayland.h>
# include "mozilla/widget/nsWaylandDisplay.h"
#endif
#ifdef MOZ_WIDGET_GTK
# include "mozilla/widget/DMABufLibWrapper.h"
# include "mozilla/StaticPrefs_widget.h"
#endif
@ -185,6 +183,7 @@ void gfxPlatformGtk::InitX11EGLConfig() {
void gfxPlatformGtk::InitDmabufConfig() {
FeatureState& feature = gfxConfig::GetFeature(Feature::DMABUF);
#ifdef MOZ_WAYLAND
feature.EnableByDefault();
if (StaticPrefs::widget_dmabuf_force_enabled_AtStartup()) {
@ -218,6 +217,11 @@ void gfxPlatformGtk::InitDmabufConfig() {
failureId);
}
}
#else
feature.DisableByDefault(FeatureStatus::Unavailable,
"Wayland support missing",
"FEATURE_FAILURE_NO_WAYLAND"_ns);
#endif
}
bool gfxPlatformGtk::InitVAAPIConfig(bool aForceEnabledByUser) {
@ -227,6 +231,7 @@ bool gfxPlatformGtk::InitVAAPIConfig(bool aForceEnabledByUser) {
if (!XRE_IsParentProcess()) {
return feature.IsEnabled();
}
#ifdef MOZ_WAYLAND
feature.EnableByDefault();
int32_t status = nsIGfxInfo::FEATURE_STATUS_UNKNOWN;
@ -286,6 +291,11 @@ bool gfxPlatformGtk::InitVAAPIConfig(bool aForceEnabledByUser) {
gfxVars::SetHwDecodedVideoZeroCopy(true);
}
}
#else
feature.DisableByDefault(FeatureStatus::Unavailable,
"Wayland support missing",
"FEATURE_FAILURE_NO_WAYLAND"_ns);
#endif
return feature.IsEnabled();
}

Просмотреть файл

@ -23,7 +23,7 @@
# include "mozilla/widget/WinCompositorWidget.h"
#endif
#if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
#if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WAYLAND) || defined(MOZ_X11)
# include "mozilla/webrender/RenderCompositorEGL.h"
#endif
@ -205,7 +205,7 @@ UniquePtr<RenderCompositor> RenderCompositor::Create(
}
#endif
#if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
#if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WAYLAND) || defined(MOZ_X11)
UniquePtr<RenderCompositor> eglCompositor =
RenderCompositorEGL::Create(aWidget, aError);
if (eglCompositor) {

Просмотреть файл

@ -17,7 +17,7 @@
#include "mozilla/webrender/RenderThread.h"
#include "mozilla/widget/CompositorWidget.h"
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
# include "mozilla/WidgetUtilsGtk.h"
# include "mozilla/widget/GtkCompositorWidget.h"
#endif
@ -38,7 +38,7 @@ extern LazyLogModule gRenderThreadLog;
/* static */
UniquePtr<RenderCompositor> RenderCompositorEGL::Create(
const RefPtr<widget::CompositorWidget>& aWidget, nsACString& aError) {
if (kIsLinux && !gfx::gfxVars::UseEGL()) {
if ((kIsWayland || kIsX11) && !gfx::gfxVars::UseEGL()) {
return nullptr;
}
RefPtr<gl::GLContext> gl = RenderThread::Get()->SingletonGL(aError);
@ -83,12 +83,12 @@ RenderCompositorEGL::~RenderCompositorEGL() {
}
bool RenderCompositorEGL::BeginFrame() {
if (kIsLinux && mEGLSurface == EGL_NO_SURFACE) {
if ((kIsWayland || kIsX11) && mEGLSurface == EGL_NO_SURFACE) {
gfxCriticalNote
<< "We don't have EGLSurface to draw into. Called too early?";
return false;
}
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
if (mWidget->AsGTK()) {
mWidget->AsGTK()->SetEGLNativeWindowSize(GetBufferSize());
}
@ -127,7 +127,7 @@ RenderedFrameId RenderCompositorEGL::EndFrame(
#endif
RenderedFrameId frameId = GetNextRenderFrameId();
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
if (mWidget->IsHidden()) {
return frameId;
}
@ -192,7 +192,7 @@ bool RenderCompositorEGL::Resume() {
mHandlingNewSurfaceError = false;
gl::GLContextEGL::Cast(gl())->SetEGLSurfaceOverride(mEGLSurface);
} else if (kIsLinux) {
} else if (kIsWayland || kIsX11) {
// Destroy EGLSurface if it exists and create a new one. We will set the
// swap interval after MakeCurrent() has been called.
DestroyEGLSurface();

Просмотреть файл

@ -58,7 +58,7 @@ bool RenderCompositorSWGL::MakeCurrent() {
bool RenderCompositorSWGL::BeginFrame() {
mRenderWidgetSize = Some(mWidget->GetClientSize());
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
if (mLastRenderWidgetSize != mRenderWidgetSize.value()) {
mLastRenderWidgetSize = mRenderWidgetSize.value();
mRequestFullRender = true;
@ -269,7 +269,7 @@ bool RenderCompositorSWGL::RequestFullRender() {
// XXX Add partial present support.
return true;
#endif
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
// We're requested to do full render after Resume() on Wayland.
if (mRequestFullRender) {
mRequestFullRender = false;
@ -282,7 +282,7 @@ bool RenderCompositorSWGL::RequestFullRender() {
void RenderCompositorSWGL::Pause() {}
bool RenderCompositorSWGL::Resume() {
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
mRequestFullRender = true;
#endif
return true;

Просмотреть файл

@ -69,7 +69,7 @@ class RenderCompositorSWGL : public RenderCompositor {
RefPtr<gfx::DataSourceSurface> mSurface;
uint8_t* mMappedData = nullptr;
int32_t mMappedStride = 0;
#ifdef MOZ_WIDGET_GTK
#ifdef MOZ_WAYLAND
// On Wayland we need to request full render if widget size is changed
// because SW rendering backend reallocates and clears target surface.
LayoutDeviceIntSize mLastRenderWidgetSize;

Просмотреть файл

@ -50,6 +50,9 @@
#ifdef MOZ_WIDGET_GTK
# include "mozilla/WidgetUtilsGtk.h"
#endif
#ifdef MOZ_WAYLAND
# include "GLLibraryEGL.h"
#endif
@ -1531,7 +1534,7 @@ static already_AddRefed<gl::GLContext> CreateGLContextANGLE(
}
#endif
#if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
#if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WAYLAND) || defined(MOZ_X11)
static already_AddRefed<gl::GLContext> CreateGLContextEGL() {
// Create GLContext with dummy EGLSurface.
bool forHardwareWebRender = true;
@ -1570,7 +1573,7 @@ static already_AddRefed<gl::GLContext> CreateGLContext(nsACString& aError) {
}
#elif defined(MOZ_WIDGET_ANDROID)
gl = CreateGLContextEGL();
#elif defined(MOZ_WIDGET_GTK)
#elif defined(MOZ_WAYLAND) || defined(MOZ_X11)
if (gfx::gfxVars::UseEGL()) {
gl = CreateGLContextEGL();
}

Просмотреть файл

@ -90,20 +90,14 @@ if CONFIG["MOZ_ENABLE_D3D10_LAYER"]:
"RenderDcompSurfaceTextureHost.cpp",
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
EXPORTS.mozilla.webrender += [
"RenderDMABUFTextureHost.h",
]
SOURCES += [
"RenderDMABUFTextureHost.cpp",
]
if CONFIG["MOZ_WAYLAND"]:
EXPORTS.mozilla.webrender += [
"RenderCompositorNative.h",
"RenderDMABUFTextureHost.h",
]
SOURCES += [
"RenderCompositorNative.cpp",
"RenderDMABUFTextureHost.cpp",
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] in ("android", "gtk"):

Просмотреть файл

@ -20,7 +20,7 @@
#undef CONFIG_VP9_VAAPI_HWACCEL
#undef CONFIG_AV1_VAAPI_HWACCEL
#if defined(MOZ_WIDGET_GTK) && !defined(MOZ_FFVPX_AUDIOONLY)
#if defined(MOZ_WAYLAND) && !defined(MOZ_FFVPX_AUDIOONLY)
#define CONFIG_VAAPI 1
#define CONFIG_VAAPI_1 1
#define CONFIG_VP8_VAAPI_HWACCEL 1

Просмотреть файл

@ -113,7 +113,7 @@ if not CONFIG['MOZ_FFVPX_AUDIOONLY']:
'dav1d',
'media_libdav1d_asm',
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
if CONFIG['MOZ_WAYLAND']:
LOCAL_INCLUDES += ['/media/mozva']
SOURCES += [
'vaapi_av1.c',

Просмотреть файл

@ -63,7 +63,7 @@ if not CONFIG['MOZ_FFVPX_AUDIOONLY']:
'timecode.c',
'video_enc_params.c'
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
if CONFIG["MOZ_WAYLAND"]:
LOCAL_INCLUDES += ['/media/mozva']
SOURCES += [
'hwcontext_vaapi.c',

Просмотреть файл

@ -15374,6 +15374,30 @@
mirror: always
#ifdef MOZ_WAYLAND
# Whether to override the DMABuf blocklist.
- name: widget.dmabuf.force-enabled
type: bool
value: false
mirror: once
#ifdef NIGHTLY_BUILD
# Keep those pref hidden on non-nightly builds to avoid people accidentally
# turning it on.
# Use DMABuf for content textures.
# For testing purposes only.
- name: widget.dmabuf-textures.enabled
type: RelaxedAtomicBool
value: false
mirror: always
#endif
# Use DMABuf backend for WebGL.
- name: widget.dmabuf-webgl.enabled
type: RelaxedAtomicBool
value: true
mirror: always
# Force fractional scaling using wp_viewporter. Valid values: 0.5 - 8
- name: widget.wayland.fractional_buffer_scale
type: float
@ -15401,29 +15425,6 @@
#endif
#ifdef MOZ_WIDGET_GTK
# Whether to override the DMABuf blocklist.
- name: widget.dmabuf.force-enabled
type: bool
value: false
mirror: once
#ifdef NIGHTLY_BUILD
# Keep those pref hidden on non-nightly builds to avoid people accidentally
# turning it on.
# Use DMABuf for content textures.
# For testing purposes only.
- name: widget.dmabuf-textures.enabled
type: RelaxedAtomicBool
value: false
mirror: always
#endif
# Use DMABuf backend for WebGL.
- name: widget.dmabuf-webgl.enabled
type: RelaxedAtomicBool
value: true
mirror: always
# Use gdk_window_move_to_rect to move Wayland popups when available.
- name: widget.wayland.use-move-to-rect

Просмотреть файл

@ -430,15 +430,11 @@ def toolkit_choices(target):
elif target.os == "Android":
return ("cairo-android",)
else:
# cairo-gtk3 - X11 backend with optional Wayland backend (auto detected)
# cairo-gtk3-wayland - Wayland backend with optional X11 backend (auto detected)
# cairo-gtk3-x11-wayland - builds explicitly with X11 & Wayland backends
return (
"cairo-gtk3",
"cairo-gtk3-wayland",
"cairo-gtk3-x11-wayland",
"cairo-gtk3-wayland-only",
"cairo-gtk3-x11-only",
"cairo-gtk3-x11-wayland",
)
@ -489,40 +485,18 @@ def toolkit_gtk(toolkit):
return toolkit == "gtk"
@depends(toolkit_gtk, full_toolkit)
def toolkit_gtk_x11(toolkit_gtk, full_toolkit):
return toolkit_gtk and full_toolkit != "cairo-gtk3-wayland-only"
@depends(full_toolkit)
def toolkit_gtk_x11_optional(full_toolkit):
return full_toolkit == "cairo-gtk3-wayland"
@depends(toolkit_gtk, full_toolkit)
def toolkit_gtk_wayland(toolkit_gtk, full_toolkit):
return toolkit_gtk and full_toolkit != "cairo-gtk3-x11-only"
@depends(full_toolkit)
def toolkit_gtk_wayland_optional(full_toolkit):
return full_toolkit == "cairo-gtk3"
# Wayland support
# ==============================================================
wayland_headers = pkg_check_modules(
"MOZ_WAYLAND",
"gtk+-wayland-3.0 >= 3.14 xkbcommon >= 0.4.1",
allow_missing=toolkit_gtk_wayland_optional,
when=toolkit_gtk_wayland,
allow_missing=depends(full_toolkit)(lambda t: t == "cairo-gtk3"),
when=toolkit_gtk,
)
@depends(wayland_headers, toolkit_gtk, artifact_builds, toolkit_gtk_wayland)
def wayland_headers(wayland, toolkit_gtk, artifacts, toolkit_gtk_wayland):
if not toolkit_gtk_wayland:
return False
@depends(wayland_headers, toolkit_gtk, artifact_builds)
def wayland_headers(wayland, toolkit_gtk, artifacts):
if toolkit_gtk and artifacts:
return True
return wayland
@ -531,20 +505,22 @@ def wayland_headers(wayland, toolkit_gtk, artifacts, toolkit_gtk_wayland):
set_config("MOZ_WAYLAND", depends_if(wayland_headers)(lambda _: True))
set_define("MOZ_WAYLAND", depends_if(wayland_headers)(lambda _: True))
# Hardware-accelerated video decode with VAAPI and V4L2 on Linux
# Hardware-accelerated video decode with VAAPI and V4L2
# ==============================================================
@depends(target, wayland_headers)
def vaapi(target, wayland_headers):
# VAAPI is mostly used on x86(-64) but is sometimes used on ARM/ARM64 SOCs.
# VAAPI is only used in Wayland. It's mostly used on x86(-64) but is
# sometimes used on ARM/ARM64 SOCs. Wayland implies GTK and Linux.
if target.cpu in ("arm", "aarch64", "x86", "x86_64") and wayland_headers:
return True
@depends(target, wayland_headers)
def v4l2(target, wayland_headers):
# V4L2 decode is only used in GTK/Linux and generally only appears on
# embedded SOCs.
# V4L2 decode is only used in Wayland, and generally only appears on
# embedded SOCs. Wayland implies GTK and Linux.
if target.cpu in ("arm", "aarch64", "riscv64") and wayland_headers:
return True
@ -554,7 +530,6 @@ set_config("MOZ_ENABLE_V4L2", True, when=v4l2)
set_define("MOZ_ENABLE_VAAPI", True, when=vaapi)
set_define("MOZ_ENABLE_V4L2", True, when=v4l2)
# GL Provider
# ==============================================================
option("--with-gl-provider", nargs=1, help="Set GL provider backend type")
@ -1474,8 +1449,10 @@ def x11_libs(webrtc):
x11_headers = pkg_check_modules(
"MOZ_X11",
x11_libs,
allow_missing=toolkit_gtk_x11_optional,
when=toolkit_gtk_x11,
allow_missing=depends(full_toolkit)(lambda t: t == "cairo-gtk3-wayland"),
when=depends(full_toolkit)(
lambda t: t in ("cairo-gtk3", "cairo-gtk3-wayland", "cairo-gtk3-x11-wayland")
),
)
@ -1486,8 +1463,10 @@ pkg_check_modules(
"MOZ_X11_SM",
["ice", "sm"],
cflags_only=True,
allow_missing=toolkit_gtk_x11_optional,
when=toolkit_gtk_x11,
allow_missing=depends(full_toolkit)(lambda t: t == "cairo-gtk3-wayland"),
when=depends(full_toolkit)(
lambda t: t in ("cairo-gtk3", "cairo-gtk3-wayland", "cairo-gtk3-x11-wayland")
),
)

Просмотреть файл

@ -145,7 +145,6 @@ DIRS += [
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk':
DIRS += [
'/media/mozva',
'/toolkit/system/gnome',
]
@ -188,3 +187,6 @@ if CONFIG['ENABLE_TESTS']:
if CONFIG['FUZZING']:
DIRS += ['/tools/fuzzing']
if CONFIG['MOZ_WAYLAND']:
DIRS += ['/media/mozva']

Просмотреть файл

@ -29,7 +29,10 @@
#include <stdint.h>
#include <string.h>
#include <stdarg.h>
#include <gdk/gdk.h>
#ifdef MOZ_WAYLAND
# include <gdk/gdk.h>
#endif
#if defined(MOZ_ASAN) || defined(FUZZING)
# include <signal.h>
@ -276,6 +279,7 @@ static void get_pci_status() {
log("GLX_TEST: get_pci_status finished\n");
}
#ifdef MOZ_WAYLAND
static void set_render_device_path(const char* render_device_path) {
record_value("DRM_RENDERDEVICE\n%s\n", render_device_path);
}
@ -382,6 +386,7 @@ static bool get_render_name(const char* name) {
free(devices);
return result;
}
#endif
static bool get_egl_gl_status(EGLDisplay dpy,
PFNEGLGETPROCADDRESS eglGetProcAddress) {
@ -534,6 +539,7 @@ static bool get_egl_gl_status(EGLDisplay dpy,
strstr(deviceExtensions, "EGL_MESA_device_software")) {
record_value("MESA_ACCELERATED\nFALSE\n");
} else {
#ifdef MOZ_WAYLAND
const char* deviceString =
eglQueryDeviceStringEXT(device, EGL_DRM_DEVICE_FILE_EXT);
if (!deviceString || !get_render_name(deviceString)) {
@ -543,6 +549,7 @@ static bool get_egl_gl_status(EGLDisplay dpy,
set_render_device_path(renderNodeString);
}
}
#endif
}
}

Просмотреть файл

@ -179,7 +179,7 @@ include("/ipc/chromium/chromium-config.mozbuild")
FINAL_LIBRARY = "xul"
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
if CONFIG["MOZ_X11"] or CONFIG["MOZ_WAYLAND"]:
DEFINES["USE_GLX_TEST"] = True
DIRS += ["glxtest"]

Просмотреть файл

@ -4745,18 +4745,6 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) {
else {
gdk_display_manager_open_display(gdk_display_manager_get(), nullptr);
}
# endif
// Check that Wayland only and X11 only builds
// use appropriate displays.
# if defined(MOZ_WAYLAND) && !defined(MOZ_X11)
if (!GdkIsWaylandDisplay()) {
Output(true, "Wayland only build is missig Wayland display!\n");
}
# endif
# if !defined(MOZ_WAYLAND) && defined(MOZ_X11)
if (!GdkIsX11Display()) {
Output(true, "X11 only build is missig X11 display!\n");
}
# endif
}
#endif

Просмотреть файл

@ -5,11 +5,9 @@
* 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 "DMABufLibWrapper.h"
#ifdef MOZ_WAYLAND
# include "nsWaylandDisplay.h"
#endif
#include "base/message_loop.h" // for MessageLoop
#include "nsWaylandDisplay.h"
#include "DMABufLibWrapper.h"
#include "mozilla/StaticPrefs_widget.h"
#include "mozilla/StaticPrefs_media.h"
#include "mozilla/gfx/gfxVars.h"
@ -23,8 +21,6 @@
#include <fcntl.h>
#include <dlfcn.h>
#include <mutex>
#include <unistd.h>
#include "gbm.h"
using namespace mozilla::gfx;
@ -200,9 +196,7 @@ void DMABufDevice::Configure() {
return;
}
#ifdef MOZ_WAYLAND
LoadFormatModifiers();
#endif
LOGDMABUF(("DMABuf is enabled"));
}
@ -226,7 +220,6 @@ bool DMABufDevice::IsDMABufWebGLEnabled() {
StaticPrefs::widget_dmabuf_webgl_enabled();
}
#ifdef MOZ_WAYLAND
void DMABufDevice::SetModifiersToGfxVars() {
gfxVars::SetDMABufModifiersXRGB(mXRGBFormat.mModifiers);
gfxVars::SetDMABufModifiersARGB(mARGBFormat.mModifiers);
@ -236,7 +229,6 @@ void DMABufDevice::GetModifiersFromGfxVars() {
mXRGBFormat.mModifiers = gfxVars::DMABufModifiersXRGB().Clone();
mARGBFormat.mModifiers = gfxVars::DMABufModifiersARGB().Clone();
}
#endif
void DMABufDevice::DisableDMABufWebGL() { sUseWebGLDmabufBackend = false; }
@ -245,7 +237,6 @@ GbmFormat* DMABufDevice::GetGbmFormat(bool aHasAlpha) {
return format->mIsSupported ? format : nullptr;
}
#ifdef MOZ_WAYLAND
void DMABufDevice::AddFormatModifier(bool aHasAlpha, int aFormat,
uint32_t mModifierHi,
uint32_t mModifierLo) {
@ -324,7 +315,6 @@ void DMABufDevice::LoadFormatModifiers() {
GetModifiersFromGfxVars();
}
}
#endif
DMABufDevice* GetDMABufDevice() {
static DMABufDevice dmaBufDevice;

Просмотреть файл

@ -198,19 +198,16 @@ class DMABufDevice {
static bool IsDMABufWebGLEnabled();
static void DisableDMABufWebGL();
#ifdef MOZ_WAYLAND
void AddFormatModifier(bool aHasAlpha, int aFormat, uint32_t mModifierHi,
uint32_t mModifierLo);
#endif
GbmFormat* GetGbmFormat(bool aHasAlpha);
private:
void Configure();
#ifdef MOZ_WAYLAND
void LoadFormatModifiers();
void SetModifiersToGfxVars();
void GetModifiersFromGfxVars();
#endif
private:
GbmFormat mXRGBFormat;

Просмотреть файл

@ -5,7 +5,6 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "DMABufSurface.h"
#include "DMABufLibWrapper.h"
#include <fcntl.h>
#include <getopt.h>
@ -356,12 +355,11 @@ DMABufSurfaceRGBA::DMABufSurfaceRGBA()
mGmbFormat(nullptr),
mEGLImage(LOCAL_EGL_NO_IMAGE),
mTexture(0),
mGbmBufferFlags(0) {}
mGbmBufferFlags(0),
mWlBuffer(nullptr) {}
DMABufSurfaceRGBA::~DMABufSurfaceRGBA() {
#ifdef MOZ_WAYLAND
ReleaseWlBuffer();
#endif
ReleaseSurface();
}
@ -731,7 +729,6 @@ void DMABufSurfaceRGBA::ReleaseSurface() {
ReleaseDMABuf();
}
#ifdef MOZ_WAYLAND
bool DMABufSurfaceRGBA::CreateWlBuffer() {
MutexAutoLock lockFD(mSurfaceLock);
if (!OpenFileDescriptors(lockFD)) {
@ -761,7 +758,6 @@ bool DMABufSurfaceRGBA::CreateWlBuffer() {
void DMABufSurfaceRGBA::ReleaseWlBuffer() {
MozClearPointer(mWlBuffer, wl_buffer_destroy);
}
#endif
// We should synchronize DMA Buffer object access from CPU to avoid potential
// cache incoherency and data loss.

Просмотреть файл

@ -8,11 +8,9 @@
#define DMABufSurface_h__
#include <stdint.h>
#include "mozilla/widget/nsWaylandDisplay.h"
#include "mozilla/widget/va_drmcommon.h"
#include "GLTypes.h"
#include "nsISupportsImpl.h"
#include "mozilla/gfx/Types.h"
#include "mozilla/Mutex.h"
typedef void* EGLImageKHR;
typedef void* EGLSyncKHR;
@ -55,11 +53,6 @@ typedef enum {
class DMABufSurfaceRGBA;
class DMABufSurfaceYUV;
struct wl_buffer;
namespace mozilla::widget {
struct GbmFormat;
}
class DMABufSurface {
public:
@ -251,11 +244,9 @@ class DMABufSurfaceRGBA : public DMABufSurface {
GLuint GetTexture(int aPlane = 0) { return mTexture; };
EGLImageKHR GetEGLImage(int aPlane = 0) { return mEGLImage; };
#ifdef MOZ_WAYLAND
bool CreateWlBuffer();
void ReleaseWlBuffer();
wl_buffer* GetWlBuffer() { return mWlBuffer; };
#endif
int GetTextureCount() { return 1; };
@ -292,9 +283,7 @@ class DMABufSurfaceRGBA : public DMABufSurface {
EGLImageKHR mEGLImage;
GLuint mTexture;
uint32_t mGbmBufferFlags;
#ifdef MOZ_WAYLAND
wl_buffer* mWlBuffer = nullptr;
#endif
wl_buffer* mWlBuffer;
};
class DMABufSurfaceYUV : public DMABufSurface {

Просмотреть файл

@ -132,14 +132,14 @@ EGLNativeWindowType GtkCompositorWidget::GetEGLNativeWindow() {
return window;
}
#if defined(MOZ_WAYLAND)
void GtkCompositorWidget::SetEGLNativeWindowSize(
const LayoutDeviceIntSize& aEGLWindowSize) {
#if defined(MOZ_WAYLAND)
if (mWidget) {
mWidget->SetEGLNativeWindowSize(aEGLWindowSize);
}
#endif
}
#endif
LayoutDeviceIntRegion GtkCompositorWidget::GetTransparentRegion() {
// We need to clear target buffer alpha values of popup windows as

Просмотреть файл

@ -79,12 +79,11 @@ class GtkCompositorWidget : public CompositorWidget,
// Resume rendering with to given aXWindow (X11) or nsWindow (Wayland).
void EnableRendering(const uintptr_t aXWindow, const bool aShaped) override;
void SetEGLNativeWindowSize(const LayoutDeviceIntSize& aEGLWindowSize);
#if defined(MOZ_X11)
Window XWindow() const { return mXWindow; }
#endif
#if defined(MOZ_WAYLAND)
void SetEGLNativeWindowSize(const LayoutDeviceIntSize& aEGLWindowSize);
RefPtr<mozilla::layers::NativeLayerRoot> GetNativeLayerRoot() override;
#endif

Просмотреть файл

@ -47,29 +47,16 @@ EXPORTS.mozilla += [
]
EXPORTS.mozilla.widget += [
"CompositorWidgetChild.h",
"CompositorWidgetParent.h",
"DMABufLibWrapper.h",
"DMABufSurface.h",
"gbm.h",
"GtkCompositorWidget.h",
"InProcessGtkCompositorWidget.h",
"va_drmcommon.h",
"WindowSurface.h",
"WindowSurfaceProvider.h",
]
UNIFIED_SOURCES += [
"AsyncGtkClipboardRequest.cpp",
"CompositorWidgetChild.cpp",
"CompositorWidgetParent.cpp",
"DMABufLibWrapper.cpp",
"DMABufSurface.cpp",
"GfxInfo.cpp",
"gtk3drawing.cpp",
"GtkCompositorWidget.cpp",
"IMContextWrapper.cpp",
"InProcessGtkCompositorWidget.cpp",
"MozContainer.cpp",
"MPRISServiceHandler.cpp",
"NativeKeyBindings.cpp",
@ -87,7 +74,6 @@ UNIFIED_SOURCES += [
"nsLookAndFeel.cpp",
"nsSound.cpp",
"nsToolkit.cpp",
"nsUserIdleServiceGTK.cpp",
"nsWidgetFactory.cpp",
"ScreenHelperGTK.cpp",
"TaskbarProgress.cpp",
@ -107,6 +93,8 @@ SOURCES += [
if CONFIG["MOZ_WAYLAND"]:
UNIFIED_SOURCES += [
"DMABufLibWrapper.cpp",
"DMABufSurface.cpp",
"MozContainerWayland.cpp",
"nsClipboardWayland.cpp",
"nsWaylandDisplay.cpp",
@ -114,11 +102,27 @@ if CONFIG["MOZ_WAYLAND"]:
"WindowSurfaceWaylandMultiBuffer.cpp",
]
EXPORTS.mozilla.widget += [
"DMABufLibWrapper.h",
"DMABufSurface.h",
"MozContainerWayland.h",
"nsWaylandDisplay.h",
"WaylandBuffer.h",
]
if CONFIG["MOZ_X11"] or CONFIG["MOZ_WAYLAND"]:
UNIFIED_SOURCES += [
"CompositorWidgetChild.cpp",
"CompositorWidgetParent.cpp",
"InProcessGtkCompositorWidget.cpp",
"nsUserIdleServiceGTK.cpp",
]
EXPORTS.mozilla.widget += [
"CompositorWidgetChild.h",
"CompositorWidgetParent.h",
"GtkCompositorWidget.h",
"InProcessGtkCompositorWidget.h",
]
if CONFIG["MOZ_X11"]:
UNIFIED_SOURCES += [
"nsClipboardX11.cpp",
@ -153,9 +157,13 @@ LOCAL_INCLUDES += [
"/third_party/cups/include",
"/widget",
"/widget/headless",
"/widget/x11",
]
if CONFIG["MOZ_X11"] or CONFIG["MOZ_WAYLAND"]:
LOCAL_INCLUDES += [
"/widget/x11",
]
DEFINES["CAIRO_GFX"] = True
DEFINES["MOZ_APP_NAME"] = '"%s"' % CONFIG["MOZ_APP_NAME"]

Просмотреть файл

@ -16,5 +16,10 @@ CXXFLAGS += CONFIG["MOZ_PANGO_CFLAGS"]
OS_LIBS += CONFIG["MOZ_X11_LIBS"]
OS_LIBS += CONFIG["MOZ_GTK3_LIBS"]
USE_LIBS += ["mozva"]
LOCAL_INCLUDES += ["/media/mozva"]
if CONFIG["MOZ_WAYLAND"]:
USE_LIBS += [
"mozva",
]
LOCAL_INCLUDES += [
"/media/mozva",
]

Просмотреть файл

@ -14,7 +14,6 @@
#include <unistd.h>
#include <getopt.h>
#include <stdint.h>
#include <stdarg.h>
#if defined(MOZ_ASAN) || defined(FUZZING)
# include <signal.h>
@ -26,6 +25,7 @@
# include <stdio.h>
#endif
#include "mozilla/widget/mozwayland.h"
#include "prlink.h"
#include "va/va.h"
@ -34,8 +34,6 @@
// Print VA-API test results to stdout and logging to stderr
#define OUTPUT_PIPE 1
#define MIN(a, b) ((a) < (b) ? (a) : (b))
// bits to use decoding vaapitest() return values.
constexpr int CODEC_HW_H264 = 1 << 4;
constexpr int CODEC_HW_VP8 = 1 << 5;

Просмотреть файл

Просмотреть файл

@ -18,10 +18,12 @@ SOURCES += [
]
EXPORTS.mozilla.widget += [
"gbm.h",
"idle-inhibit-unstable-v1-client-protocol.h",
"linux-dmabuf-unstable-v1-client-protocol.h",
"pointer-constraints-unstable-v1-client-protocol.h",
"relative-pointer-unstable-v1-client-protocol.h",
"va_drmcommon.h",
"viewporter-client-protocol.h",
"xdg-activation-v1-client-protocol.h",
"xdg-output-unstable-v1-client-protocol.h",

Просмотреть файл