1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2015 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef GrDrawOp_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define GrDrawOp_DEFINED
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include <functional>
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrDeferredUpload.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrOp.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrPipeline.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrAppliedClip;
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Base class for GrOps that draw. These ops can draw into an op list's GrRenderTarget.
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrDrawOp : public GrOp {
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrDrawOp(uint32_t classID) : INHERITED(classID) {}
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * This information is required to determine how to compute a GrAppliedClip from a GrClip for
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * this op.
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum class FixedFunctionFlags : uint32_t {
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kNone = 0x0,
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Indices that the op will enable MSAA or mixed samples rendering. */
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kUsesHWAA = 0x1,
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        /** Indices that the op reads and/or writes the stencil buffer */
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        kUsesStencil = 0x2,
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GR_DECL_BITFIELD_CLASS_OPS_FRIENDS(FixedFunctionFlags);
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    virtual FixedFunctionFlags fixedFunctionFlags() const = 0;
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    enum class RequiresDstTexture : bool { kNo = false, kYes = true };
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * This is called after the GrAppliedClip has been computed and just prior to recording the op
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * or combining it with a previously recorded op. The op should convert any proxies or resources
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * it owns to "pending io" status so that resource allocation can be more optimal. Additionally,
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * at this time the op must report whether a copy of the destination (or destination texture
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * itself) needs to be provided to the GrXferProcessor when this op executes.
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    virtual RequiresDstTexture finalize(const GrCaps&, const GrAppliedClip*,
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                        GrPixelConfigIsClamped) = 0;
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef GrOp INHERITED;
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotGR_MAKE_BITFIELD_CLASS_OPS(GrDrawOp::FixedFunctionFlags);
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
57