| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2011 Google Inc. | 2  * Copyright 2011 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #ifndef GrInOrderDrawBuffer_DEFINED | 8 #ifndef GrInOrderDrawBuffer_DEFINED | 
| 9 #define GrInOrderDrawBuffer_DEFINED | 9 #define GrInOrderDrawBuffer_DEFINED | 
| 10 | 10 | 
| 11 #include "GrDrawTarget.h" | 11 #include "GrDrawTarget.h" | 
| 12 #include "GrAllocPool.h" |  | 
| 13 #include "GrAllocator.h" |  | 
| 14 #include "GrGpu.h" | 12 #include "GrGpu.h" | 
| 15 #include "GrIndexBuffer.h" | 13 #include "GrIndexBuffer.h" | 
| 16 #include "GrRenderTarget.h" | 14 #include "GrOptDrawState.h" | 
| 17 #include "GrPath.h" | 15 #include "GrPath.h" | 
| 18 #include "GrPathRange.h" | 16 #include "GrPathRange.h" | 
|  | 17 #include "GrRenderTarget.h" | 
| 19 #include "GrSurface.h" | 18 #include "GrSurface.h" | 
| 20 #include "GrTRecorder.h" | 19 #include "GrTRecorder.h" | 
| 21 #include "GrVertexBuffer.h" | 20 #include "GrVertexBuffer.h" | 
| 22 | 21 | 
| 23 #include "SkClipStack.h" | 22 #include "SkClipStack.h" | 
| 24 #include "SkTemplates.h" | 23 #include "SkTemplates.h" | 
| 25 #include "SkTypes.h" | 24 #include "SkTypes.h" | 
| 26 | 25 | 
| 27 class GrIndexBufferAllocPool; | 26 class GrIndexBufferAllocPool; | 
| 28 class GrVertexBufferAllocPool; | 27 class GrVertexBufferAllocPool; | 
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 217 | 216 | 
| 218         SkIPoint    fDstPoint; | 217         SkIPoint    fDstPoint; | 
| 219         SkIRect     fSrcRect; | 218         SkIRect     fSrcRect; | 
| 220 | 219 | 
| 221     private: | 220     private: | 
| 222         GrPendingIOResource<GrSurface, kWrite_GrIOType> fDst; | 221         GrPendingIOResource<GrSurface, kWrite_GrIOType> fDst; | 
| 223         GrPendingIOResource<GrSurface, kRead_GrIOType> fSrc; | 222         GrPendingIOResource<GrSurface, kRead_GrIOType> fSrc; | 
| 224     }; | 223     }; | 
| 225 | 224 | 
| 226     struct SetState : public Cmd { | 225     struct SetState : public Cmd { | 
| 227         SetState(const GrDrawState& state) : Cmd(kSetState_Cmd), fState(state) {
     } | 226         SetState(const GrOptDrawState* state) : Cmd(kSetState_Cmd), fState(SkRef
     (state)) {} | 
| 228 | 227 | 
| 229         virtual void execute(GrInOrderDrawBuffer*, const GrOptDrawState*); | 228         virtual void execute(GrInOrderDrawBuffer*, const GrOptDrawState*); | 
| 230 | 229 | 
| 231         GrDrawState fState; | 230         SkAutoTUnref<const GrOptDrawState>  fState; | 
| 232         GrGpu::DrawType fDrawType; | 231         GrGpu::DrawType                     fDrawType; | 
| 233         GrDeviceCoordTexture fDstCopy; | 232         GrDeviceCoordTexture                fDstCopy; | 
| 234     }; | 233     }; | 
| 235 | 234 | 
| 236     typedef void* TCmdAlign; // This wouldn't be enough align if a command used 
     long double. | 235     typedef void* TCmdAlign; // This wouldn't be enough align if a command used 
     long double. | 
