LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/gpu - GrBufferAllocPool.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 2 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 4 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2010 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 GrBufferAllocPool_DEFINED
       9             : #define GrBufferAllocPool_DEFINED
      10             : 
      11             : #include "SkTArray.h"
      12             : #include "SkTDArray.h"
      13             : #include "SkTypes.h"
      14             : #include "GrTypesPriv.h"
      15             : 
      16             : class GrBuffer;
      17             : class GrGpu;
      18             : 
      19             : /**
      20             :  * A pool of geometry buffers tied to a GrGpu.
      21             :  *
      22             :  * The pool allows a client to make space for geometry and then put back excess
      23             :  * space if it over allocated. When a client is ready to draw from the pool
      24             :  * it calls unmap on the pool ensure buffers are ready for drawing. The pool
      25             :  * can be reset after drawing is completed to recycle space.
      26             :  *
      27             :  * At creation time a minimum per-buffer size can be specified. Additionally,
      28             :  * a number of buffers to preallocate can be specified. These will
      29             :  * be allocated at the min size and kept around until the pool is destroyed.
      30             :  */
      31             : class GrBufferAllocPool : SkNoncopyable {
      32             : public:
      33             :     /**
      34             :      * Ensures all buffers are unmapped and have all data written to them.
      35             :      * Call before drawing using buffers from the pool.
      36             :      */
      37             :     void unmap();
      38             : 
      39             :     /**
      40             :      *  Invalidates all the data in the pool, unrefs non-preallocated buffers.
      41             :      */
      42             :     void reset();
      43             : 
      44             :     /**
      45             :      * Frees data from makeSpaces in LIFO order.
      46             :      */
      47             :     void putBack(size_t bytes);
      48             : 
      49             : protected:
      50             :     /**
      51             :      * Constructor
      52             :      *
      53             :      * @param gpu                   The GrGpu used to create the buffers.
      54             :      * @param bufferType            The type of buffers to create.
      55             :      * @param bufferSize            The minimum size of created buffers.
      56             :      *                              This value will be clamped to some
      57             :      *                              reasonable minimum.
      58             :      */
      59             :      GrBufferAllocPool(GrGpu* gpu,
      60             :                        GrBufferType bufferType,
      61             :                        size_t   bufferSize = 0);
      62             : 
      63             :      virtual ~GrBufferAllocPool();
      64             : 
      65             :     /**
      66             :      * Returns a block of memory to hold data. A buffer designated to hold the
      67             :      * data is given to the caller. The buffer may or may not be locked. The
      68             :      * returned ptr remains valid until any of the following:
      69             :      *      *makeSpace is called again.
      70             :      *      *unmap is called.
      71             :      *      *reset is called.
      72             :      *      *this object is destroyed.
      73             :      *
      74             :      * Once unmap on the pool is called the data is guaranteed to be in the
      75             :      * buffer at the offset indicated by offset. Until that time it may be
      76             :      * in temporary storage and/or the buffer may be locked.
      77             :      *
      78             :      * @param size         the amount of data to make space for
      79             :      * @param alignment    alignment constraint from start of buffer
      80             :      * @param buffer       returns the buffer that will hold the data.
      81             :      * @param offset       returns the offset into buffer of the data.
      82             :      * @return pointer to where the client should write the data.
      83             :      */
      84             :     void* makeSpace(size_t size,
      85             :                     size_t alignment,
      86             :                     const GrBuffer** buffer,
      87             :                     size_t* offset);
      88             : 
      89             :     GrBuffer* getBuffer(size_t size);
      90             : 
      91             : private:
      92             :     struct BufferBlock {
      93             :         size_t      fBytesFree;
      94             :         GrBuffer*   fBuffer;
      95             :     };
      96             : 
      97             :     bool createBlock(size_t requestSize);
      98             :     void destroyBlock();
      99             :     void deleteBlocks();
     100             :     void flushCpuData(const BufferBlock& block, size_t flushSize);
     101             :     void* resetCpuData(size_t newSize);
     102             : #ifdef SK_DEBUG
     103             :     void validate(bool unusedBlockAllowed = false) const;
     104             : #endif
     105             :     size_t                          fBytesInUse;
     106             : 
     107             :     GrGpu*                          fGpu;
     108             :     size_t                          fMinBlockSize;
     109             :     GrBufferType                    fBufferType;
     110             : 
     111             :     SkTArray<BufferBlock>           fBlocks;
     112             :     void*                           fCpuData;
     113             :     void*                           fBufferPtr;
     114             :     size_t                          fBufferMapThreshold;
     115             : };
     116             : 
     117             : /**
     118             :  * A GrBufferAllocPool of vertex buffers
     119             :  */
     120           0 : class GrVertexBufferAllocPool : public GrBufferAllocPool {
     121             : public:
     122             :     /**
     123             :      * Constructor
     124             :      *
     125             :      * @param gpu                   The GrGpu used to create the vertex buffers.
     126             :      */
     127             :     GrVertexBufferAllocPool(GrGpu* gpu);
     128             : 
     129             :     /**
     130             :      * Returns a block of memory to hold vertices. A buffer designated to hold
     131             :      * the vertices given to the caller. The buffer may or may not be locked.
     132             :      * The returned ptr remains valid until any of the following:
     133             :      *      *makeSpace is called again.
     134             :      *      *unmap is called.
     135             :      *      *reset is called.
     136             :      *      *this object is destroyed.
     137             :      *
     138             :      * Once unmap on the pool is called the vertices are guaranteed to be in
     139             :      * the buffer at the offset indicated by startVertex. Until that time they
     140             :      * may be in temporary storage and/or the buffer may be locked.
     141             :      *
     142             :      * @param vertexSize   specifies size of a vertex to allocate space for
     143             :      * @param vertexCount  number of vertices to allocate space for
     144             :      * @param buffer       returns the vertex buffer that will hold the
     145             :      *                     vertices.
     146             :      * @param startVertex  returns the offset into buffer of the first vertex.
     147             :      *                     In units of the size of a vertex from layout param.
     148             :      * @return pointer to first vertex.
     149             :      */
     150             :     void* makeSpace(size_t vertexSize,
     151             :                     int vertexCount,
     152             :                     const GrBuffer** buffer,
     153             :                     int* startVertex);
     154             : 
     155             : private:
     156             :     typedef GrBufferAllocPool INHERITED;
     157             : };
     158             : 
     159             : /**
     160             :  * A GrBufferAllocPool of index buffers
     161             :  */
     162           0 : class GrIndexBufferAllocPool : public GrBufferAllocPool {
     163             : public:
     164             :     /**
     165             :      * Constructor
     166             :      *
     167             :      * @param gpu                   The GrGpu used to create the index buffers.
     168             :      */
     169             :     GrIndexBufferAllocPool(GrGpu* gpu);
     170             : 
     171             :     /**
     172             :      * Returns a block of memory to hold indices. A buffer designated to hold
     173             :      * the indices is given to the caller. The buffer may or may not be locked.
     174             :      * The returned ptr remains valid until any of the following:
     175             :      *      *makeSpace is called again.
     176             :      *      *unmap is called.
     177             :      *      *reset is called.
     178             :      *      *this object is destroyed.
     179             :      *
     180             :      * Once unmap on the pool is called the indices are guaranteed to be in the
     181             :      * buffer at the offset indicated by startIndex. Until that time they may be
     182             :      * in temporary storage and/or the buffer may be locked.
     183             :      *
     184             :      * @param indexCount   number of indices to allocate space for
     185             :      * @param buffer       returns the index buffer that will hold the indices.
     186             :      * @param startIndex   returns the offset into buffer of the first index.
     187             :      * @return pointer to first index.
     188             :      */
     189             :     void* makeSpace(int indexCount,
     190             :                     const GrBuffer** buffer,
     191             :                     int* startIndex);
     192             : 
     193             : private:
     194             :     typedef GrBufferAllocPool INHERITED;
     195             : };
     196             : 
     197             : #endif

Generated by: LCOV version 1.13