SurfaceTests: use each SurfaceTexture only once.

The C++ headers lose track of references and leak wgpu::Textures
otherwise. Fixing that is tracked in a new issue.

Bug: 364913820
Bug: 42241264
Change-Id: I1a90ad3da430ec8030b8d1b074361c78da187556
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/205454
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn/tests/end2end/SurfaceTests.cpp b/src/dawn/tests/end2end/SurfaceTests.cpp
index afd1e69..bce7141 100644
--- a/src/dawn/tests/end2end/SurfaceTests.cpp
+++ b/src/dawn/tests/end2end/SurfaceTests.cpp
@@ -235,35 +235,45 @@
 TEST_P(SurfaceTests, ReconfigureAfterGetCurrentTexture) {
     wgpu::Surface surface = CreateTestSurface();
     wgpu::SurfaceConfiguration config = GetPreferredConfiguration(surface);
-    wgpu::SurfaceTexture surfaceTexture;
 
-    surface.Configure(&config);
-    surface.GetCurrentTexture(&surfaceTexture);
-    ClearTexture(surfaceTexture.texture, {1.0, 0.0, 0.0, 1.0});
+    {
+        surface.Configure(&config);
+        wgpu::SurfaceTexture surfaceTexture;
+        surface.GetCurrentTexture(&surfaceTexture);
+        ClearTexture(surfaceTexture.texture, {1.0, 0.0, 0.0, 1.0});
+    }
 
-    surface.Configure(&config);
-    surface.GetCurrentTexture(&surfaceTexture);
-    ClearTexture(surfaceTexture.texture, {0.0, 1.0, 0.0, 1.0});
-    surface.Present();
+    {
+        surface.Configure(&config);
+        wgpu::SurfaceTexture surfaceTexture;
+        surface.GetCurrentTexture(&surfaceTexture);
+        ClearTexture(surfaceTexture.texture, {0.0, 1.0, 0.0, 1.0});
+        surface.Present();
+    }
 }
 
 // Test unconfiguring then reconfiguring the surface
 TEST_P(SurfaceTests, ReconfigureAfterUnconfigure) {
     wgpu::Surface surface = CreateTestSurface();
     wgpu::SurfaceConfiguration config = GetPreferredConfiguration(surface);
-    wgpu::SurfaceTexture surfaceTexture;
 
-    surface.Configure(&config);
-    surface.GetCurrentTexture(&surfaceTexture);
-    ClearTexture(surfaceTexture.texture, {1.0, 0.0, 0.0, 1.0});
-    surface.Present();
+    {
+        surface.Configure(&config);
+        wgpu::SurfaceTexture surfaceTexture;
+        surface.GetCurrentTexture(&surfaceTexture);
+        ClearTexture(surfaceTexture.texture, {1.0, 0.0, 0.0, 1.0});
+        surface.Present();
+    }
 
     surface.Unconfigure();
 
-    surface.Configure(&config);
-    surface.GetCurrentTexture(&surfaceTexture);
-    ClearTexture(surfaceTexture.texture, {0.0, 1.0, 0.0, 1.0});
-    surface.Present();
+    {
+        surface.Configure(&config);
+        wgpu::SurfaceTexture surfaceTexture;
+        surface.GetCurrentTexture(&surfaceTexture);
+        ClearTexture(surfaceTexture.texture, {0.0, 1.0, 0.0, 1.0});
+        surface.Present();
+    }
 }
 
 // Test unconfiguring after GetCurrentTexture but before the Present
@@ -299,7 +309,6 @@
 
     wgpu::Surface surface1 = CreateTestSurface();
     wgpu::Surface surface2 = CreateTestSurface();
-    wgpu::SurfaceTexture surfaceTexture;
 
     wgpu::SurfaceCapabilities capabilities;
     surface1.GetCapabilities(adapter, &capabilities);
@@ -315,19 +324,26 @@
 
             wgpu::SurfaceConfiguration config = GetPreferredConfiguration(surface1);
 
