Add terrible workaround to fix stencil clear crash on S3.

BUG=skia:3525

Review URL: https://codereview.chromium.org/1001693003
This commit is contained in:
bsalomon 2015-03-11 15:49:54 -07:00 committed by Commit bot
parent 79738cc7bf
commit 084340bb9b

View File

@ -1210,8 +1210,27 @@ bool GrGLGpu::createStencilBufferForRenderTarget(GrRenderTarget* rt, int width,
}
GL_CALL(ClearStencil(0));
// At least some versions of the SGX 54x driver can't handle clearing a stencil
// buffer without a color buffer and will crash.
GrGLuint tempRB = 0;
if (kPowerVR54x_GrGLRenderer == this->ctxInfo().renderer()) {
GL_CALL(GenRenderbuffers(1, &tempRB));
GL_CALL(BindRenderbuffer(GR_GL_RENDERBUFFER, tempRB));
GL_CALL(RenderbufferStorage(GR_GL_RENDERBUFFER, GR_GL_RGBA8, width, height));
GL_CALL(FramebufferRenderbuffer(fboTarget,
GR_GL_COLOR_ATTACHMENT0,
GR_GL_RENDERBUFFER, tempRB));
}
GL_CALL(Clear(GR_GL_STENCIL_BUFFER_BIT));
if (tempRB) {
GL_CALL(FramebufferRenderbuffer(fboTarget,
GR_GL_COLOR_ATTACHMENT0,
GR_GL_RENDERBUFFER, 0));
GL_CALL(DeleteRenderbuffers(1, &tempRB));
}
// Unbind the SB from the FBO so that we don't keep it alive.
GL_CALL(FramebufferRenderbuffer(fboTarget,
GR_GL_STENCIL_ATTACHMENT,