From 155306ffee1941194d44dd632a7993fce4a05606 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Mon, 24 Nov 2014 10:52:03 +0100 Subject: ANGLE: Fix releasing textures after we kill D3D11 Cherry-pick upstream commit cc4cd2925b9a4f1142a86df131345a861c9d7cd9 to fix crashes on exit. Task-number: QTBUG-42772 Change-Id: Ib74be17f2b5fdd58f9e0568e1da74ba19e943019 Reviewed-by: Andrew Knight Reviewed-by: Friedemann Kleint --- src/3rdparty/angle/src/libGLESv2/Context.cpp | 6 ------ src/3rdparty/angle/src/libGLESv2/Context.h | 1 - src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.cpp | 5 +++++ src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.h | 2 ++ src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp | 2 ++ src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp | 2 ++ 6 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src/3rdparty') diff --git a/src/3rdparty/angle/src/libGLESv2/Context.cpp b/src/3rdparty/angle/src/libGLESv2/Context.cpp index b87689cd3f..3772da6f42 100644 --- a/src/3rdparty/angle/src/libGLESv2/Context.cpp +++ b/src/3rdparty/angle/src/libGLESv2/Context.cpp @@ -162,12 +162,6 @@ Context::~Context() deleteTransformFeedback(mTransformFeedbackMap.begin()->first); } - for (TextureMap::iterator i = mIncompleteTextures.begin(); i != mIncompleteTextures.end(); i++) - { - i->second.set(NULL); - } - mIncompleteTextures.clear(); - for (TextureMap::iterator i = mZeroTextures.begin(); i != mZeroTextures.end(); i++) { i->second.set(NULL); diff --git a/src/3rdparty/angle/src/libGLESv2/Context.h b/src/3rdparty/angle/src/libGLESv2/Context.h index 1e890de3ef..0699592d91 100644 --- a/src/3rdparty/angle/src/libGLESv2/Context.h +++ b/src/3rdparty/angle/src/libGLESv2/Context.h @@ -247,7 +247,6 @@ class Context int mClientVersion; TextureMap mZeroTextures; - TextureMap mIncompleteTextures; typedef std::unordered_map FramebufferMap; FramebufferMap mFramebufferMap; diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.cpp index 97da6da7fd..5cddd8ab5e 100644 --- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.cpp +++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.cpp @@ -26,6 +26,11 @@ RendererD3D::RendererD3D(egl::Display *display) } RendererD3D::~RendererD3D() +{ + cleanup(); +} + +void RendererD3D::cleanup() { for (gl::TextureMap::iterator i = mIncompleteTextures.begin(); i != mIncompleteTextures.end(); ++i) { diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.h index 9919207667..a2f778763c 100644 --- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.h +++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/RendererD3D.h @@ -160,6 +160,8 @@ class RendererD3D : public Renderer const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter) = 0; + void cleanup(); + egl::Display *mDisplay; private: diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp index e6d7f3025b..777308e6cc 100644 --- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp +++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp @@ -1870,6 +1870,8 @@ bool Renderer11::testDeviceResettable() void Renderer11::release() { + RendererD3D::cleanup(); + releaseShaderCompiler(); releaseDeviceResources(); diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp index 601cd24b10..18e6e2d7f0 100644 --- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp +++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp @@ -151,6 +151,8 @@ Renderer9::~Renderer9() void Renderer9::release() { + RendererD3D::cleanup(); + releaseShaderCompiler(); releaseDeviceResources(); -- cgit v1.2.3