blob: 5a5ade10b58e9d5290d535a5819028c7a1eba16f [file] [log] [blame]
Geoff Langf23eb282013-07-22 10:52:19 -04001//
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
15namespace rx
16{
17
18class 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