Fence Manager: remove reference fencing.

This commit is contained in:
Fernando Sahmkow 2021-07-08 03:05:23 +02:00
parent 2c8f4ed27f
commit 4a09517336
3 changed files with 6 additions and 31 deletions

View file

@ -60,23 +60,6 @@ public:
buffer_cache.AccumulateFlushes(); buffer_cache.AccumulateFlushes();
} }
void SignalReference() {
// Only sync references on High
if (Settings::values.gpu_accuracy.GetValue() != Settings::GPUAccuracy::High) {
return;
}
TryReleasePendingFences();
const bool should_flush = ShouldFlush();
CommitAsyncFlushes();
TFence new_fence = CreateFence(0, 0, !should_flush);
fences.push(new_fence);
QueueFence(new_fence);
if (should_flush) {
rasterizer.FlushCommands();
}
rasterizer.SyncGuestHost();
}
void SignalSemaphore(GPUVAddr addr, u32 value) { void SignalSemaphore(GPUVAddr addr, u32 value) {
TryReleasePendingFences(); TryReleasePendingFences();
const bool should_flush = ShouldFlush(); const bool should_flush = ShouldFlush();
@ -111,10 +94,8 @@ public:
} }
PopAsyncFlushes(); PopAsyncFlushes();
if (current_fence->IsSemaphore()) { if (current_fence->IsSemaphore()) {
if (current_fence->GetAddress() != 0) {
gpu_memory.template Write<u32>(current_fence->GetAddress(), gpu_memory.template Write<u32>(current_fence->GetAddress(),
current_fence->GetPayload()); current_fence->GetPayload());
}
} else { } else {
gpu.IncrementSyncPoint(current_fence->GetPayload()); gpu.IncrementSyncPoint(current_fence->GetPayload());
} }

View file

@ -638,7 +638,7 @@ void RasterizerOpenGL::SignalReference() {
if (!gpu.IsAsync()) { if (!gpu.IsAsync()) {
return; return;
} }
fence_manager.SignalReference(); fence_manager.SignalOrdering();
} }
void RasterizerOpenGL::ReleaseFences() { void RasterizerOpenGL::ReleaseFences() {
@ -657,10 +657,7 @@ void RasterizerOpenGL::FlushAndInvalidateRegion(VAddr addr, u64 size) {
void RasterizerOpenGL::WaitForIdle() { void RasterizerOpenGL::WaitForIdle() {
glMemoryBarrier(GL_ALL_BARRIER_BITS); glMemoryBarrier(GL_ALL_BARRIER_BITS);
if (!gpu.IsAsync()) { SignalReference();
return;
}
fence_manager.SignalOrdering();
} }
void RasterizerOpenGL::FragmentBarrier() { void RasterizerOpenGL::FragmentBarrier() {

View file

@ -584,7 +584,7 @@ void RasterizerVulkan::SignalReference() {
if (!gpu.IsAsync()) { if (!gpu.IsAsync()) {
return; return;
} }
fence_manager.SignalReference(); fence_manager.SignalOrdering();
} }
void RasterizerVulkan::ReleaseFences() { void RasterizerVulkan::ReleaseFences() {
@ -619,10 +619,7 @@ void RasterizerVulkan::WaitForIdle() {
cmdbuf.SetEvent(event, flags); cmdbuf.SetEvent(event, flags);
cmdbuf.WaitEvents(event, flags, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, {}, {}, {}); cmdbuf.WaitEvents(event, flags, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, {}, {}, {});
}); });
if (!gpu.IsAsync()) { SignalReference();
return;
}
fence_manager.SignalOrdering();
} }
void RasterizerVulkan::FragmentBarrier() { void RasterizerVulkan::FragmentBarrier() {