Home | History | Annotate | Download | only in renderer
      1 //
      2 // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 // IndexRangeCache.h: Defines the rx::IndexRangeCache class which stores information about
      8 // ranges of indices.
      9 
     10 #ifndef LIBGLESV2_RENDERER_INDEXRANGECACHE_H_
     11 #define LIBGLESV2_RENDERER_INDEXRANGECACHE_H_
     12 
     13 #include "common/angleutils.h"
     14 
     15 namespace rx
     16 {
     17 
     18 class IndexRangeCache
     19 {
     20   public:
     21     void addRange(GLenum type, intptr_t offset, GLsizei count, unsigned int minIdx, unsigned int maxIdx,
     22                   unsigned int streamOffset);
     23     bool findRange(GLenum type, intptr_t offset, GLsizei count, unsigned int *outMinIndex,
     24                    unsigned int *outMaxIndex, unsigned int *outStreamOffset) const;
     25 
     26     void invalidateRange(unsigned int offset, unsigned int size);
     27     void clear();
     28 
     29   private:
     30     struct IndexRange
     31     {
     32         GLenum type;
     33         intptr_t offset;
     34         GLsizei count;
     35 
     36         IndexRange();
     37         IndexRange(GLenum type, intptr_t offset, GLsizei count);
     38 
     39         bool operator<(const IndexRange& rhs) const;
     40     };
     41 
     42     struct IndexBounds
     43     {
     44         unsigned int minIndex;
     45         unsigned int maxIndex;
     46         unsigned int streamOffset;
     47 
     48         IndexBounds();
     49         IndexBounds(unsigned int minIdx, unsigned int maxIdx, unsigned int offset);
     50     };
     51 
     52     typedef std::map<IndexRange, IndexBounds> IndexRangeMap;
     53     IndexRangeMap mIndexRangeCache;
     54 };
     55 
     56 }
     57 
     58 #endif LIBGLESV2_RENDERER_INDEXRANGECACHE_H
     59