forked from etc/pineapple-src
early-access version 2107
This commit is contained in:
parent
9bc00f21fa
commit
3005983c51
3 changed files with 15 additions and 6 deletions
|
@ -1,7 +1,7 @@
|
||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 2106.
|
This is the source code for early-access 2107.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ private:
|
||||||
};
|
};
|
||||||
static_assert(sizeof(CacheEntry) == 8, "CacheEntry should be 8 bytes!");
|
static_assert(sizeof(CacheEntry) == 8, "CacheEntry should be 8 bytes!");
|
||||||
|
|
||||||
std::array<CacheEntry, 0x1000000> cached_pages;
|
std::array<CacheEntry, 0x2000000> cached_pages;
|
||||||
Core::Memory::Memory& cpu_memory;
|
Core::Memory::Memory& cpu_memory;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -21,12 +21,12 @@ public:
|
||||||
|
|
||||||
/// Returns the current logical tick.
|
/// Returns the current logical tick.
|
||||||
[[nodiscard]] u64 CurrentTick() const noexcept {
|
[[nodiscard]] u64 CurrentTick() const noexcept {
|
||||||
return current_tick.load(std::memory_order_relaxed);
|
return current_tick.load(std::memory_order_acquire);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the last known GPU tick.
|
/// Returns the last known GPU tick.
|
||||||
[[nodiscard]] u64 KnownGpuTick() const noexcept {
|
[[nodiscard]] u64 KnownGpuTick() const noexcept {
|
||||||
return gpu_tick.load(std::memory_order_relaxed);
|
return gpu_tick.load(std::memory_order_acquire);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the timeline semaphore handle.
|
/// Returns the timeline semaphore handle.
|
||||||
|
@ -41,12 +41,21 @@ public:
|
||||||
|
|
||||||
/// Advance to the logical tick and return the old one
|
/// Advance to the logical tick and return the old one
|
||||||
[[nodiscard]] u64 NextTick() noexcept {
|
[[nodiscard]] u64 NextTick() noexcept {
|
||||||
return current_tick.fetch_add(1, std::memory_order::relaxed);
|
return current_tick.fetch_add(1, std::memory_order_release);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Refresh the known GPU tick
|
/// Refresh the known GPU tick
|
||||||
void Refresh() {
|
void Refresh() {
|
||||||
gpu_tick.store(semaphore.GetCounter(), std::memory_order_relaxed);
|
u64 this_tick{};
|
||||||
|
u64 counter{};
|
||||||
|
do {
|
||||||
|
this_tick = gpu_tick.load(std::memory_order_acquire);
|
||||||
|
counter = semaphore.GetCounter();
|
||||||
|
if (counter < this_tick) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while (!gpu_tick.compare_exchange_weak(this_tick, counter, std::memory_order_release,
|
||||||
|
std::memory_order_relaxed));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Waits for a tick to be hit on the GPU
|
/// Waits for a tick to be hit on the GPU
|
||||||
|
|
Loading…
Reference in a new issue