ReadPixels recovers from device lost error.
I found that when I switch desktops, GetRenderTargetData will return D3DERR_DEVICELOST. It is unclear to me whether ReadPixels should report a GL error in this case and if so, which one. I went with GL_OUT_OF_MEMORY. Let me know if that's wrong.
This change is not sufficient to make eglGetError report EGL_CONTEXT_LOST. For a program doing exclusively offscreen rendering, ReadPixels might be the only place where D3DERR_DEVICELOST can be detected. The GLES code can't call egl::setCurrentError though. I'm not sure how to fix that.
Review URL: http://codereview.appspot.com/1692053
git-svn-id: https://angleproject.googlecode.com/svn/trunk@350 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index ca8cfae..55a83ff 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -2116,19 +2116,19 @@
result = device->GetRenderTargetData(renderTarget, systemSurface);
- if (result == D3DERR_DRIVERINTERNALERROR)
- {
- systemSurface->Release();
-
- return error(GL_OUT_OF_MEMORY);
- }
-
if (FAILED(result))
{
- UNREACHABLE();
systemSurface->Release();
- return; // No sensible error to generate
+ switch (result)
+ {
+ case D3DERR_DRIVERINTERNALERROR:
+ case D3DERR_DEVICELOST:
+ return error(GL_OUT_OF_MEMORY);
+ default:
+ UNREACHABLE();
+ return; // No sensible error to generate
+ }
}
D3DLOCKED_RECT lock;