GrDrawBatch.h revision 7539856c1b9cbb1886a6a498cc534b77fc83ddb2
1/* 2 * Copyright 2015 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 GrDrawBatch_DEFINED 9#define GrDrawBatch_DEFINED 10 11#include "GrBatch.h" 12#include "GrPipeline.h" 13 14struct GrInitInvariantOutput; 15 16/** 17 * GrDrawBatches are flushed in two phases (preDraw, and draw). In preDraw uploads to GrGpuResources 18 * and draws are determined and scheduled. They are issued in the draw phase. GrBatchToken is used 19 * to sequence the uploads relative to each other and to draws. 20 **/ 21 22typedef uint64_t GrBatchToken; 23 24class GrBatchUploader : public SkRefCnt { 25public: 26 class TextureUploader; 27 28 GrBatchUploader(GrBatchToken lastUploadToken) : fLastUploadToken(lastUploadToken) {} 29 GrBatchToken lastUploadToken() const { return fLastUploadToken; } 30 virtual void upload(TextureUploader*)=0; 31 32private: 33 GrBatchToken fLastUploadToken; 34}; 35 36/** 37 * Base class for GrBatches that draw. These batches have a GrPipeline installed by GrDrawTarget. 38 */ 39class GrDrawBatch : public GrBatch { 40public: 41 class Target; 42 43 GrDrawBatch(); 44 ~GrDrawBatch() override; 45 46 virtual void getInvariantOutputColor(GrInitInvariantOutput* out) const = 0; 47 virtual void getInvariantOutputCoverage(GrInitInvariantOutput* out) const = 0; 48 49 const GrPipeline* pipeline() const { 50 SkASSERT(fPipelineInstalled); 51 return reinterpret_cast<const GrPipeline*>(fPipelineStorage.get()); 52 } 53 54 bool installPipeline(const GrPipeline::CreateArgs&); 55 56 // TODO no GrPrimitiveProcessors yet read fragment position 57 bool willReadFragmentPosition() const { return false; } 58 59private: 60 /** 61 * initBatchTracker is a hook for the some additional overrides / optimization possibilities 62 * from the GrXferProcessor. 63 */ 64 virtual void initBatchTracker(const GrPipelineOptimizations&) = 0; 65 66protected: 67 SkTArray<SkAutoTUnref<GrBatchUploader>, true> fInlineUploads; 68 69private: 70 SkAlignedSTStorage<1, GrPipeline> fPipelineStorage; 71 bool fPipelineInstalled; 72 typedef GrBatch INHERITED; 73}; 74 75#endif 76