Commit f759f7a4 by apatrick@chromium.org

Review: http://codereview.appspot.com/3969041/

Fixed dangling pointers in Surface. When the surface is reset, either because of device lost or a window resize, and any of these fail: CreateDepthStencilSurface CreateTexture Some subsset of mSwapChain and/or mDepthStencil would be left uninitialized. This seemed to happen frequently on WIndows XP boxes. Example crash dumps: Thread 0 *CRASHED* ( EXCEPTION_ACCESS_VIOLATION_READ @ 0xffffffff800f0004 ) 0x014f1aac [libegl.dll - surface.cpp:479] egl::Surface::getDepthStencil() 0x1001324c [libglesv2.dll - context.cpp:301] gl::Context::makeCurrent(egl::Display *,egl::Surface *) 0x10018c7e [libglesv2.dll - main.cpp:85] gl::makeCurrent(gl::Context *,egl::Display *,egl::Surface *) 0x10017366 [libglesv2.dll - context.cpp:3524] glMakeCurrent 0x014f607c [libegl.dll - libegl.cpp:884] eglMakeCurrent Thread 0 *CRASHED* ( EXCEPTION_ACCESS_VIOLATION_READ @ 0xffffffffe95b5a5d ) 0x01131a14 [libegl.dll - surface.cpp:433] egl::Surface::swap() 0x01136310 [libegl.dll - libegl.cpp:1043] eglSwapBuffers 0x0214ac64 [chrome.dll - gl_context_egl.cc:240] gfx::NativeViewEGLContext::SwapBuffers() git-svn-id: https://angleproject.googlecode.com/svn/trunk@531 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent ddcd7378
......@@ -135,6 +135,7 @@ void Surface::resetSwapChain(int backbufferWidth, int backbufferHeight)
ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
ERR("Could not create additional swap chains: %08lX", result);
release();
return error(EGL_BAD_ALLOC);
}
......@@ -146,9 +147,8 @@ void Surface::resetSwapChain(int backbufferWidth, int backbufferHeight)
{
ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
mSwapChain->Release();
ERR("Could not create depthstencil surface for new swap chain: %08lX", result);
release();
return error(EGL_BAD_ALLOC);
}
......@@ -161,10 +161,8 @@ void Surface::resetSwapChain(int backbufferWidth, int backbufferHeight)
{
ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
mSwapChain->Release();
mDepthStencil->Release();
ERR("Could not create flip texture for new swap chain: %08lX", result);
release();
return error(EGL_BAD_ALLOC);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment