Index: src/gpu/GrDrawingManager.cpp |
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp |
index 458bd20571fafc332fff5cb2bd66accd1bde31f9..75ee0db7c8979a41bc24c3af2d9ef1efa17be952 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() { |