early-access version 1859

This commit is contained in:
pineappleEA
2021-07-08 04:13:21 +02:00
parent 67d98725f8
commit 8a46c57b52
17 changed files with 272 additions and 99 deletions
@@ -34,6 +34,10 @@ bool InnerFence::IsSignaled() const {
if (is_stubbed) {
return true;
}
if (scheduler.IsFree(wait_tick)) {
return true;
}
scheduler.Refresh();
return scheduler.IsFree(wait_tick);
}
@@ -600,11 +600,18 @@ void RasterizerVulkan::SignalSyncPoint(u32 value) {
fence_manager.SignalSyncPoint(value);
}
void RasterizerVulkan::SignalReference() {
if (!gpu.IsAsync()) {
return;
}
fence_manager.SignalOrdering();
}
void RasterizerVulkan::ReleaseFences() {
if (!gpu.IsAsync()) {
return;
}
fence_manager.WaitPendingFences();
fence_manager.TryReleasePendingFences();
}
void RasterizerVulkan::FlushAndInvalidateRegion(VAddr addr, u64 size) {
@@ -632,6 +639,7 @@ void RasterizerVulkan::WaitForIdle() {
cmdbuf.SetEvent(event, flags);
cmdbuf.WaitEvents(event, flags, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, {}, {}, {});
});
SignalReference();
}
void RasterizerVulkan::FragmentBarrier() {
@@ -77,6 +77,7 @@ public:
void ModifyGPUMemory(GPUVAddr addr, u64 size) override;
void SignalSemaphore(GPUVAddr addr, u32 value) override;
void SignalSyncPoint(u32 value) override;
void SignalReference() override;
void ReleaseFences() override;
void FlushAndInvalidateRegion(VAddr addr, u64 size) override;
void WaitForIdle() override;
@@ -83,6 +83,10 @@ public:
return master_semaphore->IsFree(tick);
}
void Refresh() const noexcept {
return master_semaphore->Refresh();
}
/// Waits for the given tick to trigger on the GPU.
void Wait(u64 tick) {
master_semaphore->Wait(tick);