diff --git a/src/xenia/gpu/d3d12/d3d12_command_processor.cc b/src/xenia/gpu/d3d12/d3d12_command_processor.cc index 1bff38c60..8d4a5a451 100644 --- a/src/xenia/gpu/d3d12/d3d12_command_processor.cc +++ b/src/xenia/gpu/d3d12/d3d12_command_processor.cc @@ -3134,7 +3134,8 @@ void D3D12CommandProcessor::CheckSubmissionFence(uint64_t await_submission) { queue_operations_since_submission_fence_, fence_value)) && SUCCEEDED( queue_operations_since_submission_fence_->SetEventOnCompletion( - fence_value, nullptr))) { + fence_value, fence_completion_event_))) { + WaitForSingleObject(fence_completion_event_, INFINITE); queue_operations_done_since_submission_signal_ = false; } else { XELOGE( @@ -3150,8 +3151,9 @@ void D3D12CommandProcessor::CheckSubmissionFence(uint64_t await_submission) { uint64_t submission_completed_before = submission_completed_; submission_completed_ = submission_fence_->GetCompletedValue(); if (submission_completed_ < await_submission) { - if (SUCCEEDED(submission_fence_->SetEventOnCompletion(await_submission, - nullptr))) { + if (SUCCEEDED(submission_fence_->SetEventOnCompletion( + await_submission, fence_completion_event_))) { + WaitForSingleObject(fence_completion_event_, INFINITE); submission_completed_ = submission_fence_->GetCompletedValue(); } } diff --git a/src/xenia/ui/d3d12/d3d12_submission_tracker.cc b/src/xenia/ui/d3d12/d3d12_submission_tracker.cc index 235063c2c..deaac6fcf 100644 --- a/src/xenia/ui/d3d12/d3d12_submission_tracker.cc +++ b/src/xenia/ui/d3d12/d3d12_submission_tracker.cc @@ -75,7 +75,12 @@ bool D3D12SubmissionTracker::AwaitSubmissionCompletion( fence_value = submission_signal_queued_; } if (fence_->GetCompletedValue() < fence_value) { - if (FAILED(fence_->SetEventOnCompletion(fence_value, nullptr))) { + if (FAILED(fence_->SetEventOnCompletion(fence_value, + fence_completion_event_))) { + return false; + } + if (WaitForSingleObject(fence_completion_event_, INFINITE) != + WAIT_OBJECT_0) { return false; } }