| 237     typedef GrTRecorder<Cmd, TCmdAlign> CmdBuffer; | 236     typedef GrTRecorder<Cmd, TCmdAlign> CmdBuffer; | 
| 238 | 237 | 
| 239     // overrides from GrDrawTarget | 238     // overrides from GrDrawTarget | 
| 240     virtual void onDraw(const GrDrawState&, | 239     void onDraw(const GrDrawState&, | 
| 241                         const DrawInfo&, | 240                 const DrawInfo&, | 
| 242                         const GrClipMaskManager::ScissorState&) SK_OVERRIDE; | 241                 const GrClipMaskManager::ScissorState&) SK_OVERRIDE; | 
| 243     virtual void onDrawRect(GrDrawState*, | 242     void onDrawRect(GrDrawState*, | 
| 244                             const SkRect& rect, | 243                     const SkRect& rect, | 
| 245                             const SkRect* localRect, | 244                     const SkRect* localRect, | 
| 246                             const SkMatrix* localMatrix) SK_OVERRIDE; | 245                     const SkMatrix* localMatrix) SK_OVERRIDE; | 
| 247 | 246 | 
| 248     virtual void onStencilPath(const GrDrawState&, | 247     void onStencilPath(const GrDrawState&, | 
| 249                                const GrPath*, | 248                        const GrPath*, | 
| 250                                const GrClipMaskManager::ScissorState&, | 249                        const GrClipMaskManager::ScissorState&, | 
| 251                                const GrStencilSettings&) SK_OVERRIDE; | 250                        const GrStencilSettings&) SK_OVERRIDE; | 
| 252     virtual void onDrawPath(const GrDrawState&, | 251     void onDrawPath(const GrDrawState&, | 
| 253                             const GrPath*, | 252                     const GrPath*, | 
| 254                             const GrClipMaskManager::ScissorState&, | 253                     const GrClipMaskManager::ScissorState&, | 
| 255                             const GrStencilSettings&, | 254                     const GrStencilSettings&, | 
| 256                             const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE; | 255                     const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE; | 
| 257     virtual void onDrawPaths(const GrDrawState&, | 256     void onDrawPaths(const GrDrawState&, | 
| 258                              const GrPathRange*, | 257                      const GrPathRange*, | 
| 259                              const uint32_t indices[], | 258                      const uint32_t indices[], | 
| 260                              int count, | 259                      int count, | 
| 261                              const float transforms[], | 260                      const float transforms[], | 
| 262                              PathTransformType, | 261                      PathTransformType, | 
| 263                              const GrClipMaskManager::ScissorState&, | 262                      const GrClipMaskManager::ScissorState&, | 
| 264                              const GrStencilSettings&, | 263                      const GrStencilSettings&, | 
| 265                              const GrDeviceCoordTexture*) SK_OVERRIDE; | 264                      const GrDeviceCoordTexture*) SK_OVERRIDE; | 
| 266     virtual void onClear(const SkIRect* rect, | 265     void onClear(const SkIRect* rect, | 
| 267                          GrColor color, | 266                  GrColor color, | 
| 268                          bool canIgnoreRect, | 267                  bool canIgnoreRect, | 
| 269                          GrRenderTarget* renderTarget) SK_OVERRIDE; | 268                  GrRenderTarget* renderTarget) SK_OVERRIDE; | 
| 270     virtual void setDrawBuffers(DrawInfo*) SK_OVERRIDE; | 269     void setDrawBuffers(DrawInfo*) SK_OVERRIDE; | 
| 271 | 270 | 
| 272     virtual bool onReserveVertexSpace(size_t vertexSize, | 271     bool onReserveVertexSpace(size_t vertexSize, int vertexCount, void** vertice
     s) SK_OVERRIDE; | 
| 273                                       int vertexCount, | 272     bool onReserveIndexSpace(int indexCount, void** indices) SK_OVERRIDE; | 
| 274                                       void** vertices) SK_OVERRIDE; | 273     void releaseReservedVertexSpace() SK_OVERRIDE; | 
| 275     virtual bool onReserveIndexSpace(int indexCount, | 274     void releaseReservedIndexSpace() SK_OVERRIDE; | 
| 276                                      void** indices) SK_OVERRIDE; | 275     void geometrySourceWillPush() SK_OVERRIDE; | 
| 277     virtual void releaseReservedVertexSpace() SK_OVERRIDE; | 276     void geometrySourceWillPop(const GeometrySrcState& restoredState) SK_OVERRID
     E; | 
| 278     virtual void releaseReservedIndexSpace() SK_OVERRIDE; | 277     void willReserveVertexAndIndexSpace(int vertexCount, | 
| 279     virtual void geometrySourceWillPush() SK_OVERRIDE; | 278                                         size_t vertexStride, | 
| 280     virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) SK
     _OVERRIDE; | 279                                         int indexCount) SK_OVERRIDE; | 
| 281     virtual void willReserveVertexAndIndexSpace(int vertexCount, |  | 
| 282                                                 size_t vertexStride, |  | 
| 283                                                 int indexCount) SK_OVERRIDE; |  | 
| 284 | 280 | 
| 285     // Attempts to concat instances from info onto the previous draw. info must 
     represent an | 281     // Attempts to concat instances from info onto the previous draw. info must 
     represent an | 
| 286     // instanced draw. The caller must have already recorded a new draw state an
     d clip if necessary. | 282     // instanced draw. The caller must have already recorded a new draw state an
     d clip if necessary. | 
| 287     int concatInstancedDraw(const GrDrawState&, | 283     int concatInstancedDraw(const GrDrawState&, | 
| 288                             const DrawInfo&, | 284                             const DrawInfo&, | 
| 289                             const GrClipMaskManager::ScissorState&); | 285                             const GrClipMaskManager::ScissorState&); | 
| 290 | 286 | 
| 291     // Determines whether the current draw operation requieres a new drawstate a
     nd if so records it. | 287     // Determines whether the current draw operation requires a new GrOptDrawSta
     te and if so | 
| 292     void recordStateIfNecessary(const GrDrawState&, GrGpu::DrawType, const GrDev
     iceCoordTexture*); | 288     // records it. If the draw can be skipped false is returned and no new GrOpt
     DrawState is | 
|  | 289     // recorded. | 
|  | 290     bool SK_WARN_UNUSED_RESULT recordStateAndShouldDraw(const GrDrawState&, | 
|  | 291                                                         GrGpu::DrawType, | 
|  | 292                                                         const GrDeviceCoordTextu
     re*); | 
| 293     // We lazily record clip changes in order to skip clips that have no effect. | 293     // We lazily record clip changes in order to skip clips that have no effect. | 
| 294     void recordClipIfNecessary(); | 294     void recordClipIfNecessary(); | 
| 295     // Records any trace markers for a command after adding it to the buffer. | 295     // Records any trace markers for a command after adding it to the buffer. | 
| 296     void recordTraceMarkersIfNecessary(); | 296     void recordTraceMarkersIfNecessary(); | 
| 297 | 297 | 
| 298     virtual bool isIssued(uint32_t drawID) { return drawID != fDrawID; } | 298     virtual bool isIssued(uint32_t drawID) { return drawID != fDrawID; } | 
| 299 | 299 | 
| 300     // TODO: Use a single allocator for commands and records | 300     // TODO: Use a single allocator for commands and records | 
| 301     enum { | 301     enum { | 
| 302         kCmdBufferInitialSizeInBytes = 8 * 1024, | 302         kCmdBufferInitialSizeInBytes = 8 * 1024, | 
| 303         kPathIdxBufferMinReserve     = 64, | 303         kPathIdxBufferMinReserve     = 64, | 
| 304         kPathXformBufferMinReserve   = 2 * kPathIdxBufferMinReserve, | 304         kPathXformBufferMinReserve   = 2 * kPathIdxBufferMinReserve, | 
| 305         kGeoPoolStatePreAllocCnt     = 4, | 305         kGeoPoolStatePreAllocCnt     = 4, | 
| 306     }; | 306     }; | 
| 307 | 307 | 
| 308     CmdBuffer                         fCmdBuffer; |  | 
| 309     GrDrawState*                      fLastState; |  | 
| 310     SkTArray<GrTraceMarkerSet, false> fGpuCmdMarkers; |  | 
| 311     GrGpu*                            fDstGpu; |  | 
| 312     GrVertexBufferAllocPool&          fVertexPool; |  | 
| 313     GrIndexBufferAllocPool&           fIndexPool; |  | 
| 314     SkTDArray<uint32_t>               fPathIndexBuffer; |  | 
| 315     SkTDArray<float>                  fPathTransformBuffer; |  | 
| 316 |  | 
| 317     struct GeometryPoolState { | 308     struct GeometryPoolState { | 
| 318         const GrVertexBuffer*   fPoolVertexBuffer; | 309         const GrVertexBuffer*   fPoolVertexBuffer; | 
| 319         int                     fPoolStartVertex; | 310         int                     fPoolStartVertex; | 
| 320         const GrIndexBuffer*    fPoolIndexBuffer; | 311         const GrIndexBuffer*    fPoolIndexBuffer; | 
| 321         int                     fPoolStartIndex; | 312         int                     fPoolStartIndex; | 
| 322         // caller may conservatively over reserve vertices / indices. | 313         // caller may conservatively over reserve vertices / indices. | 
| 323         // we release unused space back to allocator if possible | 314         // we release unused space back to allocator if possible | 
| 324         // can only do this if there isn't an intervening pushGeometrySource() | 315         // can only do this if there isn't an intervening pushGeometrySource() | 
| 325         size_t                  fUsedPoolVertexBytes; | 316         size_t                  fUsedPoolVertexBytes; | 
| 326         size_t                  fUsedPoolIndexBytes; | 317         size_t                  fUsedPoolIndexBytes; | 
| 327     }; | 318     }; | 
| 328 | 319 | 
| 329     typedef SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> GeoPoolStateS
     tack; | 320     typedef SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> GeoPoolStateS
     tack; | 
| 330 | 321 | 
| 331     GeoPoolStateStack                                   fGeoPoolStateStack; | 322     CmdBuffer                           fCmdBuffer; | 
| 332     bool                                                fFlushing; | 323     SkAutoTUnref<const GrOptDrawState>  fLastState; | 
| 333     uint32_t                                            fDrawID; | 324     SkTArray<GrTraceMarkerSet, false>   fGpuCmdMarkers; | 
|  | 325     GrGpu*                              fDstGpu; | 
|  | 326     GrVertexBufferAllocPool&            fVertexPool; | 
|  | 327     GrIndexBufferAllocPool&             fIndexPool; | 
|  | 328     SkTDArray<uint32_t>                 fPathIndexBuffer; | 
|  | 329     SkTDArray<float>                    fPathTransformBuffer; | 
|  | 330     GeoPoolStateStack                   fGeoPoolStateStack; | 
|  | 331     bool                                fFlushing; | 
|  | 332     uint32_t                            fDrawID; | 
| 334 | 333 | 
| 335     typedef GrClipTarget INHERITED; | 334     typedef GrClipTarget INHERITED; | 
| 336 }; | 335 }; | 
| 337 | 336 | 
| 338 #endif | 337 #endif | 
| OLD | NEW | 
|---|