| Index: src/gpu/gl/GrGpuGL.cpp
|
| diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
|
| index 9e1f754a82c03a4eac0ba432efb81c5c7933ef8e..bb40839f48b9bef0686312d2f72075e95aec71bd 100644
|
| --- a/src/gpu/gl/GrGpuGL.cpp
|
| +++ b/src/gpu/gl/GrGpuGL.cpp
|
| @@ -9,6 +9,7 @@
|
| #include "GrGpuGL.h"
|
| #include "GrGLStencilBuffer.h"
|
| #include "GrGLTextureRenderTarget.h"
|
| +#include "GrGpuResourceCacheAccess.h"
|
| #include "GrOptDrawState.h"
|
| #include "GrSurfacePriv.h"
|
| #include "GrTemplates.h"
|
| @@ -1121,8 +1122,7 @@ void inline get_stencil_rb_sizes(const GrGLInterface* gl,
|
| }
|
| }
|
|
|
| -bool GrGpuGL::createStencilBufferForRenderTarget(GrRenderTarget* rt,
|
| - int width, int height) {
|
| +bool GrGpuGL::createStencilBufferForRenderTarget(GrRenderTarget* rt, int width, int height) {
|
|
|
| // All internally created RTs are also textures. We don't create
|
| // SBs for a client's standalone RT (that is a RT that isn't also a texture).
|
| @@ -1171,15 +1171,16 @@ bool GrGpuGL::createStencilBufferForRenderTarget(GrRenderTarget* rt,
|
| SkAutoTUnref<GrStencilBuffer> sb(SkNEW_ARGS(GrGLStencilBuffer,
|
| (this, kIsWrapped, sbID, width, height,
|
| samples, format)));
|
| - // If we fail we have to create a new render buffer ID since we gave this one to the
|
| - // GrGLStencilBuffer object.
|
| - sbID = 0;
|
| if (this->attachStencilBufferToRenderTarget(sb, rt)) {
|
| fLastSuccessfulStencilFmtIdx = sIdx;
|
| - sb->transferToCache();
|
| rt->setStencilBuffer(sb);
|
| return true;
|
| }
|
| + // Remove the scratch key from this resource so we don't grab it from the cache ever
|
| + // again.
|
| + sb->cacheAccess().removeScratchKey();
|
| + // Set this to 0 since we handed the valid ID off to the failed stencil buffer resource.
|
| + sbID = 0;
|
| }
|
| }
|
| GL_CALL(DeleteRenderbuffers(1, &sbID));
|
|
|