summaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2019-03-04 05:54:16 +0100
committerbunnei <bunneidev@gmail.com>2019-03-21 03:36:02 +0100
commit22d3dfbcd4c606d40e5ae36970db4661c302859f (patch)
tree24bf6fe7420aab7a34be7782bc1830e053b64679 /src/common
parentgpu: Move GPUVAddr definition to common_types. (diff)
downloadyuzu-22d3dfbcd4c606d40e5ae36970db4661c302859f.tar
yuzu-22d3dfbcd4c606d40e5ae36970db4661c302859f.tar.gz
yuzu-22d3dfbcd4c606d40e5ae36970db4661c302859f.tar.bz2
yuzu-22d3dfbcd4c606d40e5ae36970db4661c302859f.tar.lz
yuzu-22d3dfbcd4c606d40e5ae36970db4661c302859f.tar.xz
yuzu-22d3dfbcd4c606d40e5ae36970db4661c302859f.tar.zst
yuzu-22d3dfbcd4c606d40e5ae36970db4661c302859f.zip
Diffstat (limited to 'src/common')
-rw-r--r--src/common/page_table.cpp2
-rw-r--r--src/common/page_table.h6
2 files changed, 7 insertions, 1 deletions
diff --git a/src/common/page_table.cpp b/src/common/page_table.cpp
index 8eba1c3f1..69b7abc54 100644
--- a/src/common/page_table.cpp
+++ b/src/common/page_table.cpp
@@ -16,6 +16,7 @@ void PageTable::Resize(std::size_t address_space_width_in_bits) {
pointers.resize(num_page_table_entries);
attributes.resize(num_page_table_entries);
+ backing_addr.resize(num_page_table_entries);
// The default is a 39-bit address space, which causes an initial 1GB allocation size. If the
// vector size is subsequently decreased (via resize), the vector might not automatically
@@ -24,6 +25,7 @@ void PageTable::Resize(std::size_t address_space_width_in_bits) {
pointers.shrink_to_fit();
attributes.shrink_to_fit();
+ backing_addr.shrink_to_fit();
}
} // namespace Common
diff --git a/src/common/page_table.h b/src/common/page_table.h
index 8339f2890..8b8ff0bb8 100644
--- a/src/common/page_table.h
+++ b/src/common/page_table.h
@@ -21,6 +21,8 @@ enum class PageType : u8 {
RasterizerCachedMemory,
/// Page is mapped to a I/O region. Writing and reading to this page is handled by functions.
Special,
+ /// Page is allocated for use.
+ Allocated,
};
struct SpecialRegion {
@@ -66,7 +68,7 @@ struct PageTable {
* Contains MMIO handlers that back memory regions whose entries in the `attribute` vector is
* of type `Special`.
*/
- boost::icl::interval_map<VAddr, std::set<SpecialRegion>> special_regions;
+ boost::icl::interval_map<u64, std::set<SpecialRegion>> special_regions;
/**
* Vector of fine grained page attributes. If it is set to any value other than `Memory`, then
@@ -74,6 +76,8 @@ struct PageTable {
*/
std::vector<PageType> attributes;
+ std::vector<u64> backing_addr;
+
const std::size_t page_size_in_bits{};
};