rasterizer_cache: Expose FlushObject to Child classes and allow redefining of Register and Unregister
This commit is contained in:
parent
f15e2dd881
commit
45b6d2d349
|
@ -104,7 +104,7 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Register an object into the cache
|
/// Register an object into the cache
|
||||||
void Register(const T& object) {
|
virtual void Register(const T& object) {
|
||||||
object->SetIsRegistered(true);
|
object->SetIsRegistered(true);
|
||||||
interval_cache.add({GetInterval(object), ObjectSet{object}});
|
interval_cache.add({GetInterval(object), ObjectSet{object}});
|
||||||
map_cache.insert({object->GetAddr(), object});
|
map_cache.insert({object->GetAddr(), object});
|
||||||
|
@ -112,7 +112,7 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Unregisters an object from the cache
|
/// Unregisters an object from the cache
|
||||||
void Unregister(const T& object) {
|
virtual void Unregister(const T& object) {
|
||||||
object->SetIsRegistered(false);
|
object->SetIsRegistered(false);
|
||||||
rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), -1);
|
rasterizer.UpdatePagesCachedCount(object->GetAddr(), object->GetSizeInBytes(), -1);
|
||||||
// Only flush if use_accurate_gpu_emulation is enabled, as it incurs a performance hit
|
// Only flush if use_accurate_gpu_emulation is enabled, as it incurs a performance hit
|
||||||
|
@ -129,6 +129,15 @@ protected:
|
||||||
return ++modified_ticks;
|
return ++modified_ticks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Flushes the specified object, updating appropriate cache state as needed
|
||||||
|
void FlushObject(const T& object) {
|
||||||
|
if (!object->IsDirty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
object->Flush();
|
||||||
|
object->MarkAsModified(false, *this);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Returns a list of cached objects from the specified memory region, ordered by access time
|
/// Returns a list of cached objects from the specified memory region, ordered by access time
|
||||||
std::vector<T> GetSortedObjectsFromRegion(VAddr addr, u64 size) {
|
std::vector<T> GetSortedObjectsFromRegion(VAddr addr, u64 size) {
|
||||||
|
@ -154,15 +163,6 @@ private:
|
||||||
return objects;
|
return objects;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Flushes the specified object, updating appropriate cache state as needed
|
|
||||||
void FlushObject(const T& object) {
|
|
||||||
if (!object->IsDirty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
object->Flush();
|
|
||||||
object->MarkAsModified(false, *this);
|
|
||||||
}
|
|
||||||
|
|
||||||
using ObjectSet = std::set<T>;
|
using ObjectSet = std::set<T>;
|
||||||
using ObjectCache = std::unordered_map<VAddr, T>;
|
using ObjectCache = std::unordered_map<VAddr, T>;
|
||||||
using IntervalCache = boost::icl::interval_map<VAddr, ObjectSet>;
|
using IntervalCache = boost::icl::interval_map<VAddr, ObjectSet>;
|
||||||
|
|
Loading…
Reference in New Issue