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

Side by Side Diff: src/gpu/GrInOrderDrawBuffer.h

Issue 13581003: Make GrIODB record and play back copySurface. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 10
(...skipping 15 matching lines...) Expand all
26 26
27 /** 27 /**
28 * GrInOrderDrawBuffer is an implementation of GrDrawTarget that queues up draws for eventual 28 * GrInOrderDrawBuffer is an implementation of GrDrawTarget that queues up draws for eventual
29 * playback into a GrGpu. In theory one draw buffer could playback into another. When index or 29 * playback into a GrGpu. In theory one draw buffer could playback into another. When index or
30 * vertex buffers are used as geometry sources it is the callers the draw buffer only holds 30 * vertex buffers are used as geometry sources it is the callers the draw buffer only holds
31 * references to the buffers. It is the callers responsibility to ensure that th e data is still 31 * references to the buffers. It is the callers responsibility to ensure that th e data is still
32 * valid when the draw buffer is played back into a GrGpu. Similarly, it is the caller's 32 * valid when the draw buffer is played back into a GrGpu. Similarly, it is the caller's
33 * responsibility to ensure that all referenced textures, buffers, and render-ta rgets are associated 33 * responsibility to ensure that all referenced textures, buffers, and render-ta rgets are associated
34 * in the GrGpu object that the buffer is played back into. The buffer requires VB and IB pools to 34 * in the GrGpu object that the buffer is played back into. The buffer requires VB and IB pools to
35 * store geometry. 35 * store geometry.
36 */ 36 */
37 class GrInOrderDrawBuffer : public GrDrawTarget { 37 class GrInOrderDrawBuffer : public GrDrawTarget {
38 public: 38 public:
39 39
40 /** 40 /**
41 * Creates a GrInOrderDrawBuffer 41 * Creates a GrInOrderDrawBuffer
42 * 42 *
43 * @param gpu the gpu object that this draw buffer flushes to. 43 * @param gpu the gpu object that this draw buffer flushes to.
44 * @param vertexPool pool where vertices for queued draws will be saved when 44 * @param vertexPool pool where vertices for queued draws will be saved when
45 * the vertex source is either reserved or array. 45 * the vertex source is either reserved or array.
46 * @param indexPool pool where indices for queued draws will be saved when 46 * @param indexPool pool where indices for queued draws will be saved when
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 protected: 80 protected:
81 virtual void clipWillBeSet(const GrClipData* newClip) SK_OVERRIDE; 81 virtual void clipWillBeSet(const GrClipData* newClip) SK_OVERRIDE;
82 82
83 private: 83 private:
84 enum Cmd { 84 enum Cmd {
85 kDraw_Cmd = 1, 85 kDraw_Cmd = 1,
86 kStencilPath_Cmd = 2, 86 kStencilPath_Cmd = 2,
87 kSetState_Cmd = 3, 87 kSetState_Cmd = 3,
88 kSetClip_Cmd = 4, 88 kSetClip_Cmd = 4,
89 kClear_Cmd = 5, 89 kClear_Cmd = 5,
90 kCopySurface_Cmd = 6,
90 }; 91 };
91 92
92 class DrawRecord : public DrawInfo { 93 class DrawRecord : public DrawInfo {
93 public: 94 public:
94 DrawRecord(const DrawInfo& info) : DrawInfo(info) {} 95 DrawRecord(const DrawInfo& info) : DrawInfo(info) {}
95 const GrVertexBuffer* fVertexBuffer; 96 const GrVertexBuffer* fVertexBuffer;
96 const GrIndexBuffer* fIndexBuffer; 97 const GrIndexBuffer* fIndexBuffer;
97 }; 98 };
98 99
99 struct StencilPath { 100 struct StencilPath : GrNoncopyable {
100 StencilPath(); 101 StencilPath();
101 102
102 SkAutoTUnref<const GrPath> fPath; 103 SkAutoTUnref<const GrPath> fPath;
103 SkStrokeRec fStroke; 104 SkStrokeRec fStroke;
104 SkPath::FillType fFill; 105 SkPath::FillType fFill;
105 }; 106 };
106 107
107 struct Clear { 108 struct Clear : GrNoncopyable {
108 Clear() : fRenderTarget(NULL) {} 109 Clear() : fRenderTarget(NULL) {}
109 ~Clear() { GrSafeUnref(fRenderTarget); } 110 ~Clear() { GrSafeUnref(fRenderTarget); }
110 111
111 GrIRect fRect; 112 GrIRect fRect;
112 GrColor fColor; 113 GrColor fColor;
113 GrRenderTarget* fRenderTarget; 114 GrRenderTarget* fRenderTarget;
114 }; 115 };
115 116
117 struct CopySurface : GrNoncopyable {
118 SkAutoTUnref<GrSurface> fDst;
119 SkAutoTUnref<GrSurface> fSrc;
120 SkIRect fSrcRect;
121 SkIPoint fDstPoint;
122 };
123
116 // overrides from GrDrawTarget 124 // overrides from GrDrawTarget
117 virtual void onDraw(const DrawInfo&) SK_OVERRIDE; 125 virtual void onDraw(const DrawInfo&) SK_OVERRIDE;
118 virtual void onDrawRect(const GrRect& rect, 126 virtual void onDrawRect(const GrRect& rect,
119 const SkMatrix* matrix, 127 const SkMatrix* matrix,
120 const GrRect* localRect, 128 const GrRect* localRect,
121 const SkMatrix* localMatrix) SK_OVERRIDE; 129 const SkMatrix* localMatrix) SK_OVERRIDE;
122 virtual void onStencilPath(const GrPath*, const SkStrokeRec& stroke, SkPath: :FillType) SK_OVERRIDE; 130 virtual void onStencilPath(const GrPath*, const SkStrokeRec& stroke, SkPath: :FillType) SK_OVERRIDE;
123 virtual bool onReserveVertexSpace(size_t vertexSize, 131 virtual bool onReserveVertexSpace(size_t vertexSize,
124 int vertexCount, 132 int vertexCount,
125 void** vertices) SK_OVERRIDE; 133 void** vertices) SK_OVERRIDE;
126 virtual bool onReserveIndexSpace(int indexCount, 134 virtual bool onReserveIndexSpace(int indexCount,
127 void** indices) SK_OVERRIDE; 135 void** indices) SK_OVERRIDE;
128 virtual void releaseReservedVertexSpace() SK_OVERRIDE; 136 virtual void releaseReservedVertexSpace() SK_OVERRIDE;
129 virtual void releaseReservedIndexSpace() SK_OVERRIDE; 137 virtual void releaseReservedIndexSpace() SK_OVERRIDE;
130 virtual void onSetVertexSourceToArray(const void* vertexArray, 138 virtual void onSetVertexSourceToArray(const void* vertexArray,
131 int vertexCount) SK_OVERRIDE; 139 int vertexCount) SK_OVERRIDE;
132 virtual void onSetIndexSourceToArray(const void* indexArray, 140 virtual void onSetIndexSourceToArray(const void* indexArray,
133 int indexCount) SK_OVERRIDE; 141 int indexCount) SK_OVERRIDE;
134 virtual void releaseVertexArray() SK_OVERRIDE; 142 virtual void releaseVertexArray() SK_OVERRIDE;
135 virtual void releaseIndexArray() SK_OVERRIDE; 143 virtual void releaseIndexArray() SK_OVERRIDE;
136 virtual void geometrySourceWillPush() SK_OVERRIDE; 144 virtual void geometrySourceWillPush() SK_OVERRIDE;
137 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) SK _OVERRIDE; 145 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) SK _OVERRIDE;
138 virtual void willReserveVertexAndIndexSpace(int vertexCount, 146 virtual void willReserveVertexAndIndexSpace(int vertexCount,
139 int indexCount) SK_OVERRIDE; 147 int indexCount) SK_OVERRIDE;
148 virtual bool onCopySurface(GrSurface* dst,
149 GrSurface* src,
150 const SkIRect& srcRect,
151 const SkIPoint& dstPoint) SK_OVERRIDE;
152 virtual bool onCanCopySurface(GrSurface* dst,
153 GrSurface* src,
154 const SkIRect& srcRect,
155 const SkIPoint& dstPoint) SK_OVERRIDE;
156
140 bool quickInsideClip(const SkRect& devBounds); 157 bool quickInsideClip(const SkRect& devBounds);
141 158
142 // Attempts to concat instances from info onto the previous draw. info must represent an 159 // Attempts to concat instances from info onto the previous draw. info must represent an
143 // instanced draw. The caller must have already recorded a new draw state an d clip if necessary. 160 // instanced draw. The caller must have already recorded a new draw state an d clip if necessary.
144 int concatInstancedDraw(const DrawInfo& info); 161 int concatInstancedDraw(const DrawInfo& info);
145 162
146 // we lazily record state and clip changes in order to skip clips and states that have no 163 // we lazily record state and clip changes in order to skip clips and states that have no
147 // effect. 164 // effect.
148 bool needsNewState() const; 165 bool needsNewState() const;
149 bool needsNewClip() const; 166 bool needsNewClip() const;
150 167
151 // these functions record a command 168 // these functions record a command
152 void recordState(); 169 void recordState();
153 void recordClip(); 170 void recordClip();
154 DrawRecord* recordDraw(const DrawInfo&); 171 DrawRecord* recordDraw(const DrawInfo&);
155 StencilPath* recordStencilPath(); 172 StencilPath* recordStencilPath();
156 Clear* recordClear(); 173 Clear* recordClear();
174 CopySurface* recordCopySurface();
157 175
176 // TODO: Use a single allocator for commands and records
158 enum { 177 enum {
159 kCmdPreallocCnt = 32, 178 kCmdPreallocCnt = 32,
160 kDrawPreallocCnt = 8, 179 kDrawPreallocCnt = 8,
161 kStencilPathPreallocCnt = 8, 180 kStencilPathPreallocCnt = 8,
162 kStatePreallocCnt = 8, 181 kStatePreallocCnt = 8,
163 kClipPreallocCnt = 8, 182 kClipPreallocCnt = 8,
164 kClearPreallocCnt = 4, 183 kClearPreallocCnt = 4,
165 kGeoPoolStatePreAllocCnt = 4, 184 kGeoPoolStatePreAllocCnt = 4,
185 kCopySurfacePreallocCnt = 4,
166 }; 186 };
167 187
168 SkSTArray<kCmdPreallocCnt, uint8_t, true> fCmds; 188 SkSTArray<kCmdPreallocCnt, uint8_t, true> fCmds;
169 GrSTAllocator<kDrawPreallocCnt, DrawRecord> fDraws; 189 GrSTAllocator<kDrawPreallocCnt, DrawRecord> fDraws;
170 GrSTAllocator<kStatePreallocCnt, StencilPath> fStencilP aths; 190 GrSTAllocator<kStatePreallocCnt, StencilPath> fStencilP aths;
171 GrSTAllocator<kStatePreallocCnt, GrDrawState::DeferredState> fStates; 191 GrSTAllocator<kStatePreallocCnt, GrDrawState::DeferredState> fStates;
172 GrSTAllocator<kClearPreallocCnt, Clear> fClears; 192 GrSTAllocator<kClearPreallocCnt, Clear> fClears;
173 193 GrSTAllocator<kCopySurfacePreallocCnt, CopySurface> fCopySurf aces;
174 GrSTAllocator<kClipPreallocCnt, SkClipStack> fClips; 194 GrSTAllocator<kClipPreallocCnt, SkClipStack> fClips;
175 GrSTAllocator<kClipPreallocCnt, SkIPoint> fClipOrigins; 195 GrSTAllocator<kClipPreallocCnt, SkIPoint> fClipOrig ins;
176 196
177 GrDrawTarget* fDstGpu; 197 GrDrawTarget* fDstGpu;
178 198
179 bool fClipSet; 199 bool fClipSet;
180 200
181 enum ClipProxyState { 201 enum ClipProxyState {
182 kUnknown_ClipProxyState, 202 kUnknown_ClipProxyState,
183 kValid_ClipProxyState, 203 kValid_ClipProxyState,
184 kInvalid_ClipProxyState 204 kInvalid_ClipProxyState
185 }; 205 };
(...skipping 16 matching lines...) Expand all
202 size_t fUsedPoolIndexBytes; 222 size_t fUsedPoolIndexBytes;
203 }; 223 };
204 SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> fGeoPoolStateStack; 224 SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> fGeoPoolStateStack;
205 225
206 bool fFlushing; 226 bool fFlushing;
207 227
208 typedef GrDrawTarget INHERITED; 228 typedef GrDrawTarget INHERITED;
209 }; 229 };
210 230
211 #endif 231 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698