1cb93a386Sopenharmony_ci//
2cb93a386Sopenharmony_ci// Copyright 2013 The ANGLE Project Authors. All rights reserved.
3cb93a386Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be
4cb93a386Sopenharmony_ci// found in the LICENSE file.
5cb93a386Sopenharmony_ci//
6cb93a386Sopenharmony_ci
7cb93a386Sopenharmony_ci// IndexRangeCache.h: Defines the gl::IndexRangeCache class which stores information about
8cb93a386Sopenharmony_ci// ranges of indices.
9cb93a386Sopenharmony_ci
10cb93a386Sopenharmony_ci#ifndef LIBANGLE_INDEXRANGECACHE_H_
11cb93a386Sopenharmony_ci#define LIBANGLE_INDEXRANGECACHE_H_
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_ci#include "angle_gl.h"
14cb93a386Sopenharmony_ci#include "common/PackedEnums.h"
15cb93a386Sopenharmony_ci#include "common/angleutils.h"
16cb93a386Sopenharmony_ci#include "common/mathutil.h"
17cb93a386Sopenharmony_ci
18cb93a386Sopenharmony_ci#include <map>
19cb93a386Sopenharmony_ci
20cb93a386Sopenharmony_cinamespace gl
21cb93a386Sopenharmony_ci{
22cb93a386Sopenharmony_ci
23cb93a386Sopenharmony_ciclass IndexRangeCache
24cb93a386Sopenharmony_ci{
25cb93a386Sopenharmony_ci  public:
26cb93a386Sopenharmony_ci    IndexRangeCache();
27cb93a386Sopenharmony_ci    ~IndexRangeCache();
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_ci    void addRange(DrawElementsType type,
30cb93a386Sopenharmony_ci                  size_t offset,
31cb93a386Sopenharmony_ci                  size_t count,
32cb93a386Sopenharmony_ci                  bool primitiveRestartEnabled,
33cb93a386Sopenharmony_ci                  const IndexRange &range);
34cb93a386Sopenharmony_ci    bool findRange(DrawElementsType type,
35cb93a386Sopenharmony_ci                   size_t offset,
36cb93a386Sopenharmony_ci                   size_t count,
37cb93a386Sopenharmony_ci                   bool primitiveRestartEnabled,
38cb93a386Sopenharmony_ci                   IndexRange *outRange) const;
39cb93a386Sopenharmony_ci
40cb93a386Sopenharmony_ci    void invalidateRange(size_t offset, size_t size);
41cb93a386Sopenharmony_ci    void clear();
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ci  private:
44cb93a386Sopenharmony_ci    struct IndexRangeKey
45cb93a386Sopenharmony_ci    {
46cb93a386Sopenharmony_ci        IndexRangeKey();
47cb93a386Sopenharmony_ci        IndexRangeKey(DrawElementsType type, size_t offset, size_t count, bool primitiveRestart);
48cb93a386Sopenharmony_ci
49cb93a386Sopenharmony_ci        bool operator<(const IndexRangeKey &rhs) const;
50cb93a386Sopenharmony_ci
51cb93a386Sopenharmony_ci        DrawElementsType type;
52cb93a386Sopenharmony_ci        size_t offset;
53cb93a386Sopenharmony_ci        size_t count;
54cb93a386Sopenharmony_ci        bool primitiveRestartEnabled;
55cb93a386Sopenharmony_ci    };
56cb93a386Sopenharmony_ci
57cb93a386Sopenharmony_ci    typedef std::map<IndexRangeKey, IndexRange> IndexRangeMap;
58cb93a386Sopenharmony_ci    IndexRangeMap mIndexRangeCache;
59cb93a386Sopenharmony_ci};
60cb93a386Sopenharmony_ci
61cb93a386Sopenharmony_ci}  // namespace gl
62cb93a386Sopenharmony_ci
63cb93a386Sopenharmony_ci#endif  // LIBANGLE_INDEXRANGECACHE_H_
64