D3D11 additional context-loss logging

This makes logging more consistent when we encounter context loss.

In Renderer11::testDeviceLost, note DXGI_ERROR_INVALID_CALL is a
valid GetDeviceRemovedReason, but was not detected prior.

SwapChain11::resize and SwapChain11::reset added more logging,
likewise with Context11::handleResult.

This covers everywhere d3d11::isDeviceLostError is invoked, though that
might not be exhaustive of all cases we detect device loss.

Bug: b/188291915
Test: Manually trigger conditions to test logging.
Change-Id: Idd57363101b53bc2d3c4c306ee78a42012a1a320
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2935696
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Doug Horn <doughorn@google.com>
Commit-Queue: Michael Yu <warty@google.com>
diff --git a/src/libANGLE/renderer/d3d/d3d11/Context11.cpp b/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
index 117e5c7..84d3762 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
@@ -991,15 +991,19 @@
 {
     ASSERT(FAILED(hr));
 
-    if (d3d11::isDeviceLostError(hr))
-    {
-        mRenderer->notifyDeviceLost();
-    }
-
     GLenum glErrorCode = DefaultGLErrorCode(hr);
 
     std::stringstream errorStream;
-    errorStream << "Internal D3D11 error: " << gl::FmtHR(hr) << ": " << message;
+    errorStream << "Internal D3D11 error: " << gl::FmtHR(hr);
+
+    if (d3d11::isDeviceLostError(hr))
+    {
+        HRESULT removalReason = mRenderer->getDevice()->GetDeviceRemovedReason();
+        errorStream << " (removal reason: " << gl::FmtHR(removalReason) << ")";
+        mRenderer->notifyDeviceLost();
+    }
+
+    errorStream << ": " << message;
 
     mErrors->handleError(glErrorCode, errorStream.str().c_str(), file, function, line);
 }
diff --git a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
index 3178840..68ef522 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
@@ -2127,8 +2127,6 @@
 // set notify to true to broadcast a message to all contexts of the device loss
 bool Renderer11::testDeviceLost()
 {
-    bool isLost = false;
-
     if (!mDevice)
     {
         return true;
@@ -2136,7 +2134,7 @@
 
     // GetRemovedReason is used to test if the device is removed
     HRESULT result = mDevice->GetDeviceRemovedReason();
-    isLost         = d3d11::isDeviceLostError(result);
+    bool isLost    = FAILED(result);
 
     if (isLost)
     {
diff --git a/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp b/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
index dff0848..23fe302 100644
--- a/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/SwapChain11.cpp
@@ -512,6 +512,9 @@
 
         if (d3d11::isDeviceLostError(hr))
         {
+            HRESULT reason = device->GetDeviceRemovedReason();
+            ERR() << "Device lost in SwapChain11::resize " << gl::FmtHR(hr)
+                  << ", reason: " << gl::FmtHR(reason);
             return EGL_CONTEXT_LOST;
         }
         else
@@ -630,6 +633,9 @@
 
             if (d3d11::isDeviceLostError(hr))
             {
+                HRESULT reason = device->GetDeviceRemovedReason();
+                ERR() << "Device lost in SwapChain11::reset " << gl::FmtHR(hr)
+                      << ", reason: " << gl::FmtHR(reason);
                 return EGL_CONTEXT_LOST;
             }
             else