-            config.presentMode = mode1;
-            surface1.Configure(&config);
-            surface1.GetCurrentTexture(&surfaceTexture);
-            ClearTexture(surfaceTexture.texture, {0.0, 0.0, 0.0, 1.0});
-            surface1.Present();
-            surface1.Unconfigure();
+            {
+                config.presentMode = mode1;
+                surface1.Configure(&config);
 
-            config.presentMode = mode2;
-            surface2.Configure(&config);
-            surface2.GetCurrentTexture(&surfaceTexture);
-            ClearTexture(surfaceTexture.texture, {0.0, 0.0, 0.0, 1.0});
-            surface2.Present();
-            surface2.Unconfigure();
+                wgpu::SurfaceTexture surfaceTexture;
+                surface1.GetCurrentTexture(&surfaceTexture);
+                ClearTexture(surfaceTexture.texture, {0.0, 0.0, 0.0, 1.0});
+                surface1.Present();
+            }
+
+            {
+                config.presentMode = mode2;
+                surface2.Configure(&config);
+
+                wgpu::SurfaceTexture surfaceTexture;
+                surface2.GetCurrentTexture(&surfaceTexture);
+                ClearTexture(surfaceTexture.texture, {0.0, 0.0, 0.0, 1.0});
+                surface2.Present();
+                surface2.Unconfigure();
+            }
         }
     }
 }
@@ -335,7 +351,6 @@
 // Test resizing the surface and without resizing the window.
 TEST_P(SurfaceTests, ResizingSurfaceOnly) {
     wgpu::Surface surface = CreateTestSurface();
-    wgpu::SurfaceTexture surfaceTexture;
 
     for (int i = 0; i < 10; i++) {
         wgpu::SurfaceConfiguration config = GetPreferredConfiguration(surface);
@@ -343,6 +358,7 @@
         config.height -= i * 10;
 
         surface.Configure(&config);
+        wgpu::SurfaceTexture surfaceTexture;
         surface.GetCurrentTexture(&surfaceTexture);
         ClearTexture(surfaceTexture.texture, {0.05f * i, 0.0, 0.0, 1.0});
         surface.Present();
@@ -353,7 +369,6 @@
 TEST_P(SurfaceTests, ResizingWindowOnly) {
     wgpu::Surface surface = CreateTestSurface();
     wgpu::SurfaceConfiguration config = GetPreferredConfiguration(surface);
-    wgpu::SurfaceTexture surfaceTexture;
 
     surface.Configure(&config);
 
@@ -361,6 +376,7 @@
         glfwSetWindowSize(window.get(), 400 - 10 * i, 400 + 10 * i);
         glfwPollEvents();
 
+        wgpu::SurfaceTexture surfaceTexture;
         surface.GetCurrentTexture(&surfaceTexture);
         ClearTexture(surfaceTexture.texture, {0.05f * i, 0.0, 0.0, 1.0});
         surface.Present();
@@ -373,7 +389,6 @@
     DAWN_SUPPRESS_TEST_IF(IsLinux() && IsVulkan() && IsNvidia());
 
     wgpu::Surface surface = CreateTestSurface();
-    wgpu::SurfaceTexture surfaceTexture;
 
     for (int i = 0; i < 10; i++) {
         glfwSetWindowSize(window.get(), 400 - 10 * i, 400 + 10 * i);
@@ -388,6 +403,7 @@
         config.height = height;
         surface.Configure(&config);
 
+        wgpu::SurfaceTexture surfaceTexture;
         surface.GetCurrentTexture(&surfaceTexture);
         ClearTexture(surfaceTexture.texture, {0.05f * i, 0.0, 0.0, 1.0});
         surface.Present();
@@ -405,7 +421,6 @@
     wgpu::Device device2 = CreateDevice();
 
     wgpu::Surface surface = CreateTestSurface();
-    wgpu::SurfaceTexture surfaceTexture;
 
     wgpu::SurfaceConfiguration config = GetPreferredConfiguration(surface);
 
@@ -419,6 +434,7 @@
 
         config.device = deviceToUse;
         surface.Configure(&config);
+        wgpu::SurfaceTexture surfaceTexture;
         surface.GetCurrentTexture(&surfaceTexture);
         ClearTexture(surfaceTexture.texture, {0.0, 1.0, 0.0, 1.0}, deviceToUse);
         surface.Present();