| Index: src/gpu/GrGpu.h
|
| diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
|
| index 3acfac2703e6d25dd45f8d51539db636a6bc858a..85e398807b331193d772e2cee93f5b1c09ce8e1f 100644
|
| --- a/src/gpu/GrGpu.h
|
| +++ b/src/gpu/GrGpu.h
|
| @@ -66,7 +66,9 @@ public:
|
| * the GrGpu that the state was modified and it shouldn't make assumptions
|
| * about the state.
|
| */
|
| - void markContextDirty() { fContextIsDirty = true; }
|
| + void markContextDirty(uint32_t state = kAll_GrBackendState) {
|
| + fResetBits |= state;
|
| + }
|
|
|
| void unimpl(const char[]);
|
|
|
| @@ -426,7 +428,7 @@ private:
|
|
|
| // called when the 3D context state is unknown. Subclass should emit any
|
| // assumed 3D context state and dirty any state cache.
|
| - virtual void onResetContext() = 0;
|
| + virtual void onResetContext(uint32_t resetBits) = 0;
|
|
|
| // overridden by backend-specific derived class to create objects.
|
| virtual GrTexture* onCreateTexture(const GrTextureDesc& desc,
|
| @@ -507,14 +509,14 @@ private:
|
| // stencil buffer. Perhaps we should detect whether it is a
|
| // internally created stencil buffer and if so skip the invalidate.
|
| fClipMaskManager.invalidateStencilMask();
|
| - this->onResetContext();
|
| + this->onResetContext(fResetBits);
|
| + fResetBits = 0;
|
| ++fResetTimestamp;
|
| }
|
|
|
| void handleDirtyContext() {
|
| - if (fContextIsDirty) {
|
| + if (fResetBits) {
|
| this->resetContext();
|
| - fContextIsDirty = false;
|
| }
|
| }
|
|
|
| @@ -524,6 +526,7 @@ private:
|
| typedef SkTInternalLList<GrResource> ResourceList;
|
| SkSTArray<kPreallocGeomPoolStateStackCnt, GeometryPoolState, true> fGeomPoolStateStack;
|
| ResetTimestamp fResetTimestamp;
|
| + uint32_t fResetBits;
|
| GrVertexBufferAllocPool* fVertexPool;
|
| GrIndexBufferAllocPool* fIndexPool;
|
| // counts number of uses of vertex/index pool in the geometry stack
|
| @@ -531,7 +534,6 @@ private:
|
| int fIndexPoolUseCnt;
|
| // these are mutable so they can be created on-demand
|
| mutable GrIndexBuffer* fQuadIndexBuffer;
|
| - bool fContextIsDirty;
|
| // Used to abandon/release all resources created by this GrGpu. TODO: Move this
|
| // functionality to GrResourceCache.
|
| ResourceList fResourceList;
|
|
|