| Index: src/gpu/instanced/InstancedRendering.h
|
| diff --git a/src/gpu/instanced/InstancedRendering.h b/src/gpu/instanced/InstancedRendering.h
|
| deleted file mode 100644
|
| index 863839c19dc9e9194be49fd2dd010c6d5945a38e..0000000000000000000000000000000000000000
|
| --- a/src/gpu/instanced/InstancedRendering.h
|
| +++ /dev/null
|
| @@ -1,186 +0,0 @@
|
| -/*
|
| - * Copyright 2016 Google Inc.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#ifndef gr_instanced_InstancedRendering_DEFINED
|
| -#define gr_instanced_InstancedRendering_DEFINED
|
| -
|
| -#include "GrMemoryPool.h"
|
| -#include "SkTInternalLList.h"
|
| -#include "batches/GrDrawBatch.h"
|
| -#include "instanced/InstancedRenderingTypes.h"
|
| -#include "../private/GrInstancedPipelineInfo.h"
|
| -
|
| -class GrResourceProvider;
|
| -
|
| -namespace gr_instanced {
|
| -
|
| -class InstanceProcessor;
|
| -
|
| -/**
|
| - * This class serves as a centralized clearinghouse for instanced rendering. It accumulates data for
|
| - * instanced draws into one location, and creates special batches that pull from this data. The
|
| - * nature of instanced rendering allows these batches to combine well and render efficiently.
|
| - *
|
| - * During a flush, this class assembles the accumulated draw data into a single vertex and texel
|
| - * buffer, and its subclass draws the batches using backend-specific instanced rendering APIs.
|
| - *
|
| - * This class is responsible for the CPU side of instanced rendering. Shaders are implemented by
|
| - * InstanceProcessor.
|
| - */
|
| -class InstancedRendering : public SkNoncopyable {
|
| -public:
|
| - virtual ~InstancedRendering() { SkASSERT(State::kRecordingDraws == fState); }
|
| -
|
| - GrGpu* gpu() const { return fGpu; }
|
| -
|
| - /**
|
| - * These methods make a new record internally for an instanced draw, and return a batch that is
|
| - * effectively just an index to that record. The returned batch is not self-contained, but
|
| - * rather relies on this class to handle the rendering. The client must call beginFlush() on
|
| - * this class before attempting to flush batches returned by it. It is invalid to record new
|
| - * draws between beginFlush() and endFlush().
|
| - */
|
| - GrDrawBatch* SK_WARN_UNUSED_RESULT recordRect(const SkRect&, const SkMatrix&, GrColor,
|
| - bool antialias, const GrInstancedPipelineInfo&,
|
| - bool* useHWAA);
|
| -
|
| - GrDrawBatch* SK_WARN_UNUSED_RESULT recordRect(const SkRect&, const SkMatrix&, GrColor,
|
| - const SkRect& localRect, bool antialias,
|
| - const GrInstancedPipelineInfo&, bool* useHWAA);
|
| -
|
| - GrDrawBatch* SK_WARN_UNUSED_RESULT recordRect(const SkRect&, const SkMatrix&, GrColor,
|
| - const SkMatrix& localMatrix, bool antialias,
|
| - const GrInstancedPipelineInfo&, bool* useHWAA);
|
| -
|
| - GrDrawBatch* SK_WARN_UNUSED_RESULT recordOval(const SkRect&, const SkMatrix&, GrColor,
|
| - bool antialias, const GrInstancedPipelineInfo&,
|
| - bool* useHWAA);
|
| -
|
| - GrDrawBatch* SK_WARN_UNUSED_RESULT recordRRect(const SkRRect&, const SkMatrix&, GrColor,
|
| - bool antialias, const GrInstancedPipelineInfo&,
|
| - bool* useHWAA);
|
| -
|
| - GrDrawBatch* SK_WARN_UNUSED_RESULT recordDRRect(const SkRRect& outer, const SkRRect& inner,
|
| - const SkMatrix&, GrColor, bool antialias,
|
| - const GrInstancedPipelineInfo&, bool* useHWAA);
|
| -
|
| - /**
|
| - * Compiles all recorded draws into GPU buffers and allows the client to begin flushing the
|
| - * batches created by this class.
|
| - */
|
| - void beginFlush(GrResourceProvider*);
|
| -
|
| - /**
|
| - * Called once the batches created previously by this class have all been released. Allows the
|
| - * client to begin recording draws again.
|
| - */
|
| - void endFlush();
|
| -
|
| - enum class ResetType : bool {
|
| - kDestroy,
|
| - kAbandon
|
| - };
|
| -
|
| - /**
|
| - * Resets all GPU resources, including those that are held long term. They will be lazily
|
| - * reinitialized if the class begins to be used again.
|
| - */
|
| - void resetGpuResources(ResetType);
|
| -
|
| -protected:
|
| - class Batch : public GrDrawBatch {
|
| - public:
|
| - SK_DECLARE_INTERNAL_LLIST_INTERFACE(Batch);
|
| -
|
| - ~Batch() override;
|
| - const char* name() const override { return "Instanced Batch"; }
|
| -
|
| - struct Draw {
|
| - Instance fInstance;
|
| - IndexRange fGeometry;
|
| - Draw* fNext;
|
| - };
|
| -
|
| - Draw& getSingleDraw() const { SkASSERT(fHeadDraw && !fHeadDraw->fNext); return *fHeadDraw; }
|
| - Instance& getSingleInstance() const { return this->getSingleDraw().fInstance; }
|
| -
|
| - void appendRRectParams(const SkRRect&);
|
| - void appendParamsTexel(const SkScalar* vals, int count);
|
| - void appendParamsTexel(SkScalar x, SkScalar y, SkScalar z, SkScalar w);
|
| - void appendParamsTexel(SkScalar x, SkScalar y, SkScalar z);
|
| -
|
| - protected:
|
| - Batch(uint32_t classID, InstancedRendering* ir);
|
| -
|
| - void initBatchTracker(const GrXPOverridesForBatch&) override;
|
| - bool onCombineIfPossible(GrBatch* other, const GrCaps& caps) override;
|
| -
|
| - void computePipelineOptimizations(GrInitInvariantOutput* color,
|
| - GrInitInvariantOutput* coverage,
|
| - GrBatchToXPOverrides*) const override;
|
| -
|
| - void onPrepare(GrBatchFlushState*) override {}
|
| - void onDraw(GrBatchFlushState*) override;
|
| -
|
| - InstancedRendering* const fInstancedRendering;
|
| - BatchInfo fInfo;
|
| - SkSTArray<5, ParamsTexel, true> fParams;
|
| - bool fIsTracked;
|
| - int fNumDraws;
|
| - int fNumChangesInGeometry;
|
| - Draw* fHeadDraw;
|
| - Draw* fTailDraw;
|
| -
|
| - typedef GrDrawBatch INHERITED;
|
| -
|
| - friend class InstancedRendering;
|
| - };
|
| -
|
| - typedef SkTInternalLList<Batch> BatchList;
|
| -
|
| - InstancedRendering(GrGpu* gpu, AntialiasMode lastSupportedAAMode, bool canRenderToFloat);
|
| -
|
| - const BatchList& trackedBatches() const { return fTrackedBatches; }
|
| - const GrBuffer* vertexBuffer() const { SkASSERT(fVertexBuffer); return fVertexBuffer; }
|
| - const GrBuffer* indexBuffer() const { SkASSERT(fIndexBuffer); return fIndexBuffer; }
|
| -
|
| - virtual void onBeginFlush(GrResourceProvider*) = 0;
|
| - virtual void onDraw(const GrPipeline&, const InstanceProcessor&, const Batch*) = 0;
|
| - virtual void onEndFlush() = 0;
|
| - virtual void onResetGpuResources(ResetType) = 0;
|
| -
|
| -private:
|
| - enum class State : bool {
|
| - kRecordingDraws,
|
| - kFlushing
|
| - };
|
| -
|
| - Batch* SK_WARN_UNUSED_RESULT recordShape(ShapeType, const SkRect& bounds,
|
| - const SkMatrix& viewMatrix, GrColor,
|
| - const SkRect& localRect, bool antialias,
|
| - const GrInstancedPipelineInfo&, bool* requireHWAA);
|
| -
|
| - bool selectAntialiasMode(const SkMatrix& viewMatrix, bool antialias,
|
| - const GrInstancedPipelineInfo&, bool* useHWAA, AntialiasMode*);
|
| -
|
| - virtual Batch* createBatch() = 0;
|
| -
|
| - const SkAutoTUnref<GrGpu> fGpu;
|
| - const AntialiasMode fLastSupportedAAMode;
|
| - const bool fCanRenderToFloat;
|
| - State fState;
|
| - GrMemoryPool fDrawPool;
|
| - SkSTArray<1024, ParamsTexel, true> fParams;
|
| - BatchList fTrackedBatches;
|
| - SkAutoTUnref<const GrBuffer> fVertexBuffer;
|
| - SkAutoTUnref<const GrBuffer> fIndexBuffer;
|
| - SkAutoTUnref<GrBuffer> fParamsBuffer;
|
| -};
|
| -
|
| -}
|
| -
|
| -#endif
|
|
|