// Copyright 2021 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 <string> #include <vector> #include "dawn/tests/DawnTest.h" #include "dawn/utils/ComboRenderPipelineDescriptor.h" #include "dawn/utils/WGPUHelpers.h" namespace dawn { namespace { wgpu::Texture Create2DTexture(wgpu::Device device, uint32_t width, uint32_t height, wgpu::TextureFormat format, wgpu::TextureUsage usage) { … } struct YUVTestData { … }; static const YUVTestData kBlack = …; static const YUVTestData kRed = …; static const YUVTestData kGreen = …; static const YUVTestData kBlue = …; static const YUVTestData kColor1 = …; template <typename Parent> class ExternalTextureTestsBase : public Parent { … }; class ExternalTextureTests : public ExternalTextureTestsBase<DawnTest> { … }; TEST_P(ExternalTextureTests, CreateExternalTextureSuccess) { … } TEST_P(ExternalTextureTests, SampleExternalTexture) { … } // https://crbug.com/1515439 TEST_P(ExternalTextureTests, SampleExternalTextureDifferingGroup) { … } TEST_P(ExternalTextureTests, SampleMultiplanarExternalTexture) { … } TEST_P(ExternalTextureTests, SampleMultiplanarExternalTextureNorm16) { … } // Test draws a green square in the upper left quadrant, a black square in the upper right, a red // square in the lower left and a blue square in the lower right. The image is then sampled as an // external texture and rotated 0, 90, 180, and 270 degrees with and without the y-axis flipped. TEST_P(ExternalTextureTests, RotateAndOrFlipSampleSinglePlane) { … } // Test for a bug found during review where the visibleSize was not correctly rotated during the // initialization of the ExternalTexture, which could lead to incorrect textureLoad operations when // rotating 90 and 270 degrees. TEST_P(ExternalTextureTests, RotateAndOrFlipTextureLoadSinglePlaneNotSquare) { … } // Test draws a green square in the upper left quadrant, a black square in the upper right, a red // square in the lower left and a blue square in the lower right. The image is then sampled as an // external texture and rotated 0, 90, 180, and 270 degrees with and without the y-axis flipped. TEST_P(ExternalTextureTests, RotateAndOrFlipSampleMultiplanar) { … } // This test draws a 2x2 multi-colored square surrounded by a 1px black border. We test the external // texture crop functionality by cropping to specific ranges inside the texture. TEST_P(ExternalTextureTests, CropSinglePlane) { … } // This test draws a 2x2 multi-colored square surrounded by a 1px black border. We test the external // texture crop functionality by cropping to specific ranges inside the texture. TEST_P(ExternalTextureTests, CropMultiplanar) { … } // Test that sampling an external texture with non-one alpha preserves the alpha channel. TEST_P(ExternalTextureTests, SampleExternalTextureAlpha) { … } // Test for crbug.com/dawn/2472 TEST_P(ExternalTextureTests, RemappingBugDawn2472) { … } // Regression test for issue 346174896. TEST_P(ExternalTextureTests, Regression346174896) { … } TEST_P(ExternalTextureTests, MultipleBindings) { … } DAWN_INSTANTIATE_TEST(ExternalTextureTests, D3D11Backend(), D3D12Backend(), D3D12Backend({ … }; enum class AccessMode { … }; enum class OOBAccess { … }; enum class Flip { … }; Rotation; std::ostream& operator<<(std::ostream& o, Flip flip) { … } std::ostream& operator<<(std::ostream& o, AccessMode mode) { … } std::ostream& operator<<(std::ostream& o, OOBAccess rect) { … } DAWN_TEST_PARAM_STRUCT(OOBTestParams, Rotation, Flip, AccessMode, OOBAccess); class ExternalTextureOOBTests : public ExternalTextureTestsBase<DawnTestWithParams<OOBTestParams>> { … }; // Test for OOB access TEST_P(ExternalTextureOOBTests, ExternalTextureOOB) { … } DAWN_INSTANTIATE_TEST_P(…); } // anonymous namespace } // namespace dawn