summaryrefslogtreecommitdiffstats
path: root/src/video_core/buffer_cache/memory_tracker_base.h
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2023-04-30 17:14:06 +0200
committerFernando Sahmkow <fsahmkow27@gmail.com>2023-05-07 23:46:12 +0200
commitc6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4 (patch)
tree0d71092cfad84e47a193917028200e2fc216f5e6 /src/video_core/buffer_cache/memory_tracker_base.h
parentMerge pull request #10097 from german77/nfp_full (diff)
downloadyuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar
yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.gz
yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.bz2
yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.lz
yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.xz
yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.zst
yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.zip
Diffstat (limited to '')
-rw-r--r--src/video_core/buffer_cache/memory_tracker_base.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/video_core/buffer_cache/memory_tracker_base.h b/src/video_core/buffer_cache/memory_tracker_base.h
index dc4ebfcaa..6036b21c9 100644
--- a/src/video_core/buffer_cache/memory_tracker_base.h
+++ b/src/video_core/buffer_cache/memory_tracker_base.h
@@ -66,6 +66,14 @@ public:
});
}
+ /// Returns true if a region has been marked as Preflushable
+ [[nodiscard]] bool IsRegionPreflushable(VAddr query_cpu_addr, u64 query_size) noexcept {
+ return IteratePages<false>(
+ query_cpu_addr, query_size, [](Manager* manager, u64 offset, size_t size) {
+ return manager->template IsRegionModified<Type::Preflushable>(offset, size);
+ });
+ }
+
/// Mark region as CPU modified, notifying the rasterizer about this change
void MarkRegionAsCpuModified(VAddr dirty_cpu_addr, u64 query_size) {
IteratePages<true>(dirty_cpu_addr, query_size,
@@ -93,6 +101,15 @@ public:
});
}
+ /// Mark region as modified from the host GPU
+ void MarkRegionAsPreflushable(VAddr dirty_cpu_addr, u64 query_size) noexcept {
+ IteratePages<true>(dirty_cpu_addr, query_size,
+ [](Manager* manager, u64 offset, size_t size) {
+ manager->template ChangeRegionState<Type::Preflushable, true>(
+ manager->GetCpuAddr() + offset, size);
+ });
+ }
+
/// Unmark region as modified from the host GPU
void UnmarkRegionAsGpuModified(VAddr dirty_cpu_addr, u64 query_size) noexcept {
IteratePages<true>(dirty_cpu_addr, query_size,
@@ -102,6 +119,15 @@ public:
});
}
+ /// Unmark region as modified from the host GPU
+ void UnmarkRegionAsPreflushable(VAddr dirty_cpu_addr, u64 query_size) noexcept {
+ IteratePages<true>(dirty_cpu_addr, query_size,
+ [](Manager* manager, u64 offset, size_t size) {
+ manager->template ChangeRegionState<Type::Preflushable, false>(
+ manager->GetCpuAddr() + offset, size);
+ });
+ }
+
/// Mark region as modified from the CPU
/// but don't mark it as modified until FlusHCachedWrites is called.
void CachedCpuWrite(VAddr dirty_cpu_addr, u64 query_size) {