Overte C++ Documentation
PageManager.h
1 //
2 // Created by Sam Gateau on 10/8/2014.
3 // Split from Resource.h/Resource.cpp by Bradley Austin Davis on 2016/08/07
4 // Copyright 2014 High Fidelity, Inc.
5 //
6 // Distributed under the Apache License, Version 2.0.
7 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
8 //
9 #ifndef hifi_gpu_PageManager_h
10 #define hifi_gpu_PageManager_h
11 
12 #include "Forward.h"
13 
14 #include <vector>
15 
16 namespace gpu {
17 
21 struct PageManager {
22  static const Size DEFAULT_PAGE_SIZE = 4096;
23 
24  // Currently only one flag... 'dirty'
25  enum Flag {
26  DIRTY = 0x01,
27  };
28 
29  using FlagType = uint8_t;
30 
31  // A list of flags
32  using Vector = std::vector<FlagType>;
33  // A list of pages
34  using Pages = std::vector<Size>;
35 
36  Vector _pages;
37  uint8 _flags{ 0 };
38  const Size _pageSize;
39 
40  PageManager(Size pageSize = DEFAULT_PAGE_SIZE);
41  PageManager& operator=(const PageManager& other);
42 
49  bool operator()(uint8 desiredFlags) const;
50 
58  void markPage(Size index, uint8 markFlags = DIRTY);
59 
67  void markRegion(Size offset, Size bytes, uint8 markFlags = DIRTY);
68 
73  Size getPageCount(uint8_t desiredFlags = DIRTY) const;
74 
79  Size getSize(uint8_t desiredFlags = DIRTY) const;
80 
86  void setPageCount(Size count);
87 
92  Size getRequiredPageCount(Size size) const;
93 
99  Size getRequiredSize(Size size) const;
100 
107  Size accommodate(Size size);
108 
116  Pages getMarkedPages(uint8_t desiredFlags = DIRTY, bool clear = true);
117 
126  bool getNextTransferBlock(Size& outOffset, Size& outSize, Size& currentPage);
127 };
128 
129 };
130 
131 #endif
Definition: PageManager.h:21
Size getPageCount(uint8_t desiredFlags=DIRTY) const
Definition: PageManager.cpp:61
bool operator()(uint8 desiredFlags) const
Check for given flags in this page manager.
Definition: PageManager.cpp:23
Size getRequiredSize(Size size) const
Definition: PageManager.cpp:87
Size getRequiredPageCount(Size size) const
Definition: PageManager.cpp:79
Size accommodate(Size size)
Definition: PageManager.cpp:91
Size getSize(uint8_t desiredFlags=DIRTY) const
Definition: PageManager.cpp:71
void markRegion(Size offset, Size bytes, uint8 markFlags=DIRTY)
Mark memory area in page manager with a desired flag.
Definition: PageManager.cpp:33
void setPageCount(Size count)
Resizes page manager to a specified number of pages.
Definition: PageManager.cpp:75
void markPage(Size index, uint8 markFlags=DIRTY)
Add given flag fot a page.
Definition: PageManager.cpp:27
Pages getMarkedPages(uint8_t desiredFlags=DIRTY, bool clear=true)
Definition: PageManager.cpp:99
bool getNextTransferBlock(Size &outOffset, Size &outSize, Size &currentPage)
Gets a block of data that needs to be transferred to the GPU.
Definition: PageManager.cpp:116