Index: src/gpu/GrDrawingManager.cpp |
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp |
index ea5c18bf79fcf4934274fbc2cd5c9219c3d2320c..498d4c4c31cbfb945c362ae416c8c0ae9088e1d2 100644 |
--- a/src/gpu/GrDrawingManager.cpp |
+++ b/src/gpu/GrDrawingManager.cpp |
@@ -13,9 +13,13 @@ |
#include "GrSoftwarePathRenderer.h" |
#include "SkTTopoSort.h" |
+#include "instanced/InstancedRendering.h" |
+ |
#include "text/GrAtlasTextContext.h" |
#include "text/GrStencilAndCoverTextContext.h" |
+using gr_instanced::InstancedRendering; |
+ |
void GrDrawingManager::cleanup() { |
for (int i = 0; i < fDrawTargets.count(); ++i) { |
fDrawTargets[i]->makeClosed(); // no drawTarget should receive a new command after this |
@@ -40,6 +44,11 @@ GrDrawingManager::~GrDrawingManager() { |
void GrDrawingManager::abandon() { |
fAbandoned = true; |
+ for (int i = 0; i < fDrawTargets.count(); ++i) { |
+ if (InstancedRendering* ir = fDrawTargets[i]->instancedRendering()) { |
+ ir->resetGpuResources(InstancedRendering::ResetType::kAbandon); |
+ } |
+ } |
this->cleanup(); |
} |
@@ -48,6 +57,11 @@ void GrDrawingManager::freeGpuResources() { |
delete fPathRendererChain; |
fPathRendererChain = nullptr; |
SkSafeSetNull(fSoftwarePathRenderer); |
+ for (int i = 0; i < fDrawTargets.count(); ++i) { |
+ if (InstancedRendering* ir = fDrawTargets[i]->instancedRendering()) { |
+ ir->resetGpuResources(InstancedRendering::ResetType::kDestroy); |
+ } |
+ } |
} |
void GrDrawingManager::reset() { |