81 lines
1.9 KiB
Diff
81 lines
1.9 KiB
Diff
diff --git a/widget/gtk/DMABufSurface.cpp b/widget/gtk/DMABufSurface.cpp
|
|
--- a/widget/gtk/DMABufSurface.cpp
|
|
+++ b/widget/gtk/DMABufSurface.cpp
|
|
@@ -642,11 +642,11 @@
|
|
|
|
void DMABufSurfaceRGBA::ReleaseTextures() {
|
|
LOGDMABUF(("DMABufSurfaceRGBA::ReleaseTextures() UID %d\n", mUID));
|
|
FenceDelete();
|
|
|
|
- if (!mTexture) {
|
|
+ if (!mTexture && mEGLImage == LOCAL_EGL_NO_IMAGE) {
|
|
return;
|
|
}
|
|
|
|
if (!mGL) {
|
|
#ifdef NIGHTLY
|
|
@@ -663,17 +663,17 @@
|
|
const auto& egl = gle->mEgl;
|
|
|
|
if (mTexture && mGL->MakeCurrent()) {
|
|
mGL->fDeleteTextures(1, &mTexture);
|
|
mTexture = 0;
|
|
- mGL = nullptr;
|
|
}
|
|
|
|
if (mEGLImage != LOCAL_EGL_NO_IMAGE) {
|
|
egl->fDestroyImage(mEGLImage);
|
|
mEGLImage = LOCAL_EGL_NO_IMAGE;
|
|
}
|
|
+ mGL = nullptr;
|
|
}
|
|
|
|
void DMABufSurfaceRGBA::ReleaseSurface() {
|
|
MOZ_ASSERT(!IsMapped(), "We can't release mapped buffer!");
|
|
|
|
@@ -1325,11 +1325,11 @@
|
|
|
|
FenceDelete();
|
|
|
|
bool textureActive = false;
|
|
for (int i = 0; i < mBufferPlaneCount; i++) {
|
|
- if (mTexture[i]) {
|
|
+ if (mTexture[i] || mEGLImage[i] != LOCAL_EGL_NO_IMAGE) {
|
|
textureActive = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
@@ -1346,18 +1346,23 @@
|
|
"leaking textures!");
|
|
return;
|
|
#endif
|
|
}
|
|
|
|
- if (textureActive && mGL->MakeCurrent()) {
|
|
- mGL->fDeleteTextures(DMABUF_BUFFER_PLANES, mTexture);
|
|
- for (int i = 0; i < DMABUF_BUFFER_PLANES; i++) {
|
|
- mTexture[i] = 0;
|
|
- }
|
|
- ReleaseEGLImages(mGL);
|
|
- mGL = nullptr;
|
|
+ if (!mGL->MakeCurrent()) {
|
|
+ NS_WARNING(
|
|
+ "DMABufSurfaceYUV::ReleaseTextures(): Failed to create GL context "
|
|
+ "current. We're leaking textures!");
|
|
+ return;
|
|
}
|
|
+
|
|
+ mGL->fDeleteTextures(DMABUF_BUFFER_PLANES, mTexture);
|
|
+ for (int i = 0; i < DMABUF_BUFFER_PLANES; i++) {
|
|
+ mTexture[i] = 0;
|
|
+ }
|
|
+ ReleaseEGLImages(mGL);
|
|
+ mGL = nullptr;
|
|
}
|
|
|
|
bool DMABufSurfaceYUV::VerifyTextureCreation() {
|
|
LOGDMABUF(("DMABufSurfaceYUV::VerifyTextureCreation() UID %d", mUID));
|
|
|
|
|