diff options
Diffstat (limited to 'src/gpu/ops/GrDiscardOp.h')
-rw-r--r-- | src/gpu/ops/GrDiscardOp.h | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/gpu/ops/GrDiscardOp.h b/src/gpu/ops/GrDiscardOp.h index 098df63e7a..ca7f0007de 100644 --- a/src/gpu/ops/GrDiscardOp.h +++ b/src/gpu/ops/GrDiscardOp.h @@ -16,23 +16,39 @@ class GrDiscardOp final : public GrOp { public: DEFINE_OP_CLASS_ID - static std::unique_ptr<GrOp> Make(GrRenderTarget* rt) { - return std::unique_ptr<GrOp>(new GrDiscardOp(rt)); + + // MDB TODO: replace the renderTargetContext with just the renderTargetProxy. + // For now, we need the renderTargetContext for its accessRenderTarget powers. + static std::unique_ptr<GrOp> Make(GrRenderTargetContext* rtc) { + + // MDB TODO: remove this. In this hybrid state we need to be sure the RT is instantiable + // so it can carry the IO refs. In the future we will just get the proxy and + // it carry the IO refs. + if (!rtc->accessRenderTarget()) { + return nullptr; + } + + return std::unique_ptr<GrOp>(new GrDiscardOp(rtc)); } const char* name() const override { return "Discard"; } SkString dumpInfo() const override { SkString string; - string.printf("RT: %d", fRenderTarget.get()->uniqueID().asUInt()); + string.printf("rtID: %d proxyID: %d ", fRenderTarget.get()->uniqueID().asUInt(), + fProxyUniqueID.asUInt()); string.append(INHERITED::dumpInfo()); return string; } private: - GrDiscardOp(GrRenderTarget* rt) : INHERITED(ClassID()), fRenderTarget(rt) { - this->setBounds(SkRect::MakeIWH(rt->width(), rt->height()), HasAABloat::kNo, + GrDiscardOp(GrRenderTargetContext* rtc) + : INHERITED(ClassID()) + , fProxyUniqueID(rtc->asSurfaceProxy()->uniqueID()) { + this->setBounds(SkRect::MakeIWH(rtc->width(), rtc->height()), HasAABloat::kNo, IsZeroArea::kNo); + + fRenderTarget.reset(rtc->accessRenderTarget()); } bool onCombineIfPossible(GrOp* that, const GrCaps& caps) override { @@ -42,9 +58,12 @@ private: void onPrepare(GrOpFlushState*) override {} void onExecute(GrOpFlushState* state) override { + // MDB TODO: instantiate the renderTarget from the proxy in here state->commandBuffer()->discard(fRenderTarget.get()); } + // MDB TODO: remove this. When the renderTargetProxy carries the refs this will be redundant. + GrSurfaceProxy::UniqueID fProxyUniqueID; GrPendingIOResource<GrRenderTarget, kWrite_GrIOType> fRenderTarget; typedef GrOp INHERITED; |