LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/gpu - GrGpuCommandBuffer.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 2 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             : * Copyright 2016 Google Inc.
       3             : *
       4             : * Use of this source code is governed by a BSD-style license that can be
       5             : * found in the LICENSE file.
       6             : */
       7             : 
       8             : #ifndef GrGpuCommandBuffer_DEFINED
       9             : #define GrGpuCommandBuffer_DEFINED
      10             : 
      11             : #include "GrColor.h"
      12             : #include "ops/GrDrawOp.h"
      13             : 
      14             : class GrOpFlushState;
      15             : class GrFixedClip;
      16             : class GrGpu;
      17             : class GrMesh;
      18             : class GrPipeline;
      19             : class GrPrimitiveProcessor;
      20             : class GrRenderTarget;
      21             : struct SkIRect;
      22             : struct SkRect;
      23             : 
      24             : /**
      25             :  * The GrGpuCommandBuffer is a series of commands (draws, clears, and discards), which all target
      26             :  * the same render target. It is possible that these commands execute immediately (GL), or get
      27             :  * buffered up for later execution (Vulkan). GrOps will execute their draw commands into a
      28             :  * GrGpuCommandBuffer.
      29             :  *
      30             :  * Ideally we'd know the GrRenderTarget, or at least its properties when the GrGpuCommandBuffer, is
      31             :  * created. We also then wouldn't include it in the GrPipeline or as a parameter to the clear and
      32             :  * discard methods. The logical place for that will be in GrRenderTargetOpList post-MDB. For now
      33             :  * the render target is redundantly passed to each operation, though it will always be the same
      34             :  * render target for a given command buffer even pre-MDB.
      35             :  */
      36             : class GrGpuCommandBuffer {
      37             : public:
      38             :     enum class LoadOp {
      39             :         kLoad,
      40             :         kClear,
      41             :         kDiscard,
      42             :     };
      43             : 
      44             :     enum class StoreOp {
      45             :         kStore,
      46             :         kDiscard,
      47             :     };
      48             : 
      49             :     struct LoadAndStoreInfo {
      50             :         LoadOp  fLoadOp;
      51             :         StoreOp fStoreOp;
      52             :         GrColor fClearColor;
      53             :     };
      54             : 
      55           0 :     GrGpuCommandBuffer() {}
      56           0 :     virtual ~GrGpuCommandBuffer() {}
      57             : 
      58             :     // Signals the end of recording to the command buffer and that it can now be submitted.
      59             :     virtual void end() = 0;
      60             : 
      61             :     // Sends the command buffer off to the GPU object to execute the commands built up in the
      62             :     // buffer. The gpu object is allowed to defer execution of the commands until it is flushed.
      63             :     void submit();
      64             : 
      65             :     // We pass in an array of meshCount GrMesh to the draw. The backend should loop over each
      66             :     // GrMesh object and emit a draw for it. Each draw will use the same GrPipeline and
      67             :     // GrPrimitiveProcessor. This may fail if the draw would exceed any resource limits (e.g.
      68             :     // number of vertex attributes is too large).
      69             :     bool draw(const GrPipeline&,
      70             :               const GrPrimitiveProcessor&,
      71             :               const GrMesh*,
      72             :               int meshCount,
      73             :               const SkRect& bounds);
      74             : 
      75             :     // Performs an upload of vertex data in the middle of a set of a set of draws
      76             :     virtual void inlineUpload(GrOpFlushState* state, GrDrawOp::DeferredUploadFn& upload,
      77             :                               GrRenderTarget* rt) = 0;
      78             : 
      79             :     /**
      80             :      * Clear the passed in render target. Ignores the draw state and clip.
      81             :      */
      82             :     void clear(GrRenderTarget*, const GrFixedClip&, GrColor);
      83             : 
      84             :     void clearStencilClip(GrRenderTarget*, const GrFixedClip&, bool insideStencilMask);
      85             : 
      86             :     /**
      87             :      * Discards the contents render target. nullptr indicates that the current render target should
      88             :      * be discarded.
      89             :      */
      90             :     // TODO: This should be removed in the future to favor using the load and store ops for discard
      91             :     virtual void discard(GrRenderTarget*) = 0;
      92             : 
      93             : private:
      94             :     virtual GrGpu* gpu() = 0;
      95             :     virtual GrRenderTarget* renderTarget() = 0;
      96             : 
      97             :     virtual void onSubmit() = 0;
      98             : 
      99             :     // overridden by backend-specific derived class to perform the draw call.
     100             :     virtual void onDraw(const GrPipeline&,
     101             :                         const GrPrimitiveProcessor&,
     102             :                         const GrMesh*,
     103             :                         int meshCount,
     104             :                         const SkRect& bounds) = 0;
     105             : 
     106             :     // overridden by backend-specific derived class to perform the clear.
     107             :     virtual void onClear(GrRenderTarget*, const GrFixedClip&, GrColor) = 0;
     108             : 
     109             :     virtual void onClearStencilClip(GrRenderTarget*, const GrFixedClip&,
     110             :                                     bool insideStencilMask) = 0;
     111             : 
     112             : };
     113             : 
     114             : #endif

Generated by: LCOV version 1.13