|
|
|
@ -60,23 +60,6 @@ public:
|
|
|
|
|
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) {
|
|
|
|
|
TryReleasePendingFences();
|
|
|
|
|
const bool should_flush = ShouldFlush();
|
|
|
|
@ -111,10 +94,8 @@ public:
|
|
|
|
|
}
|
|
|
|
|
PopAsyncFlushes();
|
|
|
|
|
if (current_fence->IsSemaphore()) {
|
|
|
|
|
if (current_fence->GetAddress() != 0) {
|
|
|
|
|
gpu_memory.template Write<u32>(current_fence->GetAddress(),
|
|
|
|
|
current_fence->GetPayload());
|
|
|
|
|
}
|
|
|
|
|
gpu_memory.template Write<u32>(current_fence->GetAddress(),
|
|
|
|
|
current_fence->GetPayload());
|
|
|
|
|
} else {
|
|
|
|
|
gpu.IncrementSyncPoint(current_fence->GetPayload());
|
|
|
|
|
}
|
|
|
|
|