Index: src/gpu/gl/GrGLGpu.cpp |
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp |
index b7901400fbd68c132c4b448e20874b9bb64ba291..51fc42b9954e154f447ddf2bb14c2608112f1b60 100644 |
--- a/src/gpu/gl/GrGLGpu.cpp |
+++ b/src/gpu/gl/GrGLGpu.cpp |
@@ -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, |