summaryrefslogtreecommitdiffstats
path: root/libs/rs
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2009-12-03 15:43:18 -0800
committerJason Sams <rjsams@android.com>2009-12-03 15:43:18 -0800
commitc73ec39bd0e9ff983eb2fc17a863100825721d49 (patch)
treeeb5ca7b5864527536f053444d0fa74fe603315b2 /libs/rs
parent678c2e35768a5426b4ad8f67c836008e7751a353 (diff)
downloadframeworks_base-c73ec39bd0e9ff983eb2fc17a863100825721d49.zip
frameworks_base-c73ec39bd0e9ff983eb2fc17a863100825721d49.tar.gz
frameworks_base-c73ec39bd0e9ff983eb2fc17a863100825721d49.tar.bz2
DO NOT MERGE. Implement WAR which should prevent the white square bug from appearing on user devices. If we see a 0 texture id during bind for rendering, attempt to re-upload. If this fails log debug info and restart the app.
Diffstat (limited to 'libs/rs')
-rw-r--r--libs/rs/rsProgramFragment.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index 708a0e0..5f2dfae 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -65,6 +65,20 @@ void ProgramFragment::setupGL(const Context *rsc, ProgramFragmentState *state)
}
glTexEnvi(GL_POINT_SPRITE_OES, GL_COORD_REPLACE_OES, mPointSpriteEnable);
}
+
+ rsAssert(mTextures[ct]->getTextureID() != 0);
+ if (mTextures[ct]->getTextureID() == 0) {
+ // This is a hack for eclair to try to fix the white squares bug.
+ Allocation *a = (Allocation *)mTextures[ct].get();
+ a->uploadToTexture((Context *)rsc, 0);
+ if (mTextures[ct]->getTextureID() == 0) {
+ // At this point we are screwed. Crash to restart the app.
+ rsc->dumpDebug();
+ LOGE("Multiple failures during texture upload. Driver appears wedged.");
+ ((char *)0)[0] = 0;
+ }
+
+ }
glBindTexture(GL_TEXTURE_2D, mTextures[ct]->getTextureID());
switch(mEnvModes[ct]) {