Bug 1247977: More information when we hit the OpenGL error in FakeBlackTexture. r?jgilbert
MozReview-Commit-ID: I9RvZ9HD7NE
--- a/dom/canvas/WebGLContextDraw.cpp
+++ b/dom/canvas/WebGLContextDraw.cpp
@@ -836,29 +836,44 @@ WebGLContext::FakeBlackTexture::FakeBlac
// We allocate our zeros on the heap, and we overallocate (16 bytes instead of 4) to
// minimize the risk of running into a driver bug in texImage2D, as it is a bit
// unusual maybe to create 1x1 textures, and the stack may not have the alignment that
// TexImage2D expects.
const webgl::DriverUnpackInfo dui = {texFormat, texFormat, LOCAL_GL_UNSIGNED_BYTE};
UniqueBuffer zeros = moz_xcalloc(1, 16); // Infallible allocation.
+ MOZ_ASSERT(gl->IsCurrent());
if (target == LOCAL_GL_TEXTURE_CUBE_MAP) {
for (int i = 0; i < 6; ++i) {
const TexImageTarget curTarget = LOCAL_GL_TEXTURE_CUBE_MAP_POSITIVE_X + i;
const GLenum error = DoTexImage(mGL, curTarget.get(), 0, &dui, 1, 1, 1,
zeros.get());
- if (error)
- MOZ_CRASH("Unexpected error during FakeBlack creation.");
+ if (error) {
+ const nsPrintfCString text("DoTexImage failed with `error`: 0x%04x, "
+ "for `curTarget`: 0x%04x, "
+ "`dui`: {0x%04x, 0x%04x, 0x%04x}.",
+ error, curTarget.get(), dui.internalFormat,
+ dui.unpackFormat, dui.unpackType);
+ gfxCriticalError() << text.BeginReading();
+ MOZ_CRASH("Unexpected error during cube map FakeBlack creation.");
+ }
}
} else {
const GLenum error = DoTexImage(mGL, target.get(), 0, &dui, 1, 1, 1,
zeros.get());
- if (error)
+ if (error) {
+ const nsPrintfCString text("DoTexImage failed with `error`: 0x%04x, "
+ "for `target`: 0x%04x, "
+ "`dui`: {0x%04x, 0x%04x, 0x%04x}.",
+ error, target.get(), dui.internalFormat,
+ dui.unpackFormat, dui.unpackType);
+ gfxCriticalError() << text.BeginReading();
MOZ_CRASH("Unexpected error during FakeBlack creation.");
+ }
}
}
WebGLContext::FakeBlackTexture::~FakeBlackTexture()
{
mGL->MakeCurrent();
mGL->fDeleteTextures(1, &mGLName);
}