From ba25b2cbc30707476682bf7308c201b8f798b8db Mon Sep 17 00:00:00 2001 From: Martin Stransky Date: Tue, 28 Jun 2022 18:18:25 +0200 Subject: Updated to 102.0, Applied patch from https://src.fedoraproject.org/rpms/firefox/pull-request/43 --- .gitignore | 2 + D144284.diff | 77 ------------ D145725.diff | 132 -------------------- D146084.diff | 17 --- D146085.diff | 205 ------------------------------- D146086.diff | 65 ---------- D146087.diff | 19 --- D147266.diff | 31 ----- D147267.diff | 19 --- D147420.diff | 179 --------------------------- D147637.diff | 80 ++++++++---- D147720.diff | 73 ----------- D148946.diff | 40 +++--- D149238.diff | 84 ++----------- firefox.spec | 74 ++++++----- mozilla-1767946-profilemanagersize.patch | 30 ----- sources | 4 +- 17 files changed, 121 insertions(+), 1010 deletions(-) delete mode 100644 D144284.diff delete mode 100644 D145725.diff delete mode 100644 D146084.diff delete mode 100644 D146085.diff delete mode 100644 D146086.diff delete mode 100644 D146087.diff delete mode 100644 D147266.diff delete mode 100644 D147267.diff delete mode 100644 D147420.diff delete mode 100644 D147720.diff delete mode 100644 mozilla-1767946-profilemanagersize.patch diff --git a/.gitignore b/.gitignore index 4ba9226..c0734c0 100644 --- a/.gitignore +++ b/.gitignore @@ -515,3 +515,5 @@ firefox-3.6.4.source.tar.bz2 /firefox-langpacks-101.0-20220530.tar.xz /firefox-101.0.1.source.tar.xz /firefox-langpacks-101.0.1-20220609.tar.xz +/firefox-102.0.source.tar.xz +/firefox-langpacks-102.0-20220628.tar.xz diff --git a/D144284.diff b/D144284.diff deleted file mode 100644 index d838254..0000000 --- a/D144284.diff +++ /dev/null @@ -1,77 +0,0 @@ -diff --git a/gfx/layers/DMABUFSurfaceImage.cpp b/gfx/layers/DMABUFSurfaceImage.cpp ---- a/gfx/layers/DMABUFSurfaceImage.cpp -+++ b/gfx/layers/DMABUFSurfaceImage.cpp -@@ -39,20 +39,20 @@ - - StaticRefPtr sSnapshotContext; - static StaticMutex sSnapshotContextMutex MOZ_UNANNOTATED; - - already_AddRefed DMABUFSurfaceImage::GetAsSourceSurface() { -+ StaticMutexAutoLock lock(sSnapshotContextMutex); - if (!sSnapshotContext) { - nsCString discardFailureId; - sSnapshotContext = GLContextProvider::CreateHeadless({}, &discardFailureId); - if (!sSnapshotContext) { - gfxCriticalError() << "Failed to create snapshot GLContext."; - return nullptr; - } - } - -- StaticMutexAutoLock lock(sSnapshotContextMutex); - sSnapshotContext->MakeCurrent(); - - auto releaseTextures = - mozilla::MakeScopeExit([&] { mSurface->ReleaseTextures(); }); - -diff --git a/widget/gtk/DMABufSurface.cpp b/widget/gtk/DMABufSurface.cpp ---- a/widget/gtk/DMABufSurface.cpp -+++ b/widget/gtk/DMABufSurface.cpp -@@ -53,24 +53,13 @@ - using namespace mozilla::layers; - - #define BUFFER_FLAGS 0 - - static RefPtr sSnapshotContext; -+static StaticMutex sSnapshotContextMutex MOZ_UNANNOTATED; - static Atomic gNewSurfaceUID(1); - --bool EnsureSnapshotGLContext() { -- if (!sSnapshotContext) { -- nsCString discardFailureId; -- sSnapshotContext = GLContextProvider::CreateHeadless({}, &discardFailureId); -- if (!sSnapshotContext) { -- NS_WARNING("Failed to create snapshot GLContext"); -- return false; -- } -- } -- return true; --} -- - bool DMABufSurface::IsGlobalRefSet() const { - if (!mGlobalRefCountFd) { - return false; - } - struct pollfd pfd; -@@ -1263,13 +1252,18 @@ - } - - bool DMABufSurfaceYUV::VerifyTextureCreation() { - LOGDMABUF(("DMABufSurfaceYUV::VerifyTextureCreation() UID %d", mUID)); - -- if (!EnsureSnapshotGLContext()) { -- LOGDMABUF((" failed to create GL context!")); -- return false; -+ StaticMutexAutoLock lock(sSnapshotContextMutex); -+ if (!sSnapshotContext) { -+ nsCString discardFailureId; -+ sSnapshotContext = GLContextProvider::CreateHeadless({}, &discardFailureId); -+ if (!sSnapshotContext) { -+ NS_WARNING("Failed to create snapshot GLContext"); -+ return false; -+ } - } - - auto release = MakeScopeExit([&] { ReleaseEGLImages(sSnapshotContext); }); - - for (int i = 0; i < mBufferPlaneCount; i++) { - diff --git a/D145725.diff b/D145725.diff deleted file mode 100644 index 1c28b10..0000000 --- a/D145725.diff +++ /dev/null @@ -1,132 +0,0 @@ -diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h ---- a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h -+++ b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h -@@ -106,10 +106,11 @@ - bool IsHardwareAccelerated(nsACString& aFailureReason) const override; - bool IsHardwareAccelerated() const { - nsAutoCString dummy; - return IsHardwareAccelerated(dummy); - } -+ void UpdateDecodeTimes(TimeStamp aDecodeStart); - - #if LIBAVCODEC_VERSION_MAJOR >= 57 && LIBAVUTIL_VERSION_MAJOR >= 56 - layers::TextureClient* AllocateTextureClientForImage( - struct AVCodecContext* aCodecContext, layers::PlanarYCbCrImage* aImage); - -@@ -142,10 +143,15 @@ - static nsTArray mAcceleratedFormats; - #endif - RefPtr mImageAllocator; - RefPtr mImageContainer; - VideoInfo mInfo; -+ int mDecodedFrames; -+#if LIBAVCODEC_VERSION_MAJOR >= 58 -+ int mDecodedFramesLate; -+#endif -+ float mAverangeDecodeTime; - - class PtsCorrectionContext { - public: - PtsCorrectionContext(); - int64_t GuessCorrectPts(int64_t aPts, int64_t aDts); -diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp ---- a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp -+++ b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp -@@ -383,10 +383,15 @@ - mDisplay(nullptr), - #endif - mImageAllocator(aAllocator), - mImageContainer(aImageContainer), - mInfo(aConfig), -+ mDecodedFrames(0), -+#if LIBAVCODEC_VERSION_MAJOR >= 58 -+ mDecodedFramesLate(0), -+#endif -+ mAverangeDecodeTime(0), - mLowLatency(aLowLatency) { - FFMPEG_LOG("FFmpegVideoDecoder::FFmpegVideoDecoder MIME %s Codec ID %d", - aConfig.mMimeType.get(), mCodecID); - // Use a new MediaByteBuffer as the object will be modified during - // initialization. -@@ -769,17 +774,41 @@ - #else - return aFrame->pkt_pts; - #endif - } - -+void FFmpegVideoDecoder::UpdateDecodeTimes(TimeStamp aDecodeStart) { -+ mDecodedFrames++; -+ float decodeTime = (TimeStamp::Now() - aDecodeStart).ToMilliseconds(); -+ mAverangeDecodeTime = -+ (mAverangeDecodeTime * (mDecodedFrames - 1) + decodeTime) / -+ mDecodedFrames; -+ FFMPEG_LOG(" averange frame decode time %.2f ms decoded frames %d\n", -+ mAverangeDecodeTime, mDecodedFrames); -+#if LIBAVCODEC_VERSION_MAJOR >= 58 -+ int frameDuration = mFrame->pkt_duration; -+ if (frameDuration > 0 && frameDuration / 1000.0 < decodeTime) { -+ mDecodedFramesLate++; -+ FFMPEG_LOG( -+ " slow decode: failed to decode in time, frame duration %.2f ms, " -+ "decode time %.2f\n", -+ frameDuration / 1000.0, decodeTime); -+ FFMPEG_LOG(" all decoded frames / late decoded frames %d/%d\n", -+ mDecodedFrames, mDecodedFramesLate); -+ } -+#endif -+} -+ - MediaResult FFmpegVideoDecoder::DoDecode( - MediaRawData* aSample, uint8_t* aData, int aSize, bool* aGotFrame, - MediaDataDecoder::DecodedData& aResults) { - MOZ_ASSERT(mTaskQueue->IsOnCurrentThread()); - AVPacket packet; - mLib->av_init_packet(&packet); - -+ TimeStamp decodeStart = TimeStamp::Now(); -+ - packet.data = aData; - packet.size = aSize; - packet.dts = aSample->mTimecode.ToMicroseconds(); - packet.pts = aSample->mTime.ToMicroseconds(); - packet.flags = aSample->mKeyframe ? AV_PKT_FLAG_KEY : 0; -@@ -794,11 +823,10 @@ - // at a time, and we immediately call avcodec_receive_frame right after. - FFMPEG_LOG("avcodec_send_packet error: %d", res); - return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR, - RESULT_DETAIL("avcodec_send_packet error: %d", res)); - } -- - if (aGotFrame) { - *aGotFrame = false; - } - do { - if (!PrepareFrame()) { -@@ -831,10 +859,13 @@ - FFMPEG_LOG(" avcodec_receive_frame error: %d", res); - return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR, - RESULT_DETAIL("avcodec_receive_frame error: %d", res)); - } - -+ UpdateDecodeTimes(decodeStart); -+ decodeStart = TimeStamp::Now(); -+ - MediaResult rv; - # ifdef MOZ_WAYLAND_USE_VAAPI - if (IsHardwareAccelerated()) { - rv = CreateImageVAAPI(mFrame->pkt_pos, GetFramePts(mFrame), - mFrame->pkt_duration, aResults); -@@ -898,10 +929,12 @@ - *aGotFrame = false; - } - return NS_OK; - } - -+ UpdateDecodeTimes(decodeStart); -+ - // If we've decoded a frame then we need to output it - int64_t pts = - mPtsContext.GuessCorrectPts(GetFramePts(mFrame), mFrame->pkt_dts); - // Retrieve duration from dts. - // We use the first entry found matching this dts (this is done to - diff --git a/D146084.diff b/D146084.diff deleted file mode 100644 index 8ed2c28..0000000 --- a/D146084.diff +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/gfx/layers/ipc/LayersSurfaces.ipdlh b/gfx/layers/ipc/LayersSurfaces.ipdlh ---- a/gfx/layers/ipc/LayersSurfaces.ipdlh -+++ b/gfx/layers/ipc/LayersSurfaces.ipdlh -@@ -57,10 +57,12 @@ - uint64_t[] modifier; - uint32_t flags; - FileDescriptor[] fds; - uint32_t[] width; - uint32_t[] height; -+ uint32_t[] widthAligned; -+ uint32_t[] heightAligned; - uint32_t[] format; - uint32_t[] strides; - uint32_t[] offsets; - YUVColorSpace yUVColorSpace; - ColorRange colorRange; - diff --git a/D146085.diff b/D146085.diff deleted file mode 100644 index 6b037f6..0000000 --- a/D146085.diff +++ /dev/null @@ -1,205 +0,0 @@ -diff --git a/widget/gtk/DMABufSurface.h b/widget/gtk/DMABufSurface.h ---- a/widget/gtk/DMABufSurface.h -+++ b/widget/gtk/DMABufSurface.h -@@ -275,11 +275,11 @@ - static already_AddRefed CreateYUVSurface( - int aWidth, int aHeight, void** aPixelData = nullptr, - int* aLineSizes = nullptr); - - static already_AddRefed CreateYUVSurface( -- const VADRMPRIMESurfaceDescriptor& aDesc); -+ const VADRMPRIMESurfaceDescriptor& aDesc, int aWidth, int aHeight); - - bool Serialize(mozilla::layers::SurfaceDescriptor& aOutDescriptor); - - DMABufSurfaceYUV* GetAsDMABufSurfaceYUV() { return this; }; - -@@ -304,11 +304,12 @@ - mozilla::gfx::YUVColorSpace GetYUVColorSpace() { return mColorSpace; } - - DMABufSurfaceYUV(); - - bool UpdateYUVData(void** aPixelData, int* aLineSizes); -- bool UpdateYUVData(const VADRMPRIMESurfaceDescriptor& aDesc); -+ bool UpdateYUVData(const VADRMPRIMESurfaceDescriptor& aDesc, int aWidth, -+ int aHeight); - - bool VerifyTextureCreation(); - - private: - ~DMABufSurfaceYUV(); -@@ -329,10 +330,15 @@ - bool CreateEGLImage(mozilla::gl::GLContext* aGLContext, int aPlane); - void ReleaseEGLImages(mozilla::gl::GLContext* aGLContext); - - int mWidth[DMABUF_BUFFER_PLANES]; - int mHeight[DMABUF_BUFFER_PLANES]; -+ // Aligned size of the surface imported from VADRMPRIMESurfaceDescriptor. -+ // It's used only internally to create EGLImage as some GL drivers -+ // needs that (Bug 1724385). -+ int mWidthAligned[DMABUF_BUFFER_PLANES]; -+ int mHeightAligned[DMABUF_BUFFER_PLANES]; - EGLImageKHR mEGLImage[DMABUF_BUFFER_PLANES]; - GLuint mTexture[DMABUF_BUFFER_PLANES]; - mozilla::gfx::YUVColorSpace mColorSpace = - mozilla::gfx::YUVColorSpace::Default; - }; -diff --git a/widget/gtk/DMABufSurface.cpp b/widget/gtk/DMABufSurface.cpp ---- a/widget/gtk/DMABufSurface.cpp -+++ b/widget/gtk/DMABufSurface.cpp -@@ -479,13 +479,13 @@ - if (mGlobalRefCountFd) { - refCountFDs.AppendElement(ipc::FileDescriptor(mGlobalRefCountFd)); - } - - aOutDescriptor = SurfaceDescriptorDMABuf( -- mSurfaceType, modifiers, mGbmBufferFlags, fds, width, height, format, -- strides, offsets, GetYUVColorSpace(), mColorRange, fenceFDs, mUID, -- refCountFDs); -+ mSurfaceType, modifiers, mGbmBufferFlags, fds, width, height, width, -+ height, format, strides, offsets, GetYUVColorSpace(), mColorRange, -+ fenceFDs, mUID, refCountFDs); - return true; - } - - bool DMABufSurfaceRGBA::CreateTexture(GLContext* aGLContext, int aPlane) { - MOZ_ASSERT(!mEGLImage && !mTexture, "EGLImage is already created!"); -@@ -807,15 +807,15 @@ - } - return surf.forget(); - } - - already_AddRefed DMABufSurfaceYUV::CreateYUVSurface( -- const VADRMPRIMESurfaceDescriptor& aDesc) { -+ const VADRMPRIMESurfaceDescriptor& aDesc, int aWidth, int aHeight) { - RefPtr surf = new DMABufSurfaceYUV(); - LOGDMABUF(("DMABufSurfaceYUV::CreateYUVSurface() UID %d from desc\n", - surf->GetUID())); -- if (!surf->UpdateYUVData(aDesc)) { -+ if (!surf->UpdateYUVData(aDesc, aWidth, aHeight)) { - return nullptr; - } - return surf.forget(); - } - -@@ -829,11 +829,16 @@ - } - return surf.forget(); - } - - DMABufSurfaceYUV::DMABufSurfaceYUV() -- : DMABufSurface(SURFACE_NV12), mWidth(), mHeight(), mTexture() { -+ : DMABufSurface(SURFACE_NV12), -+ mWidth(), -+ mHeight(), -+ mWidthAligned(), -+ mHeightAligned(), -+ mTexture() { - for (int i = 0; i < DMABUF_BUFFER_PLANES; i++) { - mEGLImage[i] = LOCAL_EGL_NO_IMAGE; - } - } - -@@ -870,11 +875,12 @@ - close(mDmabufFds[aPlane]); - mDmabufFds[aPlane] = -1; - } - } - --bool DMABufSurfaceYUV::UpdateYUVData(const VADRMPRIMESurfaceDescriptor& aDesc) { -+bool DMABufSurfaceYUV::UpdateYUVData(const VADRMPRIMESurfaceDescriptor& aDesc, -+ int aWidth, int aHeight) { - if (aDesc.num_layers > DMABUF_BUFFER_PLANES || - aDesc.num_objects > DMABUF_BUFFER_PLANES) { - return false; - } - -@@ -907,12 +913,14 @@ - - mBufferModifiers[i] = aDesc.objects[object].drm_format_modifier; - mDrmFormats[i] = aDesc.layers[i].drm_format; - mOffsets[i] = aDesc.layers[i].offset[0]; - mStrides[i] = aDesc.layers[i].pitch[0]; -- mWidth[i] = aDesc.width >> i; -- mHeight[i] = aDesc.height >> i; -+ mWidthAligned[i] = aDesc.width >> i; -+ mHeightAligned[i] = aDesc.height >> i; -+ mWidth[i] = aWidth >> i; -+ mHeight[i] = aHeight >> i; - - LOGDMABUF((" plane %d size %d x %d format %x", i, mWidth[i], mHeight[i], - mDrmFormats[i])); - } - -@@ -1044,10 +1052,12 @@ - strerror(errno))); - return false; - } - mWidth[i] = aDesc.width()[i]; - mHeight[i] = aDesc.height()[i]; -+ mWidthAligned[i] = aDesc.widthAligned()[i]; -+ mHeightAligned[i] = aDesc.heightAligned()[i]; - mDrmFormats[i] = aDesc.format()[i]; - mStrides[i] = aDesc.strides()[i]; - mOffsets[i] = aDesc.offsets()[i]; - mBufferModifiers[i] = aDesc.modifier()[i]; - LOGDMABUF((" plane %d fd %d size %d x %d format %x", i, mDmabufFds[i], -@@ -1072,10 +1082,12 @@ - - bool DMABufSurfaceYUV::Serialize( - mozilla::layers::SurfaceDescriptor& aOutDescriptor) { - AutoTArray width; - AutoTArray height; -+ AutoTArray widthBytes; -+ AutoTArray heightBytes; - AutoTArray format; - AutoTArray fds; - AutoTArray strides; - AutoTArray offsets; - AutoTArray modifiers; -@@ -1090,10 +1102,12 @@ - } - - for (int i = 0; i < mBufferPlaneCount; i++) { - width.AppendElement(mWidth[i]); - height.AppendElement(mHeight[i]); -+ widthBytes.AppendElement(mWidthAligned[i]); -+ heightBytes.AppendElement(mHeightAligned[i]); - format.AppendElement(mDrmFormats[i]); - fds.AppendElement(ipc::FileDescriptor(mDmabufFds[i])); - strides.AppendElement(mStrides[i]); - offsets.AppendElement(mOffsets[i]); - modifiers.AppendElement(mBufferModifiers[i]); -@@ -1108,12 +1122,13 @@ - if (mGlobalRefCountFd) { - refCountFDs.AppendElement(ipc::FileDescriptor(mGlobalRefCountFd)); - } - - aOutDescriptor = SurfaceDescriptorDMABuf( -- mSurfaceType, modifiers, 0, fds, width, height, format, strides, offsets, -- GetYUVColorSpace(), mColorRange, fenceFDs, mUID, refCountFDs); -+ mSurfaceType, modifiers, 0, fds, width, height, widthBytes, heightBytes, -+ format, strides, offsets, GetYUVColorSpace(), mColorRange, fenceFDs, mUID, -+ refCountFDs); - return true; - } - - bool DMABufSurfaceYUV::CreateEGLImage(GLContext* aGLContext, int aPlane) { - LOGDMABUF( -@@ -1131,13 +1146,13 @@ - return false; - } - - nsTArray attribs; - attribs.AppendElement(LOCAL_EGL_WIDTH); -- attribs.AppendElement(mWidth[aPlane]); -+ attribs.AppendElement(mWidthAligned[aPlane]); - attribs.AppendElement(LOCAL_EGL_HEIGHT); -- attribs.AppendElement(mHeight[aPlane]); -+ attribs.AppendElement(mHeightAligned[aPlane]); - attribs.AppendElement(LOCAL_EGL_LINUX_DRM_FOURCC_EXT); - attribs.AppendElement(mDrmFormats[aPlane]); - #define ADD_PLANE_ATTRIBS_NV12(plane_idx) \ - attribs.AppendElement(LOCAL_EGL_DMA_BUF_PLANE##plane_idx##_FD_EXT); \ - attribs.AppendElement(mDmabufFds[aPlane]); \ - diff --git a/D146086.diff b/D146086.diff deleted file mode 100644 index c6790ad..0000000 --- a/D146086.diff +++ /dev/null @@ -1,65 +0,0 @@ -diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h b/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h ---- a/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h -+++ b/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.h -@@ -112,12 +112,13 @@ - public: - VideoFramePool(); - ~VideoFramePool(); - - RefPtr> GetVideoFrameSurface( -- VADRMPRIMESurfaceDescriptor& aVaDesc, AVCodecContext* aAVCodecContext, -- AVFrame* aAVFrame, FFmpegLibWrapper* aLib); -+ VADRMPRIMESurfaceDescriptor& aVaDesc, int aWidth, int aHeight, -+ AVCodecContext* aAVCodecContext, AVFrame* aAVFrame, -+ FFmpegLibWrapper* aLib); - void ReleaseUnusedVAAPIFrames(); - - private: - RefPtr> GetFreeVideoFrameSurface(); - -diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp b/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp ---- a/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp -+++ b/dom/media/platforms/ffmpeg/FFmpegVideoFramePool.cpp -@@ -111,12 +111,13 @@ - return nullptr; - } - - RefPtr> - VideoFramePool::GetVideoFrameSurface( -- VADRMPRIMESurfaceDescriptor& aVaDesc, AVCodecContext* aAVCodecContext, -- AVFrame* aAVFrame, FFmpegLibWrapper* aLib) { -+ VADRMPRIMESurfaceDescriptor& aVaDesc, int aWidth, int aHeight, -+ AVCodecContext* aAVCodecContext, AVFrame* aAVFrame, -+ FFmpegLibWrapper* aLib) { - if (aVaDesc.fourcc != VA_FOURCC_NV12 && aVaDesc.fourcc != VA_FOURCC_YV12 && - aVaDesc.fourcc != VA_FOURCC_P010) { - FFMPEG_LOG("Unsupported VA-API surface format %d", aVaDesc.fourcc); - return nullptr; - } -@@ -124,11 +125,11 @@ - MutexAutoLock lock(mSurfaceLock); - RefPtr> videoSurface = - GetFreeVideoFrameSurface(); - if (!videoSurface) { - RefPtr surface = -- DMABufSurfaceYUV::CreateYUVSurface(aVaDesc); -+ DMABufSurfaceYUV::CreateYUVSurface(aVaDesc, aWidth, aHeight); - if (!surface) { - return nullptr; - } - FFMPEG_LOG("Created new VA-API DMABufSurface UID = %d", surface->GetUID()); - RefPtr> surf = -@@ -142,11 +143,11 @@ - } - videoSurface = surf; - mDMABufSurfaces.AppendElement(std::move(surf)); - } else { - RefPtr surface = videoSurface->GetDMABufSurface(); -- if (!surface->UpdateYUVData(aVaDesc)) { -+ if (!surface->UpdateYUVData(aVaDesc, aWidth, aHeight)) { - return nullptr; - } - FFMPEG_LOG("Reusing VA-API DMABufSurface UID = %d", surface->GetUID()); - } - videoSurface->LockVAAPIData(aAVCodecContext, aAVFrame, aLib); - diff --git a/D146087.diff b/D146087.diff deleted file mode 100644 index d5dcf9d..0000000 --- a/D146087.diff +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp ---- a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp -+++ b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp -@@ -1164,12 +1164,12 @@ - NS_ERROR_DOM_MEDIA_DECODE_ERR, - RESULT_DETAIL("Unable to get frame by vaExportSurfaceHandle()")); - } - - MOZ_ASSERT(mTaskQueue->IsOnCurrentThread()); -- auto surface = mVideoFramePool->GetVideoFrameSurface(vaDesc, mCodecContext, -- mFrame, mLib); -+ auto surface = mVideoFramePool->GetVideoFrameSurface( -+ vaDesc, mFrame->width, mFrame->height, mCodecContext, mFrame, mLib); - if (!surface) { - return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR, - RESULT_DETAIL("VAAPI dmabuf allocation error")); - } - surface->SetYUVColorSpace(GetFrameColorSpace()); - diff --git a/D147266.diff b/D147266.diff deleted file mode 100644 index 5f8a580..0000000 --- a/D147266.diff +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp ---- a/widget/gtk/nsWindow.cpp -+++ b/widget/gtk/nsWindow.cpp -@@ -1430,20 +1430,20 @@ - } - #endif - if (popup->mPopupContextMenu && !popup->mPopupAnchored) { - LOG(" popup [%p] is first context menu", popup); - popup->mRelativePopupPosition = popup->mPopupPosition; -- } else if (popup->mPopupAnchored) { -- LOG(" popup [%p] is anchored", popup); -- if (!popup->mPopupMatchesLayout) { -- NS_WARNING("Anchored popup does not match layout!"); -- } -- popup->mRelativePopupPosition = popup->mPopupPosition; - } else if (popup->mWaylandPopupPrev->mWaylandToplevel == nullptr) { - LOG(" popup [%p] has toplevel as parent", popup); - popup->mRelativePopupPosition = popup->mPopupPosition; - } else { -+ if (popup->mPopupAnchored) { -+ LOG(" popup [%p] is anchored", popup); -+ if (!popup->mPopupMatchesLayout) { -+ NS_WARNING("Anchored popup does not match layout!"); -+ } -+ } - GdkPoint parent = WaylandGetParentPosition(); - - LOG(" popup [%p] uses transformed coordinates\n", popup); - LOG(" parent position [%d, %d]\n", parent.x, parent.y); - LOG(" popup position [%d, %d]\n", popup->mPopupPosition.x, - diff --git a/D147267.diff b/D147267.diff deleted file mode 100644 index 1191b85..0000000 --- a/D147267.diff +++ /dev/null @@ -1,19 +0,0 @@ -diff -up firefox-100.0.2/widget/gtk/nsWindow.cpp.D147267 firefox-100.0.2/widget/gtk/nsWindow.cpp ---- firefox-100.0.2/widget/gtk/nsWindow.cpp.D147267 2022-05-25 11:46:48.291005415 +0200 -+++ firefox-100.0.2/widget/gtk/nsWindow.cpp 2022-05-25 11:50:11.447736538 +0200 -@@ -2359,11 +2359,12 @@ void nsWindow::WaylandPopupMove() { - LOG(" popup use move to rect %d\n", mPopupUseMoveToRect); - - if (!mPopupUseMoveToRect) { -- if (mNeedsShow && mPopupType != ePopupTypeTooltip) { -+ if (mPopupHint == ePopupTypeMenu) { - // Workaround for https://gitlab.gnome.org/GNOME/gtk/-/issues/4308 -- // Tooltips are created as subsurfaces with relative position. -+ // Tooltips/Utility popus are created as subsurfaces with relative position. -+ // Menu uses absolute positions. - LOG(" use gtk_window_move(%d, %d) for hidden widget\n", mPopupPosition.x, -- mPopupPosition.y); -+ mPopupPosition.y); - gtk_window_move(GTK_WINDOW(mShell), mPopupPosition.x, mPopupPosition.y); - } else { - LOG(" use gtk_window_move(%d, %d) for visible widget\n", diff --git a/D147420.diff b/D147420.diff deleted file mode 100644 index 1ee3af1..0000000 --- a/D147420.diff +++ /dev/null @@ -1,179 +0,0 @@ -diff -up firefox-101.0/gfx/gl/GLContextEGL.h.D147420.diff firefox-101.0/gfx/gl/GLContextEGL.h ---- firefox-101.0/gfx/gl/GLContextEGL.h.D147420.diff 2022-05-27 01:16:54.000000000 +0200 -+++ firefox-101.0/gfx/gl/GLContextEGL.h 2022-06-07 09:01:17.487787806 +0200 -@@ -106,6 +106,9 @@ class GLContextEGL final : public GLCont - static RefPtr CreateEGLPBufferOffscreenContextImpl( - std::shared_ptr, const GLContextCreateDesc&, - const gfx::IntSize& size, bool aUseGles, nsACString* const out_FailureId); -+ static RefPtr CreateEGLSurfacelessContext( -+ const std::shared_ptr display, -+ const GLContextCreateDesc& desc, nsACString* const out_failureId); - - static EGLSurface CreateEGLSurfaceForCompositorWidget( - widget::CompositorWidget* aCompositorWidget, const EGLConfig aConfig); -diff -up firefox-101.0/gfx/gl/GLContextProviderEGL.cpp.D147420.diff firefox-101.0/gfx/gl/GLContextProviderEGL.cpp ---- firefox-101.0/gfx/gl/GLContextProviderEGL.cpp.D147420.diff 2022-05-27 01:16:54.000000000 +0200 -+++ firefox-101.0/gfx/gl/GLContextProviderEGL.cpp 2022-06-07 09:01:17.487787806 +0200 -@@ -1190,16 +1190,42 @@ RefPtr GLContextEGL::Creat - } - - /*static*/ -+RefPtr GLContextEGL::CreateEGLSurfacelessContext( -+ const std::shared_ptr display, const GLContextCreateDesc& desc, -+ nsACString* const out_failureId) { -+ const EGLConfig config = {}; -+ auto fullDesc = GLContextDesc{desc}; -+ fullDesc.isOffscreen = true; -+ RefPtr gl = GLContextEGL::CreateGLContext( -+ display, fullDesc, config, EGL_NO_SURFACE, false, out_failureId); -+ if (!gl) { -+ NS_WARNING("Failed to create surfaceless GL context"); -+ return nullptr; -+ } -+ return gl; -+} -+ -+/*static*/ - already_AddRefed GLContextProviderEGL::CreateHeadless( - const GLContextCreateDesc& desc, nsACString* const out_failureId) { - const auto display = DefaultEglDisplay(out_failureId); - if (!display) { - return nullptr; - } -- mozilla::gfx::IntSize dummySize = mozilla::gfx::IntSize(16, 16); -- auto ret = GLContextEGL::CreateEGLPBufferOffscreenContext( -- display, desc, dummySize, out_failureId); -- return ret.forget(); -+ RefPtr gl; -+#ifdef MOZ_WAYLAND -+ if (!gdk_display_get_default() && -+ display->IsExtensionSupported(EGLExtension::MESA_platform_surfaceless)) { -+ gl = -+ GLContextEGL::CreateEGLSurfacelessContext(display, desc, out_failureId); -+ } else -+#endif -+ { -+ mozilla::gfx::IntSize dummySize = mozilla::gfx::IntSize(16, 16); -+ gl = GLContextEGL::CreateEGLPBufferOffscreenContext( -+ display, desc, dummySize, out_failureId); -+ } -+ return gl.forget(); - } - - // Don't want a global context on Android as 1) share groups across 2 threads -diff -up firefox-101.0/gfx/gl/GLDefs.h.D147420.diff firefox-101.0/gfx/gl/GLDefs.h ---- firefox-101.0/gfx/gl/GLDefs.h.D147420.diff 2022-05-27 01:16:54.000000000 +0200 -+++ firefox-101.0/gfx/gl/GLDefs.h 2022-06-07 09:01:17.487787806 +0200 -@@ -104,6 +104,9 @@ bool CheckContextLost(const GLContext* g - // EGL_ANGLE_image_d3d11_texture - #define LOCAL_EGL_D3D11_TEXTURE_ANGLE 0x3484 - -+// EGL_MESA_platform_surfaceless -+#define LOCAL_EGL_PLATFORM_SURFACELESS_MESA 0x31DD -+ - // clang-format on - - #endif -diff -up firefox-101.0/gfx/gl/GLLibraryEGL.cpp.D147420.diff firefox-101.0/gfx/gl/GLLibraryEGL.cpp ---- firefox-101.0/gfx/gl/GLLibraryEGL.cpp.D147420.diff 2022-05-27 01:16:54.000000000 +0200 -+++ firefox-101.0/gfx/gl/GLLibraryEGL.cpp 2022-06-07 09:03:04.077349997 +0200 -@@ -82,7 +82,8 @@ static const char* sEGLExtensionNames[] - "EGL_KHR_swap_buffers_with_damage", - "EGL_EXT_buffer_age", - "EGL_KHR_partial_update", -- "EGL_NV_robustness_video_memory_purge"}; -+ "EGL_NV_robustness_video_memory_purge", -+ "EGL_MESA_platform_surfaceless"}; - - PRLibrary* LoadApitraceLibrary() { - const char* path = nullptr; -@@ -151,6 +152,19 @@ static std::shared_ptr GetAn - return EglDisplay::Create(egl, display, false, aProofOfLock); - } - -+#ifdef MOZ_WAYLAND -+static std::shared_ptr GetAndInitSurfacelessDisplay( -+ GLLibraryEGL& egl, const StaticMutexAutoLock& aProofOfLock) { -+ const EGLAttrib attrib_list[] = {LOCAL_EGL_NONE}; -+ const EGLDisplay display = egl.fGetPlatformDisplay( -+ LOCAL_EGL_PLATFORM_SURFACELESS_MESA, EGL_DEFAULT_DISPLAY, attrib_list); -+ if (display == EGL_NO_DISPLAY) { -+ return nullptr; -+ } -+ return EglDisplay::Create(egl, display, true, aProofOfLock); -+} -+#endif -+ - static std::shared_ptr GetAndInitWARPDisplay( - GLLibraryEGL& egl, void* displayType, - const StaticMutexAutoLock& aProofOfLock) { -@@ -629,6 +643,11 @@ bool GLLibraryEGL::Init(nsACString* cons - END_OF_SYMBOLS}; - (void)fnLoadSymbols(symbols); - } -+ { -+ const SymLoadStruct symbols[] = {SYMBOL(GetPlatformDisplay), -+ END_OF_SYMBOLS}; -+ (void)fnLoadSymbols(symbols); -+ } - - return true; - } -@@ -806,7 +825,9 @@ std::shared_ptr GLLibraryEGL - #ifdef MOZ_WAYLAND - // Some drivers doesn't support EGL_DEFAULT_DISPLAY - GdkDisplay* gdkDisplay = gdk_display_get_default(); -- if (widget::GdkIsWaylandDisplay(gdkDisplay)) { -+ if (!gdkDisplay) { -+ ret = GetAndInitSurfacelessDisplay(*this, aProofOfLock); -+ } else if (widget::GdkIsWaylandDisplay(gdkDisplay)) { - nativeDisplay = widget::WaylandDisplayGetWLDisplay(gdkDisplay); - if (!nativeDisplay) { - NS_WARNING("Failed to get wl_display."); -@@ -814,7 +835,9 @@ std::shared_ptr GLLibraryEGL - } - } - #endif -- ret = GetAndInitDisplay(*this, nativeDisplay, aProofOfLock); -+ if (!ret) { -+ ret = GetAndInitDisplay(*this, nativeDisplay, aProofOfLock); -+ } - } - - if (!ret) { -diff -up firefox-101.0/gfx/gl/GLLibraryEGL.h.D147420.diff firefox-101.0/gfx/gl/GLLibraryEGL.h ---- firefox-101.0/gfx/gl/GLLibraryEGL.h.D147420.diff 2022-05-27 01:16:54.000000000 +0200 -+++ firefox-101.0/gfx/gl/GLLibraryEGL.h 2022-06-07 09:01:17.487787806 +0200 -@@ -107,6 +107,7 @@ enum class EGLExtension { - EXT_buffer_age, - KHR_partial_update, - NV_robustness_video_memory_purge, -+ MESA_platform_surfaceless, - Max - }; - -diff -up firefox-101.0/widget/gtk/DMABufSurface.cpp.D147420.diff firefox-101.0/widget/gtk/DMABufSurface.cpp ---- firefox-101.0/widget/gtk/DMABufSurface.cpp.D147420.diff 2022-06-07 09:01:17.486787773 +0200 -+++ firefox-101.0/widget/gtk/DMABufSurface.cpp 2022-06-07 09:01:17.487787806 +0200 -@@ -1259,7 +1259,7 @@ bool DMABufSurfaceYUV::VerifyTextureCrea - nsCString discardFailureId; - sSnapshotContext = GLContextProvider::CreateHeadless({}, &discardFailureId); - if (!sSnapshotContext) { -- NS_WARNING("Failed to create snapshot GLContext"); -+ LOGDMABUF((" failed to create snapshot GLContext")); - return false; - } - } -@@ -1268,10 +1268,12 @@ bool DMABufSurfaceYUV::VerifyTextureCrea - - for (int i = 0; i < mBufferPlaneCount; i++) { - if (!CreateEGLImage(sSnapshotContext, i)) { -+ LOGDMABUF((" failed to create EGL image!")); - return false; - } - } - -+ LOGDMABUF((" success")); - return true; - } - diff --git a/D147637.diff b/D147637.diff index 0a84b25..89bb25e 100644 --- a/D147637.diff +++ b/D147637.diff @@ -1,7 +1,11 @@ -diff -up firefox-101.0/gfx/gl/SharedSurfaceDMABUF.cpp.D147637.diff firefox-101.0/gfx/gl/SharedSurfaceDMABUF.cpp ---- firefox-101.0/gfx/gl/SharedSurfaceDMABUF.cpp.D147637.diff 2022-05-27 01:16:54.000000000 +0200 -+++ firefox-101.0/gfx/gl/SharedSurfaceDMABUF.cpp 2022-06-07 09:37:29.361992695 +0200 -@@ -12,22 +12,37 @@ +diff -up firefox-102.0/gfx/gl/SharedSurfaceDMABUF.cpp.D147637.diff firefox-102.0/gfx/gl/SharedSurfaceDMABUF.cpp +--- firefox-102.0/gfx/gl/SharedSurfaceDMABUF.cpp.D147637.diff 2022-06-23 09:08:46.000000000 +0200 ++++ firefox-102.0/gfx/gl/SharedSurfaceDMABUF.cpp 2022-06-28 16:37:52.264835137 +0200 +@@ -9,25 +9,58 @@ + #include "GLContextEGL.h" + #include "MozFramebuffer.h" + #include "mozilla/layers/LayersSurfaces.h" // for SurfaceDescriptor, etc ++#include "mozilla/gfx/gfxVars.h" namespace mozilla::gl { @@ -21,33 +25,54 @@ diff -up firefox-101.0/gfx/gl/SharedSurfaceDMABUF.cpp.D147637.diff firefox-101.0 - const RefPtr surface = DMABufSurfaceRGBA::CreateDMABufSurface( - desc.size.width, desc.size.height, flags); - if (!surface || !surface->CreateTexture(desc.gl)) { +- return nullptr; + const auto& gle = GLContextEGL::Cast(desc.gl); + const auto& context = gle->mContext; + const auto& egl = *(gle->mEgl); + -+ if (!HasDmaBufExtensions(gle)) { - return nullptr; ++ RefPtr surface; ++ UniquePtr fb; ++ ++ if (!HasDmaBufExtensions(gle) || !gfx::gfxVars::UseDMABufSurfaceExport()) { ++ // Use MESA_image_dma_buf_export is not supported or it's broken. ++ // Create dmabuf surface directly via. GBM and create ++ // EGLImage/framebuffer over it. ++ const auto flags = static_cast( ++ DMABUF_TEXTURE | DMABUF_USE_MODIFIERS | DMABUF_ALPHA); ++ surface = DMABufSurfaceRGBA::CreateDMABufSurface(desc.size.width, ++ desc.size.height, flags); ++ if (!surface || !surface->CreateTexture(desc.gl)) { ++ return nullptr; ++ } ++ const auto tex = surface->GetTexture(); ++ fb = MozFramebuffer::CreateForBacking(desc.gl, desc.size, 0, false, ++ LOCAL_GL_TEXTURE_2D, tex); ++ if (!fb) return nullptr; ++ } else { ++ // Use MESA_image_dma_buf_export so create EGLImage/framebuffer directly ++ // and derive dmabuf from it. ++ fb = MozFramebuffer::Create(desc.gl, desc.size, 0, false); ++ if (!fb) return nullptr; ++ ++ const auto buffer = reinterpret_cast(fb->ColorTex()); ++ const auto image = ++ egl.fCreateImage(context, LOCAL_EGL_GL_TEXTURE_2D, buffer, nullptr); ++ if (!image) return nullptr; ++ ++ surface = DMABufSurfaceRGBA::CreateDMABufSurface( ++ desc.gl, image, desc.size.width, desc.size.height); ++ if (!surface) return nullptr; } - +- - const auto tex = surface->GetTexture(); - auto fb = MozFramebuffer::CreateForBacking(desc.gl, desc.size, 0, false, - LOCAL_GL_TEXTURE_2D, tex); -+ auto fb = MozFramebuffer::Create(desc.gl, desc.size, 0, false); - if (!fb) return nullptr; - -+ const auto buffer = reinterpret_cast(fb->ColorTex()); -+ const auto image = -+ egl.fCreateImage(context, LOCAL_EGL_GL_TEXTURE_2D, buffer, nullptr); -+ if (!image) return nullptr; -+ -+ const RefPtr surface = DMABufSurfaceRGBA::CreateDMABufSurface( -+ desc.gl, image, desc.size.width, desc.size.height); -+ if (!surface) return nullptr; -+ +- if (!fb) return nullptr; +- return AsUnique(new SharedSurface_DMABUF(desc, std::move(fb), surface)); } -@@ -61,7 +76,7 @@ UniquePtr Surface +@@ -61,7 +94,7 @@ UniquePtr Surface } auto dmabufFactory = MakeUnique(gl); @@ -56,13 +81,13 @@ diff -up firefox-101.0/gfx/gl/SharedSurfaceDMABUF.cpp.D147637.diff firefox-101.0 return dmabufFactory; } -@@ -71,8 +86,38 @@ UniquePtr Surface +@@ -71,8 +104,38 @@ UniquePtr Surface return nullptr; } +bool SurfaceFactory_DMABUF::CanCreateSurface(GLContext& gl) { + UniquePtr test = -+ CreateShared(gfx::IntSize(1, 1)); ++ CreateShared(gfx::IntSize(1, 1), gfx::ColorSpace2::SRGB); + if (!test) { + LOGDMABUF(( + "SurfaceFactory_DMABUF::CanCreateSurface() failed to create surface.")); @@ -96,15 +121,16 @@ diff -up firefox-101.0/gfx/gl/SharedSurfaceDMABUF.cpp.D147637.diff firefox-101.0 layers::TextureType::DMABUF, true}) {} - } // namespace mozilla::gl -diff -up firefox-101.0/gfx/gl/SharedSurfaceDMABUF.h.D147637.diff firefox-101.0/gfx/gl/SharedSurfaceDMABUF.h ---- firefox-101.0/gfx/gl/SharedSurfaceDMABUF.h.D147637.diff 2022-06-07 09:31:23.678228010 +0200 -+++ firefox-101.0/gfx/gl/SharedSurfaceDMABUF.h 2022-06-07 09:36:39.691512555 +0200 -@@ -59,10 +59,7 @@ class SurfaceFactory_DMABUF : public Sur +diff -up firefox-102.0/gfx/gl/SharedSurfaceDMABUF.h.D147637.diff firefox-102.0/gfx/gl/SharedSurfaceDMABUF.h +--- firefox-102.0/gfx/gl/SharedSurfaceDMABUF.h.D147637.diff 2022-06-23 09:08:47.000000000 +0200 ++++ firefox-102.0/gfx/gl/SharedSurfaceDMABUF.h 2022-06-28 15:00:20.339991965 +0200 +@@ -59,11 +59,7 @@ class SurfaceFactory_DMABUF : public Sur return SharedSurface_DMABUF::Create(desc); } - bool CanCreateSurface() { -- UniquePtr test = CreateShared(gfx::IntSize(1, 1)); +- UniquePtr test = +- CreateShared(gfx::IntSize(1, 1), gfx::ColorSpace2::SRGB); - return test != nullptr; - } + bool CanCreateSurface(GLContext& gl); diff --git a/D147720.diff b/D147720.diff deleted file mode 100644 index 9287f44..0000000 --- a/D147720.diff +++ /dev/null @@ -1,73 +0,0 @@ -diff --git a/widget/gtk/DMABufSurface.h b/widget/gtk/DMABufSurface.h ---- a/widget/gtk/DMABufSurface.h -+++ b/widget/gtk/DMABufSurface.h -@@ -146,11 +146,16 @@ - DMABufSurface(SurfaceType aSurfaceType); - - protected: - virtual bool Create(const mozilla::layers::SurfaceDescriptor& aDesc) = 0; - -+ // Import global ref count from IPC by file descriptor. - void GlobalRefCountImport(int aFd); -+ // Export global ref count by file descriptor. This adds global ref count -+ // reference to the surface. -+ // It's used when dmabuf surface is shared with another process via. IPC. -+ int GlobalRefCountExport(); - void GlobalRefCountDelete(); - - void ReleaseDMABuf(); - - void* MapInternal(uint32_t aX, uint32_t aY, uint32_t aWidth, uint32_t aHeight, -diff --git a/widget/gtk/DMABufSurface.cpp b/widget/gtk/DMABufSurface.cpp ---- a/widget/gtk/DMABufSurface.cpp -+++ b/widget/gtk/DMABufSurface.cpp -@@ -105,11 +105,21 @@ - } - - void DMABufSurface::GlobalRefCountImport(int aFd) { - MOZ_ASSERT(!mGlobalRefCountFd); - mGlobalRefCountFd = aFd; -- GlobalRefAdd(); -+ MOZ_DIAGNOSTIC_ASSERT(IsGlobalRefSet(), -+ "We're importing unreferenced surface!"); -+} -+ -+int DMABufSurface::GlobalRefCountExport() { -+ if (mGlobalRefCountFd) { -+ MOZ_DIAGNOSTIC_ASSERT(IsGlobalRefSet(), -+ "We're exporting unreferenced surface!"); -+ GlobalRefAdd(); -+ } -+ return mGlobalRefCountFd; - } - - void DMABufSurface::GlobalRefCountDelete() { - if (mGlobalRefCountFd) { - GlobalRefRelease(); -@@ -475,11 +485,11 @@ - if (mSync) { - fenceFDs.AppendElement(ipc::FileDescriptor(mSyncFd)); - } - - if (mGlobalRefCountFd) { -- refCountFDs.AppendElement(ipc::FileDescriptor(mGlobalRefCountFd)); -+ refCountFDs.AppendElement(ipc::FileDescriptor(GlobalRefCountExport())); - } - - aOutDescriptor = SurfaceDescriptorDMABuf( - mSurfaceType, modifiers, mGbmBufferFlags, fds, width, height, width, - height, format, strides, offsets, GetYUVColorSpace(), mColorRange, -@@ -1118,11 +1128,11 @@ - if (mSync) { - fenceFDs.AppendElement(ipc::FileDescriptor(mSyncFd)); - } - - if (mGlobalRefCountFd) { -- refCountFDs.AppendElement(ipc::FileDescriptor(mGlobalRefCountFd)); -+ refCountFDs.AppendElement(ipc::FileDescriptor(GlobalRefCountExport())); - } - - aOutDescriptor = SurfaceDescriptorDMABuf( - mSurfaceType, modifiers, 0, fds, width, height, widthBytes, heightBytes, - format, strides, offsets, GetYUVColorSpace(), mColorRange, fenceFDs, mUID, - diff --git a/D148946.diff b/D148946.diff index e4d9aa4..0ab7380 100644 --- a/D148946.diff +++ b/D148946.diff @@ -1,7 +1,7 @@ -diff -up firefox-101.0.1/gfx/gl/GLContextProviderEGL.cpp.D148946.diff firefox-101.0.1/gfx/gl/GLContextProviderEGL.cpp ---- firefox-101.0.1/gfx/gl/GLContextProviderEGL.cpp.D148946.diff 2022-06-14 14:25:07.290229683 +0200 -+++ firefox-101.0.1/gfx/gl/GLContextProviderEGL.cpp 2022-06-14 14:25:07.313230450 +0200 -@@ -1190,42 +1190,16 @@ RefPtr GLContextEGL::Creat +diff -up firefox-102.0/gfx/gl/GLContextProviderEGL.cpp.D148946.diff firefox-102.0/gfx/gl/GLContextProviderEGL.cpp +--- firefox-102.0/gfx/gl/GLContextProviderEGL.cpp.D148946.diff 2022-06-23 09:08:47.000000000 +0200 ++++ firefox-102.0/gfx/gl/GLContextProviderEGL.cpp 2022-06-28 14:47:40.904700050 +0200 +@@ -1182,42 +1182,16 @@ RefPtr GLContextEGL::Creat } /*static*/ @@ -48,9 +48,9 @@ diff -up firefox-101.0.1/gfx/gl/GLContextProviderEGL.cpp.D148946.diff firefox-10 } // Don't want a global context on Android as 1) share groups across 2 threads -diff -up firefox-101.0.1/gfx/gl/GLDefs.h.D148946.diff firefox-101.0.1/gfx/gl/GLDefs.h ---- firefox-101.0.1/gfx/gl/GLDefs.h.D148946.diff 2022-06-14 14:25:07.290229683 +0200 -+++ firefox-101.0.1/gfx/gl/GLDefs.h 2022-06-14 14:25:07.313230450 +0200 +diff -up firefox-102.0/gfx/gl/GLDefs.h.D148946.diff firefox-102.0/gfx/gl/GLDefs.h +--- firefox-102.0/gfx/gl/GLDefs.h.D148946.diff 2022-06-23 09:08:47.000000000 +0200 ++++ firefox-102.0/gfx/gl/GLDefs.h 2022-06-28 14:47:40.904700050 +0200 @@ -104,9 +104,6 @@ bool CheckContextLost(const GLContext* g // EGL_ANGLE_image_d3d11_texture #define LOCAL_EGL_D3D11_TEXTURE_ANGLE 0x3484 @@ -61,10 +61,10 @@ diff -up firefox-101.0.1/gfx/gl/GLDefs.h.D148946.diff firefox-101.0.1/gfx/gl/GLD // clang-format on #endif -diff -up firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp.D148946.diff firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp ---- firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp.D148946.diff 2022-06-14 14:25:07.307230250 +0200 -+++ firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp 2022-06-14 14:27:03.477110994 +0200 -@@ -53,9 +53,15 @@ StaticRefPtr GLLibraryEGL: +diff -up firefox-102.0/gfx/gl/GLLibraryEGL.cpp.D148946.diff firefox-102.0/gfx/gl/GLLibraryEGL.cpp +--- firefox-102.0/gfx/gl/GLLibraryEGL.cpp.D148946.diff 2022-06-28 14:47:40.900699918 +0200 ++++ firefox-102.0/gfx/gl/GLLibraryEGL.cpp 2022-06-28 14:49:47.810911199 +0200 +@@ -54,9 +54,15 @@ StaticRefPtr GLLibraryEGL: // should match the order of EGLExtensions, and be null-terminated. static const char* sEGLLibraryExtensionNames[] = { @@ -83,7 +83,7 @@ diff -up firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp.D148946.diff firefox-101.0.1/gf // should match the order of EGLExtensions, and be null-terminated. static const char* sEGLExtensionNames[] = { -@@ -83,7 +89,6 @@ static const char* sEGLExtensionNames[] +@@ -84,7 +90,6 @@ static const char* sEGLExtensionNames[] "EGL_EXT_buffer_age", "EGL_KHR_partial_update", "EGL_NV_robustness_video_memory_purge", @@ -91,7 +91,7 @@ diff -up firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp.D148946.diff firefox-101.0.1/gf "EGL_EXT_image_dma_buf_import", "EGL_EXT_image_dma_buf_import_modifiers", "EGL_MESA_image_dma_buf_export"}; -@@ -156,8 +161,52 @@ static std::shared_ptr GetAn +@@ -157,8 +162,52 @@ static std::shared_ptr GetAn } #ifdef MOZ_WAYLAND @@ -144,7 +144,7 @@ diff -up firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp.D148946.diff firefox-101.0.1/gf const EGLAttrib attrib_list[] = {LOCAL_EGL_NONE}; const EGLDisplay display = egl.fGetPlatformDisplay( LOCAL_EGL_PLATFORM_SURFACELESS_MESA, EGL_DEFAULT_DISPLAY, attrib_list); -@@ -610,9 +659,9 @@ bool GLLibraryEGL::Init(nsACString* cons +@@ -611,9 +660,9 @@ bool GLLibraryEGL::Init(nsACString* cons (void)fnLoadSymbols(symbols); } { @@ -157,7 +157,7 @@ diff -up firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp.D148946.diff firefox-101.0.1/gf (void)fnLoadSymbols(symbols); } { -@@ -657,6 +706,10 @@ bool GLLibraryEGL::Init(nsACString* cons +@@ -658,6 +707,10 @@ bool GLLibraryEGL::Init(nsACString* cons END_OF_SYMBOLS}; (void)fnLoadSymbols(symbols); } @@ -169,7 +169,7 @@ diff -up firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp.D148946.diff firefox-101.0.1/gf return true; } @@ -835,7 +888,10 @@ std::shared_ptr GLLibraryEGL - // Some drivers doesn't support EGL_DEFAULT_DISPLAY + #ifdef MOZ_WAYLAND GdkDisplay* gdkDisplay = gdk_display_get_default(); if (!gdkDisplay) { - ret = GetAndInitSurfacelessDisplay(*this, aProofOfLock); @@ -178,11 +178,11 @@ diff -up firefox-101.0.1/gfx/gl/GLLibraryEGL.cpp.D148946.diff firefox-101.0.1/gf + ret = GetAndInitSurfacelessDisplay(*this, aProofOfLock); + } } else if (widget::GdkIsWaylandDisplay(gdkDisplay)) { + // Wayland does not support EGL_DEFAULT_DISPLAY nativeDisplay = widget::WaylandDisplayGetWLDisplay(gdkDisplay); - if (!nativeDisplay) { -diff -up firefox-101.0.1/gfx/gl/GLLibraryEGL.h.D148946.diff firefox-101.0.1/gfx/gl/GLLibraryEGL.h ---- firefox-101.0.1/gfx/gl/GLLibraryEGL.h.D148946.diff 2022-06-14 14:25:07.307230250 +0200 -+++ firefox-101.0.1/gfx/gl/GLLibraryEGL.h 2022-06-14 14:25:07.313230450 +0200 +diff -up firefox-102.0/gfx/gl/GLLibraryEGL.h.D148946.diff firefox-102.0/gfx/gl/GLLibraryEGL.h +--- firefox-102.0/gfx/gl/GLLibraryEGL.h.D148946.diff 2022-06-28 14:47:40.899699885 +0200 ++++ firefox-102.0/gfx/gl/GLLibraryEGL.h 2022-06-28 14:47:40.904700050 +0200 @@ -71,7 +71,10 @@ enum class EGLLibExtension { ANGLE_device_creation_d3d11, ANGLE_platform_angle, diff --git a/D149238.diff b/D149238.diff index 290c536..e89c1bf 100644 --- a/D149238.diff +++ b/D149238.diff @@ -1,86 +1,20 @@ -diff -up firefox-101.0.1/gfx/config/gfxVars.h.D149238.diff firefox-101.0.1/gfx/config/gfxVars.h ---- firefox-101.0.1/gfx/config/gfxVars.h.D149238.diff 2022-06-14 14:28:15.301514131 +0200 -+++ firefox-101.0.1/gfx/config/gfxVars.h 2022-06-14 14:29:32.221087732 +0200 +diff -up firefox-102.0/gfx/config/gfxVars.h.D149238.diff firefox-102.0/gfx/config/gfxVars.h +--- firefox-102.0/gfx/config/gfxVars.h.D149238.diff 2022-06-23 09:08:47.000000000 +0200 ++++ firefox-102.0/gfx/config/gfxVars.h 2022-06-28 16:40:54.130895063 +0200 @@ -91,7 +91,8 @@ class gfxVarReceiver; _(AllowWebGPU, bool, false) \ _(UseVP8HwDecode, bool, false) \ _(UseVP9HwDecode, bool, false) \ -- _(HwDecodedVideoNoCopy, bool, false) -+ _(HwDecodedVideoNoCopy, bool, false) \ +- _(HwDecodedVideoZeroCopy, bool, false) ++ _(HwDecodedVideoZeroCopy, bool, false) \ + _(UseDMABufSurfaceExport, bool, true) /* Add new entries above this line. */ -diff -up firefox-101.0.1/gfx/gl/SharedSurfaceDMABUF.cpp.D149238.diff firefox-101.0.1/gfx/gl/SharedSurfaceDMABUF.cpp ---- firefox-101.0.1/gfx/gl/SharedSurfaceDMABUF.cpp.D149238.diff 2022-06-14 14:28:15.297513997 +0200 -+++ firefox-101.0.1/gfx/gl/SharedSurfaceDMABUF.cpp 2022-06-14 14:28:15.301514131 +0200 -@@ -9,6 +9,7 @@ - #include "GLContextEGL.h" - #include "MozFramebuffer.h" - #include "mozilla/layers/LayersSurfaces.h" // for SurfaceDescriptor, etc -+#include "mozilla/gfx/gfxVars.h" - - namespace mozilla::gl { - -@@ -27,22 +28,39 @@ UniquePtr SharedSu - const auto& context = gle->mContext; - const auto& egl = *(gle->mEgl); - -- if (!HasDmaBufExtensions(gle)) { -- return nullptr; -- } -- -- auto fb = MozFramebuffer::Create(desc.gl, desc.size, 0, false); -- if (!fb) return nullptr; -- -- const auto buffer = reinterpret_cast(fb->ColorTex()); -- const auto image = -- egl.fCreateImage(context, LOCAL_EGL_GL_TEXTURE_2D, buffer, nullptr); -- if (!image) return nullptr; -- -- const RefPtr surface = DMABufSurfaceRGBA::CreateDMABufSurface( -- desc.gl, image, desc.size.width, desc.size.height); -- if (!surface) return nullptr; -+ RefPtr surface; -+ UniquePtr fb; - -+ if (!HasDmaBufExtensions(gle) || !gfx::gfxVars::UseDMABufSurfaceExport()) { -+ // Use MESA_image_dma_buf_export is not supported or it's broken. -+ // Create dmabuf surface directly via. GBM and create -+ // EGLImage/framebuffer over it. -+ const auto flags = static_cast( -+ DMABUF_TEXTURE | DMABUF_USE_MODIFIERS | DMABUF_ALPHA); -+ surface = DMABufSurfaceRGBA::CreateDMABufSurface(desc.size.width, -+ desc.size.height, flags); -+ if (!surface || !surface->CreateTexture(desc.gl)) { -+ return nullptr; -+ } -+ const auto tex = surface->GetTexture(); -+ fb = MozFramebuffer::CreateForBacking(desc.gl, desc.size, 0, false, -+ LOCAL_GL_TEXTURE_2D, tex); -+ if (!fb) return nullptr; -+ } else { -+ // Use MESA_image_dma_buf_export so create EGLImage/framebuffer directly -+ // and derive dmabuf from it. -+ fb = MozFramebuffer::Create(desc.gl, desc.size, 0, false); -+ if (!fb) return nullptr; -+ -+ const auto buffer = reinterpret_cast(fb->ColorTex()); -+ const auto image = -+ egl.fCreateImage(context, LOCAL_EGL_GL_TEXTURE_2D, buffer, nullptr); -+ if (!image) return nullptr; -+ -+ surface = DMABufSurfaceRGBA::CreateDMABufSurface( -+ desc.gl, image, desc.size.width, desc.size.height); -+ if (!surface) return nullptr; -+ } - return AsUnique(new SharedSurface_DMABUF(desc, std::move(fb), surface)); - } - -diff -up firefox-101.0.1/gfx/thebes/gfxPlatform.cpp.D149238.diff firefox-101.0.1/gfx/thebes/gfxPlatform.cpp ---- firefox-101.0.1/gfx/thebes/gfxPlatform.cpp.D149238.diff 2022-06-08 23:06:36.000000000 +0200 -+++ firefox-101.0.1/gfx/thebes/gfxPlatform.cpp 2022-06-14 14:28:15.302514165 +0200 -@@ -2851,6 +2851,17 @@ void gfxPlatform::InitWebGLConfig() { +diff -up firefox-102.0/gfx/thebes/gfxPlatform.cpp.D149238.diff firefox-102.0/gfx/thebes/gfxPlatform.cpp +--- firefox-102.0/gfx/thebes/gfxPlatform.cpp.D149238.diff 2022-06-23 09:08:47.000000000 +0200 ++++ firefox-102.0/gfx/thebes/gfxPlatform.cpp 2022-06-28 16:40:54.130895063 +0200 +@@ -2861,6 +2861,17 @@ void gfxPlatform::InitWebGLConfig() { gfxVars::SetAllowEglRbab(false); } } diff --git a/firefox.spec b/firefox.spec index 92efbb1..8523688 100644 --- a/firefox.spec +++ b/firefox.spec @@ -139,6 +139,12 @@ ExcludeArch: aarch64 %bcond_without langpacks +%if %{with langpacks} +%if 0%{?fedora} >= 37 +%bcond_without langpacks_subpkg +%endif +%endif + %if !%{release_build} %global pre_tag .npgo %endif @@ -162,13 +168,13 @@ ExcludeArch: aarch64 Summary: Mozilla Firefox Web browser Name: firefox -Version: 101.0.1 -Release: 7%{?pre_tag}%{?dist} +Version: 102.0 +Release: 1%{?pre_tag}%{?dist} URL: https://www.mozilla.org/firefox/ License: MPLv1.1 or GPLv2+ or LGPLv2+ Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz %if %{with langpacks} -Source1: firefox-langpacks-%{version}%{?pre_version}-20220609.tar.xz +Source1: firefox-langpacks-%{version}%{?pre_version}-20220628.tar.xz %endif Source2: cbindgen-vendor.tar.xz Source10: firefox-mozconfig @@ -217,8 +223,6 @@ Patch55: firefox-testing.patch Patch61: firefox-glibc-dynstack.patch Patch62: build-python.patch Patch71: 0001-GLIBCXX-fix-for-GCC-12.patch -Patch73: D147266.diff -Patch74: D147267.diff Patch75: mozilla-1773336.patch # Test patches @@ -243,25 +247,9 @@ Patch402: mozilla-1196777.patch Patch407: mozilla-1667096.patch Patch408: mozilla-1663844.patch Patch415: mozilla-1670333.patch -Patch418: mozilla-1767946-profilemanagersize.patch # VA-API fixes -Patch420: D144284.diff -Patch421: D147420.diff -Patch422: D147720.diff Patch423: D147874.diff -Patch424: D146084.diff -Patch425: D146085.diff -Patch426: D146086.diff -Patch427: D146087.diff -Patch428: D145725.diff -Patch429: D145966.diff -Patch430: D145871.diff -Patch431: D146271.diff -Patch432: D146272.diff -Patch433: D146273.diff -Patch434: D146274.diff -Patch435: D146275.diff # NVIDIA mzbz#1735929 Patch440: D147635.diff @@ -336,6 +324,11 @@ BuildRequires: icu Requires: mozilla-filesystem Recommends: mozilla-openh264 >= 2.1.1 +%if %{with langpacks_subpkg} +Recommends: firefox-langpacks = %{version}-%{release} +%else +Obsoletes: firefox-langpacks < %{version}-%{release} +%endif Recommends: libva Requires: p11-kit-trust Requires: pciutils-libs @@ -436,6 +429,17 @@ Provides: webclient Mozilla Firefox is an open-source web browser, designed for standards compliance, performance and portability. +%if %{with langpacks_subpkg} +%package langpacks +Summary: Firefox langpacks +Requires: %{name} = %{version}-%{release} +%description langpacks +The firefox-langpacks package contains all the localization +and translations langpack add-ons. +%files langpacks -f %{name}.lang +%dir %{langpackdir} +%endif + %package x11 Summary: Firefox X11 launcher. Requires: %{name} @@ -491,8 +495,6 @@ This package contains results of tests executed during build. %patch53 -p1 -b .firefox-gcc-build %patch54 -p1 -b .1669639 %patch71 -p1 -b .0001-GLIBCXX-fix-for-GCC-12 -%patch73 -p1 -b .D147266 -%patch74 -p1 -b .D147267 # Needs for new cbindgen only %patch75 -p1 -b .1773336 @@ -516,24 +518,9 @@ This package contains results of tests executed during build. %patch407 -p1 -b .1667096 %patch408 -p1 -b .1663844 %patch415 -p1 -b .1670333 -%patch418 -p1 -b .mozilla-1767946-profilemanagersize # VA-API fixes -%patch420 -p1 -b .D144284.diff -%patch421 -p1 -b .D147420.diff %patch423 -p1 -b .D147874.diff -%patch424 -p1 -b .D146084.diff -%patch425 -p1 -b .D146085.diff -%patch426 -p1 -b .D146086.diff -%patch427 -p1 -b .D146087.diff -%patch428 -p1 -b .D145725.diff -%patch429 -p1 -b .D145966.diff -%patch430 -p1 -b .D145871.diff -%patch431 -p1 -b .D146271.diff -%patch432 -p1 -b .D146272.diff -%patch433 -p1 -b .D146273.diff -%patch434 -p1 -b .D146274.diff -%patch435 -p1 -b .D146275.diff # NVIDIA mzbz#1735929 %patch440 -p1 -b .D147635.diff @@ -542,7 +529,6 @@ This package contains results of tests executed during build. %patch443 -p1 -b .D149135.diff # More VA-API fixes -%patch422 -p1 -b .D147720.diff %patch444 -p1 -b .D148946.diff %patch445 -p1 -b .D149238.diff %patch446 -p1 -b .mozbz#1758948 @@ -1055,7 +1041,11 @@ fi %posttrans gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +%if %{with langpacks_subpkg} +%files +%else %files -f %{name}.lang +%endif %{_bindir}/firefox %{mozappdir}/firefox %{mozappdir}/firefox-bin @@ -1075,9 +1065,11 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{mozappdir}/distribution/distribution.ini # That's Windows only %ghost %{mozappdir}/browser/features/aushelper@mozilla.org.xpi +%if %{without langpacks_subpkg} %if %{with langpacks} %dir %{langpackdir} %endif +%endif %{mozappdir}/browser/omni.ja %{mozappdir}/run-mozilla.sh %{mozappdir}/application.ini @@ -1120,6 +1112,10 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : #--------------------------------------------------------------------- %changelog +* Tue Jun 28 2022 Martin Stransky - 102.0-1 +- Updated to 102.0 +- Applied patch from https://src.fedoraproject.org/rpms/firefox/pull-request/43 + * Mon Jun 27 2022 Martin Stransky - 101.0.1-7 - Rebuild diff --git a/mozilla-1767946-profilemanagersize.patch b/mozilla-1767946-profilemanagersize.patch deleted file mode 100644 index 4469934..0000000 --- a/mozilla-1767946-profilemanagersize.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp ---- a/widget/gtk/nsWindow.cpp -+++ b/widget/gtk/nsWindow.cpp -@@ -3787,11 +3787,12 @@ - mPendingConfigures--; - } - - // Don't fire configure event for scale changes, we handle that - // OnScaleChanged event. Skip that for toplevel windows only. -- if (mWindowType == eWindowType_toplevel) { -+ if (mWindowType == eWindowType_toplevel || -+ mWindowType == eWindowType_dialog) { - MOZ_DIAGNOSTIC_ASSERT(mGdkWindow, - "Getting configure for invisible window?"); - if (mWindowScaleFactor != gdk_window_get_scale_factor(mGdkWindow)) { - LOG(" scale factor changed to %d,return early", - gdk_window_get_scale_factor(mGdkWindow)); -@@ -4864,10 +4865,11 @@ - // Force scale factor recalculation - if (!mGdkWindow) { - mWindowScaleFactorChanged = true; - return; - } -+ LOG("OnScaleChanged -> %d\n", gdk_window_get_scale_factor(mGdkWindow)); - - // Gtk supply us sometimes with doubled events so stay calm in such case. - if (gdk_window_get_scale_factor(mGdkWindow) == mWindowScaleFactor) { - return; - } - diff --git a/sources b/sources index e75afbf..122ebf2 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (mochitest-python.tar.gz) = 18e1aeb475df5fbf1fe3838897d5ac2f3114aa349030713fc2be27af087b1b12f57642621b87bd052f324a7cb7fbae5f36b21502191d85692f62c8cdd69c8bf2 -SHA512 (firefox-101.0.1.source.tar.xz) = 435a7f6013582933e75c41e554a45beda30b5affd7d3ed7d2876026609ba7f17b2c20b507d9d0c9ce2379e335ec09b021257ba30ac55fabf02dca54b03ea70b4 -SHA512 (firefox-langpacks-101.0.1-20220609.tar.xz) = 54c93a0fbded6a42948fd578e5577987186ca04695f9c0648718780d3a491b540187addf1239b13c53e532052888bd2ed76788a06c3a2422a060fb0da303ec58 SHA512 (cbindgen-vendor.tar.xz) = d681ca855f3779553b4a452f9dc1e3acea6253b7ef33a65948ab2d32d9848e8c06f0b3f3504ef237d6b9adb4813bdad990f7a79fa9f89333ce0d4e8da7e12d94 +SHA512 (firefox-102.0.source.tar.xz) = c7dd6d8d74c46573b16d097a5e5d230669e5778cd680b3b6f30510e989d21543138ced3bb013998b76614aa380b28efd8542450c591d8b724e03bd163d012057 +SHA512 (firefox-langpacks-102.0-20220628.tar.xz) = 2e67c06dda372077be087c65778a109070a27bc2e28e347c75ad240a67c57803e315858198273330d931091bf849cfe3d6003d9106d497049090eaf0a4af718c -- cgit