Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(268)

Unified Diff: src/gpu/GrTargetCommands.h

Issue 979493002: Split GrTargetCommands into its own files (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.cpp ('k') | src/gpu/GrTargetCommands.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrTargetCommands.h
diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrTargetCommands.h
similarity index 61%
copy from src/gpu/GrInOrderDrawBuffer.h
copy to src/gpu/GrTargetCommands.h
index 1100d95a9c04fbb0fcf00c602e30e6804dca10c2..b89f581b4a77993c4884b2014c46077bfa2f96b3 100644
--- a/src/gpu/GrInOrderDrawBuffer.h
+++ b/src/gpu/GrTargetCommands.h
@@ -1,23 +1,26 @@
/*
- * Copyright 2011 Google Inc.
+ * Copyright 2015 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
-#ifndef GrInOrderDrawBuffer_DEFINED
-#define GrInOrderDrawBuffer_DEFINED
+#ifndef GrTargetCommands_DEFINED
+#define GrTargetCommands_DEFINED
-#include "GrFlushToGpuDrawTarget.h"
-
-#include "GrBatch.h"
#include "GrBatchTarget.h"
-#include "SkChunkAlloc.h"
-#include "GrPipeline.h"
+#include "GrDrawTarget.h"
+#include "GrGpu.h"
#include "GrPath.h"
+#include "GrPendingProgramElement.h"
+#include "GrRenderTarget.h"
#include "GrTRecorder.h"
+#include "SkRect.h"
+#include "SkTypes.h"
class GrInOrderDrawBuffer;
+class GrVertexBufferAllocPool;
+class GrIndexBufferAllocPool;
class GrTargetCommands : ::SkNoncopyable {
struct SetState;
@@ -302,155 +305,5 @@ private:
void closeBatch();
};
-/**
- * GrInOrderDrawBuffer is an implementation of GrDrawTarget that queues up draws for eventual
- * playback into a GrGpu. In theory one draw buffer could playback into another. When index or
- * vertex buffers are used as geometry sources it is the callers the draw buffer only holds
- * references to the buffers. It is the callers responsibility to ensure that the data is still
- * valid when the draw buffer is played back into a GrGpu. Similarly, it is the caller's
- * responsibility to ensure that all referenced textures, buffers, and render-targets are associated
- * in the GrGpu object that the buffer is played back into. The buffer requires VB and IB pools to
- * store geometry.
- */
-class GrInOrderDrawBuffer : public GrFlushToGpuDrawTarget {
-public:
-
- /**
- * Creates a GrInOrderDrawBuffer
- *
- * @param gpu the gpu object that this draw buffer flushes to.
- * @param vertexPool pool where vertices for queued draws will be saved when
- * the vertex source is either reserved or array.
- * @param indexPool pool where indices for queued draws will be saved when
- * the index source is either reserved or array.
- */
- GrInOrderDrawBuffer(GrGpu* gpu,
- GrVertexBufferAllocPool* vertexPool,
- GrIndexBufferAllocPool* indexPool);
-
- ~GrInOrderDrawBuffer() SK_OVERRIDE;
-
- // tracking for draws
- DrawToken getCurrentDrawToken() SK_OVERRIDE { return DrawToken(this, fDrawID); }
-
- void clearStencilClip(const SkIRect& rect,
- bool insideClip,
- GrRenderTarget* renderTarget) SK_OVERRIDE;
-
- void discard(GrRenderTarget*) SK_OVERRIDE;
-
-protected:
- void willReserveVertexAndIndexSpace(int vertexCount,
- size_t vertexStride,
- int indexCount) SK_OVERRIDE;
-
- void appendIndicesAndTransforms(const void* indexValues, PathIndexType indexType,
- const float* transformValues, PathTransformType transformType,
- int count, char** indicesLocation, float** xformsLocation) {
- int indexBytes = GrPathRange::PathIndexSizeInBytes(indexType);
- *indicesLocation = (char*) fPathIndexBuffer.alloc(count * indexBytes,
- SkChunkAlloc::kThrow_AllocFailType);
- SkASSERT(SkIsAlign4((uintptr_t)*indicesLocation));
- memcpy(*indicesLocation, reinterpret_cast<const char*>(indexValues), count * indexBytes);
-
- const int xformBytes = GrPathRendering::PathTransformSize(transformType) * sizeof(float);
- *xformsLocation = NULL;
-
- if (0 != xformBytes) {
- *xformsLocation = (float*) fPathTransformBuffer.alloc(count * xformBytes,
- SkChunkAlloc::kThrow_AllocFailType);
- SkASSERT(SkIsAlign4((uintptr_t)*xformsLocation));
- memcpy(*xformsLocation, transformValues, count * xformBytes);
- }
- }
-
- bool canConcatToIndexBuffer(const GrIndexBuffer** ib) {
- const GrDrawTarget::GeometrySrcState& geomSrc = this->getGeomSrc();
-
- // we only attempt to concat when reserved verts are used with a client-specified
- // index buffer. To make this work with client-specified VBs we'd need to know if the VB
- // was updated between draws.
- if (kReserved_GeometrySrcType != geomSrc.fVertexSrc ||
- kBuffer_GeometrySrcType != geomSrc.fIndexSrc) {
- return false;
- }
-
- *ib = geomSrc.fIndexBuffer;
- return true;
- }
-
-private:
- friend class GrTargetCommands;
-
- typedef GrGpu::DrawArgs DrawArgs;
-
- void onReset() SK_OVERRIDE;
- void onFlush() SK_OVERRIDE;
-
- // overrides from GrDrawTarget
- void onDraw(const GrGeometryProcessor*, const DrawInfo&, const PipelineInfo&) SK_OVERRIDE;
- void onDrawBatch(GrBatch*, const PipelineInfo&) SK_OVERRIDE;
- void onDrawRect(GrPipelineBuilder*,
- GrColor,
- const SkMatrix& viewMatrix,
- const SkRect& rect,
- const SkRect* localRect,
- const SkMatrix* localMatrix) SK_OVERRIDE;
-
- void onStencilPath(const GrPipelineBuilder&,
- const GrPathProcessor*,
- const GrPath*,
- const GrScissorState&,
- const GrStencilSettings&) SK_OVERRIDE;
- void onDrawPath(const GrPathProcessor*,
- const GrPath*,
- const GrStencilSettings&,
- const PipelineInfo&) SK_OVERRIDE;
- void onDrawPaths(const GrPathProcessor*,
- const GrPathRange*,
- const void* indices,
- PathIndexType,
- const float transformValues[],
- PathTransformType,
- int count,
- const GrStencilSettings&,
- const PipelineInfo&) SK_OVERRIDE;
- void onClear(const SkIRect* rect,
- GrColor color,
- bool canIgnoreRect,
- GrRenderTarget* renderTarget) SK_OVERRIDE;
- bool onCopySurface(GrSurface* dst,
- GrSurface* src,
- const SkIRect& srcRect,
- const SkIPoint& dstPoint) SK_OVERRIDE;
-
- // Attempts to concat instances from info onto the previous draw. info must represent an
- // instanced draw. The caller must have already recorded a new draw state and clip if necessary.
- int concatInstancedDraw(const DrawInfo&);
-
- // We lazily record clip changes in order to skip clips that have no effect.
- void recordClipIfNecessary();
- // Records any trace markers for a command
- void recordTraceMarkersIfNecessary(GrTargetCommands::Cmd*);
- SkString getCmdString(int index) const {
- SkASSERT(index < fGpuCmdMarkers.count());
- return fGpuCmdMarkers[index].toString();
- }
- bool isIssued(uint32_t drawID) SK_OVERRIDE { return drawID != fDrawID; }
-
- // TODO: Use a single allocator for commands and records
- enum {
- kPathIdxBufferMinReserve = 2 * 64, // 64 uint16_t's
- kPathXformBufferMinReserve = 2 * 64, // 64 two-float transforms
- };
-
- GrTargetCommands fCommands;
- SkTArray<GrTraceMarkerSet, false> fGpuCmdMarkers;
- SkChunkAlloc fPathIndexBuffer;
- SkChunkAlloc fPathTransformBuffer;
- uint32_t fDrawID;
-
- typedef GrFlushToGpuDrawTarget INHERITED;
-};
-
#endif
+
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.cpp ('k') | src/gpu/GrTargetCommands.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698