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();