// Copyright 2019 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 "dawn/tests/unittests/validation/ValidationTest.h" #include "dawn/native/BindGroupLayout.h" #include "dawn/utils/ComboRenderPipelineDescriptor.h" #include "dawn/utils/WGPUHelpers.h" namespace dawn { namespace { Not; class GetBindGroupLayoutTests : public ValidationTest { … }; // Test that GetBindGroupLayout returns the same object for the same index // and for matching layouts. TEST_F(GetBindGroupLayoutTests, EquivalentBGLs) { … } // Test that default BindGroupLayouts cannot be used in the creation of a new PipelineLayout TEST_F(GetBindGroupLayoutTests, DefaultBindGroupLayoutPipelineCompatibility) { … } // Bind groups created from different default pipelines' GetBindGroupLayout aren't compatible, even // if they appear to be the same. TEST_F(GetBindGroupLayoutTests, DefaultBindGroupLayoutDifferentPipelines) { … } // Bind groups created from the exact same default pipelines' GetBindGroupLayout aren't compatible. TEST_F(GetBindGroupLayoutTests, DefaultBindGroupLayoutSamePipelines) { … } // Test that getBindGroupLayout defaults are correct // - shader stage visibility is the stage that adds the binding. // - dynamic offsets is false TEST_F(GetBindGroupLayoutTests, DefaultShaderStageAndDynamicOffsets) { … } TEST_F(GetBindGroupLayoutTests, DefaultTextureSampleType) { … } // Test GetBindGroupLayout works with a compute pipeline TEST_F(GetBindGroupLayoutTests, ComputePipeline) { … } // Test that the binding type matches the shader. TEST_F(GetBindGroupLayoutTests, BindingType) { … } // Tests that the external texture binding type matches with a texture_external declared in the // shader. TEST_F(GetBindGroupLayoutTests, ExternalTextureBindingType) { … } // Test that texture view dimension matches the shader. TEST_F(GetBindGroupLayoutTests, TextureViewDimension) { … } // Test that storageTexture view dimension matches the shader. TEST_F(GetBindGroupLayoutTests, StorageTextureViewDimension) { … } // Test that texture component type matches the shader. TEST_F(GetBindGroupLayoutTests, TextureComponentType) { … } // Test that binding= indices match. TEST_F(GetBindGroupLayoutTests, BindingIndices) { … } // Test it is valid to have duplicate bindings in the shaders. TEST_F(GetBindGroupLayoutTests, DuplicateBinding) { … } // Test that minBufferSize is set on the BGL and that the max of the min buffer sizes is used. TEST_F(GetBindGroupLayoutTests, MinBufferSize) { … } // Test that the visibility is correctly aggregated if two stages have the exact same binding. TEST_F(GetBindGroupLayoutTests, StageAggregation) { … } // Test it is invalid to have conflicting binding types in the shaders. TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) { … } // Test it is invalid to have conflicting binding texture multisampling in the shaders. TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureMultisampling) { … } // Test it is invalid to have conflicting binding texture dimension in the shaders. TEST_F(GetBindGroupLayoutTests, ConflictingBindingViewDimension) { … } // Test it is invalid to have conflicting binding texture component type in the shaders. TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureComponentType) { … } // Test it is an error to query an out of range bind group layout. TEST_F(GetBindGroupLayoutTests, OutOfRangeIndex) { … } // Test that unused indices return the empty bind group layout if before the last used index, an // error otherwise. TEST_F(GetBindGroupLayoutTests, UnusedIndex) { … } // Test that after explicitly creating a pipeline with a pipeline layout, calling // GetBindGroupLayout reflects the same bind group layouts. TEST_F(GetBindGroupLayoutTests, Reflection) { … } // Test that fragment output validation is for the correct entryPoint TEST_F(GetBindGroupLayoutTests, FromCorrectEntryPoint) { … } // Test that a pipeline full of explicitly empty BGLs correctly reflects them. TEST_F(GetBindGroupLayoutTests, FullOfEmptyBGLs) { … } } // anonymous namespace } // namespace dawn