aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ops/GrDiscardOp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/ops/GrDiscardOp.h')
-rw-r--r--src/gpu/ops/GrDiscardOp.h29
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;