diff options
-rw-r--r-- | include/gpu/GrProcessor.h | 8 | ||||
-rw-r--r-- | include/private/GrSurfaceProxy.h | 2 | ||||
-rw-r--r-- | src/gpu/GrDrawingManager.cpp | 27 | ||||
-rw-r--r-- | src/gpu/GrDrawingManager.h | 2 | ||||
-rw-r--r-- | src/gpu/GrPipeline.cpp | 2 | ||||
-rw-r--r-- | src/gpu/GrPreFlushResourceProvider.h | 2 | ||||
-rw-r--r-- | src/gpu/GrProcessor.cpp | 23 | ||||
-rw-r--r-- | src/gpu/GrRenderTargetContext.cpp | 5 | ||||
-rw-r--r-- | src/gpu/GrRenderTargetOpList.cpp | 35 | ||||
-rw-r--r-- | src/gpu/GrRenderTargetOpList.h | 8 | ||||
-rw-r--r-- | src/gpu/GrTextureOpList.cpp | 2 | ||||
-rw-r--r-- | src/gpu/ops/GrAAFillRectOp.cpp | 2 | ||||
-rw-r--r-- | src/gpu/ops/GrClearOp.h | 5 | ||||
-rw-r--r-- | src/gpu/ops/GrCopySurfaceOp.h | 6 | ||||
-rw-r--r-- | src/gpu/ops/GrDiscardOp.h | 4 | ||||
-rw-r--r-- | src/gpu/ops/GrMeshDrawOp.h | 4 | ||||
-rw-r--r-- | src/gpu/ops/GrNonAAFillRectOp.cpp | 2 | ||||
-rw-r--r-- | src/gpu/vk/GrVkPipelineState.cpp | 1 | ||||
-rw-r--r-- | tests/ProxyRefTest.cpp | 3 |
19 files changed, 68 insertions, 75 deletions
diff --git a/include/gpu/GrProcessor.h b/include/gpu/GrProcessor.h index d10136846a..1816db2ea5 100644 --- a/include/gpu/GrProcessor.h +++ b/include/gpu/GrProcessor.h @@ -216,13 +216,7 @@ public: */ TextureSampler(); - TextureSampler(GrTexture*, const GrSamplerParams&); - explicit TextureSampler(GrTexture*, - GrSamplerParams::FilterMode = GrSamplerParams::kNone_FilterMode, - SkShader::TileMode tileXAndY = SkShader::kClamp_TileMode, - GrShaderFlags visibility = kFragment_GrShaderFlag); - void reset(GrTexture*, const GrSamplerParams&, - GrShaderFlags visibility = kFragment_GrShaderFlag); + // MDB TODO: this is the last GrTexture-based reset call! void reset(GrTexture*, GrSamplerParams::FilterMode = GrSamplerParams::kNone_FilterMode, SkShader::TileMode tileXAndY = SkShader::kClamp_TileMode, diff --git a/include/private/GrSurfaceProxy.h b/include/private/GrSurfaceProxy.h index e438e66cad..4f0ab964d5 100644 --- a/include/private/GrSurfaceProxy.h +++ b/include/private/GrSurfaceProxy.h @@ -284,7 +284,7 @@ public: GrTextureOpList* getLastTextureOpList(); /** - * Retrieves the amount of GPU memory that will be or currently is used by this resource + * Retrieves the amount of GPU memory that will be or currently is used by this resource * in bytes. It is approximate since we aren't aware of additional padding or copies made * by the driver. * diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp index cecf52f329..6b2c5a20b4 100644 --- a/src/gpu/GrDrawingManager.cpp +++ b/src/gpu/GrDrawingManager.cpp @@ -31,7 +31,6 @@ void GrDrawingManager::cleanup() { // We shouldn't need to do this, but it turns out some clients still hold onto opLists // after a cleanup fOpLists[i]->reset(); - fOpLists[i]->unref(); } fOpLists.reset(); @@ -86,9 +85,11 @@ void GrDrawingManager::internalFlush(GrSurfaceProxy*, GrResourceCache::FlushType fOpLists[i]->makeClosed(); } +#ifdef ENABLE_MDB SkDEBUGCODE(bool result =) SkTTopoSort<GrOpList, GrOpList::TopoSortTraits>(&fOpLists); SkASSERT(result); +#endif GrPreFlushResourceProvider preFlushProvider(this); @@ -148,9 +149,6 @@ void GrDrawingManager::internalFlush(GrSurfaceProxy*, GrResourceCache::FlushType for (int i = 0; i < fOpLists.count(); ++i) { fOpLists[i]->reset(); -#ifdef ENABLE_MDB - fOpLists[i]->unref(); -#endif } #ifndef ENABLE_MDB @@ -206,25 +204,24 @@ sk_sp<GrRenderTargetOpList> GrDrawingManager::newRTOpList(sk_sp<GrRenderTargetPr SkASSERT(fOpLists.count() == 1); // In the non-MDB-world the same GrOpList gets reused for multiple render targets. // Update this pointer so all the asserts are happy - rtp->setLastOpList(fOpLists[0]); + rtp->setLastOpList(fOpLists[0].get()); // DrawingManager gets the creation ref - this ref is for the caller // TODO: although this is true right now it isn't cool - return sk_ref_sp((GrRenderTargetOpList*) fOpLists[0]); + return sk_ref_sp((GrRenderTargetOpList*) fOpLists[0].get()); } #endif - GrRenderTargetOpList* opList = new GrRenderTargetOpList(rtp, - fContext->getGpu(), - fContext->resourceProvider(), - fContext->getAuditTrail(), - fOptionsForOpLists); - SkASSERT(rtp->getLastOpList() == opList); + sk_sp<GrRenderTargetOpList> opList(new GrRenderTargetOpList(rtp, + fContext->getGpu(), + fContext->resourceProvider(), + fContext->getAuditTrail(), + fOptionsForOpLists)); + SkASSERT(rtp->getLastOpList() == opList.get()); - *fOpLists.append() = opList; + fOpLists.push_back() = opList; - // DrawingManager gets the creation ref - this ref is for the caller - return sk_ref_sp(opList); + return opList; } sk_sp<GrTextureOpList> GrDrawingManager::newTextureOpList(sk_sp<GrTextureProxy> textureProxy) { diff --git a/src/gpu/GrDrawingManager.h b/src/gpu/GrDrawingManager.h index ac6bbb45f2..d68430ecd2 100644 --- a/src/gpu/GrDrawingManager.h +++ b/src/gpu/GrDrawingManager.h @@ -111,7 +111,7 @@ private: GrSingleOwner* fSingleOwner; bool fAbandoned; - SkTDArray<GrOpList*> fOpLists; + SkTArray<sk_sp<GrOpList>> fOpLists; std::unique_ptr<GrAtlasTextContext> fAtlasTextContext; diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp index 9e04b86e2e..ac1360d97d 100644 --- a/src/gpu/GrPipeline.cpp +++ b/src/gpu/GrPipeline.cpp @@ -104,7 +104,7 @@ void GrPipeline::addDependenciesTo(GrRenderTargetProxy* rtp) const { #endif if (fDstTexture) { - SkASSERT(rtp->getLastOpList()); + //SkASSERT(rtp->getLastOpList()); // MDB TODO: re-enable when TextureSamplers store texture proxies //rtp->getLastOpList()->addDependency(fDstTexture.get()); } diff --git a/src/gpu/GrPreFlushResourceProvider.h b/src/gpu/GrPreFlushResourceProvider.h index 86a299a422..5f4b96bd25 100644 --- a/src/gpu/GrPreFlushResourceProvider.h +++ b/src/gpu/GrPreFlushResourceProvider.h @@ -26,7 +26,7 @@ class SkColorSpace; class SkSurfaceProps; /* - * This is the base class from which all per-flush callback objects must be derived. It + * This is the base class from which all pre-flush callback objects must be derived. It * provides the "preFlush" interface. */ class GrPreFlushCallbackObject : public GrNonAtomicRef<GrPreFlushCallbackObject> { diff --git a/src/gpu/GrProcessor.cpp b/src/gpu/GrProcessor.cpp index 7c1052886d..4856c42a34 100644 --- a/src/gpu/GrProcessor.cpp +++ b/src/gpu/GrProcessor.cpp @@ -204,18 +204,6 @@ bool GrResourceIOProcessor::hasSameSamplersAndAccesses(const GrResourceIOProcess GrResourceIOProcessor::TextureSampler::TextureSampler() {} -GrResourceIOProcessor::TextureSampler::TextureSampler(GrTexture* texture, - const GrSamplerParams& params) { - this->reset(texture, params); -} - -GrResourceIOProcessor::TextureSampler::TextureSampler(GrTexture* texture, - GrSamplerParams::FilterMode filterMode, - SkShader::TileMode tileXAndY, - GrShaderFlags visibility) { - this->reset(texture, filterMode, tileXAndY, visibility); -} - GrResourceIOProcessor::TextureSampler::TextureSampler(GrResourceProvider* resourceProvider, sk_sp<GrTextureProxy> proxy, const GrSamplerParams& params) { @@ -230,16 +218,7 @@ GrResourceIOProcessor::TextureSampler::TextureSampler(GrResourceProvider* resour this->reset(resourceProvider, std::move(proxy), filterMode, tileXAndY, visibility); } -void GrResourceIOProcessor::TextureSampler::reset(GrTexture* texture, - const GrSamplerParams& params, - GrShaderFlags visibility) { - SkASSERT(texture); - fTexture.set(SkRef(texture), kRead_GrIOType); - fParams = params; - fParams.setFilterMode(SkTMin(params.filterMode(), texture->texturePriv().highestFilterMode())); - fVisibility = visibility; -} - +// MDB TODO: remove this! void GrResourceIOProcessor::TextureSampler::reset(GrTexture* texture, GrSamplerParams::FilterMode filterMode, SkShader::TileMode tileXAndY, diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp index 8ad9a4e633..34812ddfbe 100644 --- a/src/gpu/GrRenderTargetContext.cpp +++ b/src/gpu/GrRenderTargetContext.cpp @@ -1675,7 +1675,10 @@ uint32_t GrRenderTargetContext::addLegacyMeshDrawOp(GrPipelineBuilder&& pipeline } } op->initPipeline(args, analysis, overrideColor); - // TODO: We need to add pipeline dependencies on textures, etc before recording this op. + + // Add the pipeline dependencies on textures, etc before recording this op. + op->addDependenciesTo(fRenderTargetProxy.get()); + op->setClippedBounds(bounds); return this->getOpList()->addOp(std::move(op), this); } diff --git a/src/gpu/GrRenderTargetOpList.cpp b/src/gpu/GrRenderTargetOpList.cpp index 5730e2e7ad..4d309f407e 100644 --- a/src/gpu/GrRenderTargetOpList.cpp +++ b/src/gpu/GrRenderTargetOpList.cpp @@ -233,6 +233,10 @@ void GrRenderTargetOpList::fullClear(GrRenderTargetContext* renderTargetContext, // As currently implemented, fLastFullClearOp should be the last op because we would // have cleared it when another op was recorded. SkASSERT(fRecordedOps.back().fOp.get() == fLastFullClearOp); + GrOP_INFO("opList: %d Fusing clears (opID: %d Color: 0x%08x -> 0x%08x)\n", + this->uniqueID(), + fLastFullClearOp->uniqueID(), + fLastFullClearOp->color(), color); fLastFullClearOp->setColor(color); return; } @@ -316,15 +320,14 @@ GrOp* GrRenderTargetOpList::recordOp(std::unique_ptr<GrOp> op, // 3) find a 'blocker' GR_AUDIT_TRAIL_ADD_OP(fAuditTrail, op.get(), renderTarget->uniqueID(), renderTargetContext->asRenderTargetProxy()->uniqueID()); - GrOP_INFO("Recording (%s, opID: %u)\n" - "\tBounds: [L: %f T: %f R: %f B: %f]\n", + GrOP_INFO("opList: %d Recording (%s, opID: %u)\n" + "\tBounds [L: %.2f, T: %.2f R: %.2f B: %.2f]\n", + this->uniqueID(), op->name(), op->uniqueID(), op->bounds().fLeft, op->bounds().fTop, op->bounds().fRight, op->bounds().fBottom); GrOP_INFO(SkTabString(op->dumpInfo(), 1).c_str()); - GrOP_INFO("\tClipped Bounds: [L: %.2f, T: %.2f, R: %.2f, B: %.2f]\n", op->bounds().fLeft, - op->bounds().fTop, op->bounds().fRight, op->bounds().fBottom); GrOP_INFO("\tOutcome:\n"); int maxCandidates = SkTMin(fMaxOpLookback, fRecordedOps.count()); // If we don't have a valid destination render target then we cannot reorder. @@ -334,33 +337,33 @@ GrOp* GrRenderTargetOpList::recordOp(std::unique_ptr<GrOp> op, const RecordedOp& candidate = fRecordedOps.fromBack(i); // We cannot continue to search backwards if the render target changes if (candidate.fRenderTarget.get() != renderTarget) { - GrOP_INFO("\t\tBreaking because of (%s, opID: %u) Rendertarget mismatch\n", + GrOP_INFO("\t\tBackward: Breaking because of (%s, opID: %u) Rendertarget mismatch\n", candidate.fOp->name(), candidate.fOp->uniqueID()); break; } if (this->combineIfPossible(candidate, op.get(), clip, dstTexture)) { - GrOP_INFO("\t\tCombining with (%s, opID: %u)\n", candidate.fOp->name(), + GrOP_INFO("\t\tBackward: Combining with (%s, opID: %u)\n", candidate.fOp->name(), candidate.fOp->uniqueID()); - GrOP_INFO("\t\t\tCombined op info:\n"); + GrOP_INFO("\t\t\tBackward: Combined op info:\n"); GrOP_INFO(SkTabString(candidate.fOp->dumpInfo(), 4).c_str()); GR_AUDIT_TRAIL_OPS_RESULT_COMBINED(fAuditTrail, candidate.fOp.get(), op.get()); return candidate.fOp.get(); } // Stop going backwards if we would cause a painter's order violation. if (!can_reorder(fRecordedOps.fromBack(i).fOp->bounds(), op->bounds())) { - GrOP_INFO("\t\tIntersects with (%s, opID: %u)\n", candidate.fOp->name(), + GrOP_INFO("\t\tBackward: Intersects with (%s, opID: %u)\n", candidate.fOp->name(), candidate.fOp->uniqueID()); break; } ++i; if (i == maxCandidates) { - GrOP_INFO("\t\tReached max lookback or beginning of op array %d\n", i); + GrOP_INFO("\t\tBackward: Reached max lookback or beginning of op array %d\n", i); break; } } } else { - GrOP_INFO("\t\tFirstOp\n"); + GrOP_INFO("\t\tBackward: FirstOp\n"); } GR_AUDIT_TRAIL_OP_RESULT_NEW(fAuditTrail, op); if (clip) { @@ -375,12 +378,15 @@ GrOp* GrRenderTargetOpList::recordOp(std::unique_ptr<GrOp> op, } void GrRenderTargetOpList::forwardCombine() { + SkASSERT(!this->isClosed()); + if (fMaxOpLookahead <= 0) { return; } for (int i = 0; i < fRecordedOps.count() - 1; ++i) { GrOp* op = fRecordedOps[i].fOp.get(); GrRenderTarget* renderTarget = fRecordedOps[i].fRenderTarget.get(); + SkASSERT(renderTarget); // If we don't have a valid destination render target ID then we cannot reorder. if (!renderTarget) { continue; @@ -391,13 +397,14 @@ void GrRenderTargetOpList::forwardCombine() { const RecordedOp& candidate = fRecordedOps[j]; // We cannot continue to search if the render target changes if (candidate.fRenderTarget.get() != renderTarget) { - GrOP_INFO("\t\tBreaking because of (%s, B%u) Rendertarget\n", candidate.fOp->name(), + GrOP_INFO("\t\tForward: Breaking because of (%s, opID: %u) Rendertarget\n", + candidate.fOp->name(), candidate.fOp->uniqueID()); break; } if (this->combineIfPossible(fRecordedOps[i], candidate.fOp.get(), candidate.fAppliedClip, &candidate.fDstTexture)) { - GrOP_INFO("\t\tCombining with (%s, B%u)\n", candidate.fOp->name(), + GrOP_INFO("\t\tForward: Combining with (%s, opID: %u)\n", candidate.fOp->name(), candidate.fOp->uniqueID()); GR_AUDIT_TRAIL_OPS_RESULT_COMBINED(fAuditTrail, op, candidate.fOp.get()); fRecordedOps[j].fOp = std::move(fRecordedOps[i].fOp); @@ -405,13 +412,13 @@ void GrRenderTargetOpList::forwardCombine() { } // Stop going traversing if we would cause a painter's order violation. if (!can_reorder(fRecordedOps[j].fOp->bounds(), op->bounds())) { - GrOP_INFO("\t\tIntersects with (%s, B%u)\n", candidate.fOp->name(), + GrOP_INFO("\t\tForward: Intersects with (%s, opID: %u)\n", candidate.fOp->name(), candidate.fOp->uniqueID()); break; } ++j; if (j > maxCandidateIdx) { - GrOP_INFO("\t\tReached max lookahead or end of op array %d\n", i); + GrOP_INFO("\t\tForward: Reached max lookahead or end of op array %d\n", i); break; } } diff --git a/src/gpu/GrRenderTargetOpList.h b/src/gpu/GrRenderTargetOpList.h index 5762e0aab5..dd265ed501 100644 --- a/src/gpu/GrRenderTargetOpList.h +++ b/src/gpu/GrRenderTargetOpList.h @@ -45,12 +45,18 @@ public: ~GrRenderTargetOpList() override; void makeClosed() override { - INHERITED::makeClosed(); + if (this->isClosed()) { + return; + } fLastFullClearOp = nullptr; this->forwardCombine(); + + INHERITED::makeClosed(); } + bool isEmpty() const { return fRecordedOps.empty(); } + /** * Empties the draw buffer of any queued up draws. */ diff --git a/src/gpu/GrTextureOpList.cpp b/src/gpu/GrTextureOpList.cpp index 175f178d5e..689ea44783 100644 --- a/src/gpu/GrTextureOpList.cpp +++ b/src/gpu/GrTextureOpList.cpp @@ -108,7 +108,7 @@ void GrTextureOpList::recordOp(std::unique_ptr<GrOp> op, SkASSERT(!this->isClosed()); GR_AUDIT_TRAIL_ADD_OP(fAuditTrail, op.get(), resourceUniqueID, proxyUniqueID); - GrOP_INFO("Re-Recording (%s, B%u)\n" + GrOP_INFO("Re-Recording (%s, opID: %u)\n" "\tBounds LRTB (%f, %f, %f, %f)\n", op->name(), op->uniqueID(), diff --git a/src/gpu/ops/GrAAFillRectOp.cpp b/src/gpu/ops/GrAAFillRectOp.cpp index 15fb645abc..7bf62ece23 100644 --- a/src/gpu/ops/GrAAFillRectOp.cpp +++ b/src/gpu/ops/GrAAFillRectOp.cpp @@ -180,6 +180,7 @@ public: SkString dumpInfo() const override { SkString str; + str.append(INHERITED::dumpInfo()); str.appendf("# combined: %d\n", fRectCnt); const RectInfo* info = this->first(); for (int i = 0; i < fRectCnt; ++i) { @@ -189,7 +190,6 @@ public: info = this->next(info); } str.append(DumpPipelineInfo(*this->pipeline())); - str.append(INHERITED::dumpInfo()); return str; } diff --git a/src/gpu/ops/GrClearOp.h b/src/gpu/ops/GrClearOp.h index 5340af1172..4f51796e6c 100644 --- a/src/gpu/ops/GrClearOp.h +++ b/src/gpu/ops/GrClearOp.h @@ -56,6 +56,7 @@ public: SkString dumpInfo() const override { SkString string; + string.append(INHERITED::dumpInfo()); string.appendf("rtID: %d proxyID: %d Scissor [", fRenderTarget.get()->uniqueID().asUInt(), fProxyUniqueID.asUInt()); @@ -65,11 +66,11 @@ public: } else { string.append("disabled"); } - string.appendf("], Color: 0x%08x ", fColor); - string.append(INHERITED::dumpInfo()); + string.appendf("], Color: 0x%08x\n", fColor); return string; } + GrColor color() const { return fColor; } void setColor(GrColor color) { fColor = color; } private: diff --git a/src/gpu/ops/GrCopySurfaceOp.h b/src/gpu/ops/GrCopySurfaceOp.h index e455c3e7dc..f479f28d1e 100644 --- a/src/gpu/ops/GrCopySurfaceOp.h +++ b/src/gpu/ops/GrCopySurfaceOp.h @@ -25,13 +25,13 @@ public: SkString dumpInfo() const override { SkString string; - string.printf("src: (proxyID: %d, rtID: %d), dst: (proxyID: %d, rtID: %d), " - "srcRect: [L: %d, T: %d, R: %d, B: %d], dstPt: [X: %d, Y: %d]", + string.append(INHERITED::dumpInfo()); + string.printf("src: (proxyID: %d, rtID: %d), dst: (proxyID: %d, rtID: %d),\n" + "srcRect: [L: %d, T: %d, R: %d, B: %d], dstPt: [X: %d, Y: %d]\n", fSrcProxyID.asUInt(), fSrc.get()->uniqueID().asUInt(), fDstProxyID.asUInt(), fDst.get()->uniqueID().asUInt(), fSrcRect.fLeft, fSrcRect.fTop, fSrcRect.fRight, fSrcRect.fBottom, fDstPoint.fX, fDstPoint.fY); - string.append(INHERITED::dumpInfo()); return string; } diff --git a/src/gpu/ops/GrDiscardOp.h b/src/gpu/ops/GrDiscardOp.h index ca7f0007de..5640f308ac 100644 --- a/src/gpu/ops/GrDiscardOp.h +++ b/src/gpu/ops/GrDiscardOp.h @@ -35,9 +35,9 @@ public: SkString dumpInfo() const override { SkString string; - string.printf("rtID: %d proxyID: %d ", fRenderTarget.get()->uniqueID().asUInt(), - fProxyUniqueID.asUInt()); string.append(INHERITED::dumpInfo()); + string.printf("rtID: %d proxyID: %d\n", fRenderTarget.get()->uniqueID().asUInt(), + fProxyUniqueID.asUInt()); return string; } diff --git a/src/gpu/ops/GrMeshDrawOp.h b/src/gpu/ops/GrMeshDrawOp.h index 8fbd30d280..a4b172d357 100644 --- a/src/gpu/ops/GrMeshDrawOp.h +++ b/src/gpu/ops/GrMeshDrawOp.h @@ -119,6 +119,10 @@ public: this->applyPipelineOptimizations(PipelineOptimizations(analysis, overrideColor)); } + void addDependenciesTo(GrRenderTargetProxy* rtp) { + fPipeline.addDependenciesTo(rtp); + } + /** * Mesh draw ops use a legacy system in GrRenderTargetContext where the pipeline is created when * the op is recorded. These methods are unnecessary as this information is in the pipeline. diff --git a/src/gpu/ops/GrNonAAFillRectOp.cpp b/src/gpu/ops/GrNonAAFillRectOp.cpp index 99cb2bd9df..69bfe291e2 100644 --- a/src/gpu/ops/GrNonAAFillRectOp.cpp +++ b/src/gpu/ops/GrNonAAFillRectOp.cpp @@ -95,6 +95,7 @@ public: SkString dumpInfo() const override { SkString str; + str.append(INHERITED::dumpInfo()); str.appendf("# combined: %d\n", fRects.count()); for (int i = 0; i < fRects.count(); ++i) { const RectInfo& info = fRects[i]; @@ -103,7 +104,6 @@ public: info.fRect.fBottom); } str.append(DumpPipelineInfo(*this->pipeline())); - str.append(INHERITED::dumpInfo()); return str; } diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp index 4ce7681b15..0a9d68eb38 100644 --- a/src/gpu/vk/GrVkPipelineState.cpp +++ b/src/gpu/vk/GrVkPipelineState.cpp @@ -220,6 +220,7 @@ void GrVkPipelineState::setData(GrVkGpu* gpu, fXferProcessor->setData(fDataManager, pipeline.getXferProcessor(), dstTexture, offset); GrResourceIOProcessor::TextureSampler dstTextureSampler; if (dstTexture) { + // MDB TODO: this is the last usage of a GrTexture-based TextureSampler reset method dstTextureSampler.reset(dstTexture); textureBindings.push_back(&dstTextureSampler); } diff --git a/tests/ProxyRefTest.cpp b/tests/ProxyRefTest.cpp index 708c7b3034..a18dd61f1c 100644 --- a/tests/ProxyRefTest.cpp +++ b/tests/ProxyRefTest.cpp @@ -76,7 +76,8 @@ static sk_sp<GrTextureProxy> make_deferred(GrContext* context) { desc.fConfig = kRGBA_8888_GrPixelConfig; return GrSurfaceProxy::MakeDeferred(context->resourceProvider(), desc, - SkBackingFit::kApprox, SkBudgeted::kYes); + SkBackingFit::kApprox, SkBudgeted::kYes, + GrResourceProvider::kNoPendingIO_Flag); } static sk_sp<GrTextureProxy> make_wrapped(GrContext* context) { |