[dawn][native] Standardize calling order for graceful device teardown. - Updates all the code-paths to call the graceful device teardown helpers in the same order. - See https://g-issues.chromium.org/issues/435875050#comment13 for breakdown of the logic for ordering it in this manner. Bug: 435875050 Change-Id: Ife7dfcb2c333f9b9bbc2895b683974e96119e73f Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/258175 Auto-Submit: Loko Kung <lokokung@google.com> Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp index dd0fe08..dc78fee 100644 --- a/src/dawn/native/Device.cpp +++ b/src/dawn/native/Device.cpp
@@ -638,6 +638,10 @@ // complete before proceeding with destruction. // Ignore errors so that we can continue with destruction IgnoreErrors(mQueue->WaitForIdleForDestruction()); + + // Call TickImpl once last time to clean up resources + // Ignore errors so that we can continue with destruction + IgnoreErrors(TickImpl()); break; case State::BeingDisconnected: @@ -661,10 +665,6 @@ mQueue->AssumeCommandsComplete(); DAWN_ASSERT(mQueue->GetCompletedCommandSerial() == mQueue->GetLastSubmittedCommandSerial()); mQueue->Tick(mQueue->GetCompletedCommandSerial()); - - // Call TickImpl once last time to clean up resources - // Ignore errors so that we can continue with destruction - IgnoreErrors(TickImpl()); } // At this point GPU operations are always finished, so we are in the disconnected state. @@ -682,7 +682,6 @@ // Note: mQueue is not released here since the application may still get it after calling // Destroy() via APIGetQueue. if (mQueue != nullptr) { - mQueue->AssumeCommandsComplete(); mQueue->Destroy(); } @@ -728,6 +727,7 @@ // Disconnected so we can detect this case in WaitForIdleForDestruction. if (ErrorInjectorEnabled()) { IgnoreErrors(mQueue->WaitForIdleForDestruction()); + IgnoreErrors(TickImpl()); } // A real device lost happened. Set the state to disconnected as the device cannot be