// Copyright 2024 The Dawn & Tint Authors // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // // 3. Neither the name of the copyright holder nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <memory> #include <string> #include <vector> #include "dawn/common/Constants.h" #include "dawn/tests/DawnTest.h" #include "dawn/utils/ComboRenderBundleEncoderDescriptor.h" #include "dawn/utils/ComboRenderPipelineDescriptor.h" #include "dawn/utils/WGPUHelpers.h" #include "webgpu/webgpu_glfw.h" #include "GLFW/glfw3.h" namespace dawn { namespace { struct GLFWindowDestroyer { … }; class SurfaceTests : public DawnTest { … }; // Basic test for creating a swapchain and presenting one frame. TEST_P(SurfaceTests, Basic) { … } // Test reconfiguring the surface TEST_P(SurfaceTests, ReconfigureBasic) { … } // Test replacing the swapchain after GetCurrentTexture TEST_P(SurfaceTests, ReconfigureAfterGetCurrentTexture) { … } // Test inconfiguring then reconfiguring the surface TEST_P(SurfaceTests, ReconfigureAfterUnconfigure) { … } // Test unconfiguring after GetCurrentTexture but before the Present TEST_P(SurfaceTests, UnconfigureAfterGet) { … } // Test switching between surfaces that have different present modes. TEST_P(SurfaceTests, SwitchPresentMode) { … } // Test resizing the surface and without resizing the window. TEST_P(SurfaceTests, ResizingSurfaceOnly) { … } // Test resizing the window but not the surface. TEST_P(SurfaceTests, ResizingWindowOnly) { … } // Test resizing both the window and the surface at the same time. TEST_P(SurfaceTests, ResizingWindowAndSurface) { … } // Test switching devices on the same adapter. TEST_P(SurfaceTests, SwitchingDevice) { … } // Getting current texture without configuring returns an invalid surface texture // It cannot raise a device error at this stage since it has never been configured with a device TEST_P(SurfaceTests, GetWithoutConfigure) { … } // Getting current texture after unconfiguring fails TEST_P(SurfaceTests, GetAfterUnconfigure) { … } // Getting current texture after losing the device TEST_P(SurfaceTests, GetAfterDeviceLoss) { … } // Presenting without configuring fails TEST_P(SurfaceTests, PresentWithoutConfigure) { … } // Presenting after unconfiguring fails TEST_P(SurfaceTests, PresentAfterUnconfigure) { … } // Presenting without getting current texture first fails TEST_P(SurfaceTests, PresentWithoutGet) { … } // Check that all surfaces must support RenderAttachment. TEST_P(SurfaceTests, RenderAttachmentAlwaysSupported) { … } // Test sampling from the surface when it is supported. TEST_P(SurfaceTests, Sampling) { … } // Test copying from the surface when it is supported. TEST_P(SurfaceTests, CopyFrom) { … } // Test copying to the surface when it is supported. TEST_P(SurfaceTests, CopyTo) { … } // Test using the surface as a storage texture when supported. TEST_P(SurfaceTests, Storage) { … } // TODO(dawn:2320): Enable D3D tests (though they are not enabled in SwapChainTests neither) DAWN_INSTANTIATE_TEST(…); } // anonymous namespace } // namespace dawn