| Index: src/gpu/GrGpu.h
|
| diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h
|
| index 3acfac2703e6d25dd45f8d51539db636a6bc858a..a2cddf509c55557b975edf22d98c49a86f15d7f1 100644
|
| --- a/src/gpu/GrGpu.h
|
| +++ b/src/gpu/GrGpu.h
|
| @@ -66,7 +66,10 @@ 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 = GrContext::kALL_GLBackendState) {
|
| + fContextIsDirty = true;
|
| + fResetBits |= state;
|
| + }
|
|
|
| void unimpl(const char[]);
|
|
|
| @@ -426,7 +429,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,7 +510,8 @@ 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;
|
| }
|
|
|
| @@ -532,6 +536,7 @@ private:
|
| // these are mutable so they can be created on-demand
|
| mutable GrIndexBuffer* fQuadIndexBuffer;
|
| bool fContextIsDirty;
|
| + uint32_t fResetBits;
|
| // Used to abandon/release all resources created by this GrGpu. TODO: Move this
|
| // functionality to GrResourceCache.
|
| ResourceList fResourceList;
|
|
|