15346983b2e0726b4009cc546b01c58a8919e6c36bsalomon/*
25346983b2e0726b4009cc546b01c58a8919e6c36bsalomon * Copyright 2015 Google Inc.
35346983b2e0726b4009cc546b01c58a8919e6c36bsalomon *
45346983b2e0726b4009cc546b01c58a8919e6c36bsalomon * Use of this source code is governed by a BSD-style license that can be
55346983b2e0726b4009cc546b01c58a8919e6c36bsalomon * found in the LICENSE file.
65346983b2e0726b4009cc546b01c58a8919e6c36bsalomon */
75346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
87dae46a6783de5f6bc461870306eb7d648386980Brian Salomon#ifndef GrDiscardOp_DEFINED
97dae46a6783de5f6bc461870306eb7d648386980Brian Salomon#define GrDiscardOp_DEFINED
105346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
11466c7d65974a055ad361430e57f92584b09af0bdHal Canary#include "GrGpuCommandBuffer.h"
1225a880960a9a689a745a01071ecba3fe494b5940Brian Salomon#include "GrOp.h"
13742e31de1599f3902810aecdf2e2e3eed3b40a09Brian Salomon#include "GrOpFlushState.h"
14955235fa13db6cfd615dd6120e7f5060761fa3d1Robert Phillips#include "GrRenderTargetProxy.h"
155346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
167dae46a6783de5f6bc461870306eb7d648386980Brian Salomonclass GrDiscardOp final : public GrOp {
175346983b2e0726b4009cc546b01c58a8919e6c36bsalomonpublic:
1825a880960a9a689a745a01071ecba3fe494b5940Brian Salomon    DEFINE_OP_CLASS_ID
191119dc366e15ef737d05d3a087410ea40c508101Robert Phillips
20955235fa13db6cfd615dd6120e7f5060761fa3d1Robert Phillips    static std::unique_ptr<GrOp> Make(GrRenderTargetProxy* proxy) {
21955235fa13db6cfd615dd6120e7f5060761fa3d1Robert Phillips        return std::unique_ptr<GrOp>(new GrDiscardOp(proxy));
22f8334781914363caf537f22f012fcd5c03c60dadBrian Salomon    }
235346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
245346983b2e0726b4009cc546b01c58a8919e6c36bsalomon    const char* name() const override { return "Discard"; }
255346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
269dc2a9a972b1eb5c3bc8ee5952676250084c68b5Brian Salomon    SkString dumpInfo() const override {
275346983b2e0726b4009cc546b01c58a8919e6c36bsalomon        SkString string;
2844fbc79e069c28103a44387d11c62e049ef2967drobertphillips        string.append(INHERITED::dumpInfo());
295346983b2e0726b4009cc546b01c58a8919e6c36bsalomon        return string;
305346983b2e0726b4009cc546b01c58a8919e6c36bsalomon    }
315346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
325346983b2e0726b4009cc546b01c58a8919e6c36bsalomonprivate:
332f4ddf6964edba1b8d2fdf50e328b60d10ce6ddfRobert Phillips    GrDiscardOp(GrRenderTargetProxy* proxy) : INHERITED(ClassID()) {
34955235fa13db6cfd615dd6120e7f5060761fa3d1Robert Phillips        this->setBounds(SkRect::MakeIWH(proxy->width(), proxy->height()),
35955235fa13db6cfd615dd6120e7f5060761fa3d1Robert Phillips                        HasAABloat::kNo, IsZeroArea::kNo);
362790c52e36ddd8c46d8238f3c92f47779f79fb69Brian Salomon    }
372790c52e36ddd8c46d8238f3c92f47779f79fb69Brian Salomon
38955235fa13db6cfd615dd6120e7f5060761fa3d1Robert Phillips    bool onCombineIfPossible(GrOp* that, const GrCaps& caps) override { return false; }
395346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
40742e31de1599f3902810aecdf2e2e3eed3b40a09Brian Salomon    void onPrepare(GrOpFlushState*) override {}
415346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
429e50f7b11e9a9d3dc23c924bbb0f0b85c6f1d6cbBrian Salomon    void onExecute(GrOpFlushState* state) override {
432f4ddf6964edba1b8d2fdf50e328b60d10ce6ddfRobert Phillips        SkASSERT(state->drawOpArgs().fRenderTarget);
44955235fa13db6cfd615dd6120e7f5060761fa3d1Robert Phillips
452f4ddf6964edba1b8d2fdf50e328b60d10ce6ddfRobert Phillips        state->commandBuffer()->discard(state->drawOpArgs().fRenderTarget);
465346983b2e0726b4009cc546b01c58a8919e6c36bsalomon    }
475346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
4825a880960a9a689a745a01071ecba3fe494b5940Brian Salomon    typedef GrOp INHERITED;
495346983b2e0726b4009cc546b01c58a8919e6c36bsalomon};
505346983b2e0726b4009cc546b01c58a8919e6c36bsalomon
515346983b2e0726b4009cc546b01c58a8919e6c36bsalomon#endif
52