Edit

kc3-lang/angle/src/tests/compiler_tests/EXT_frag_depth_test.cpp

Branch :

  • src/tests/compiler_tests/EXT_frag_depth_test.cpp
  • //
    // Copyright 2018 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // EXT_frag_depth_test.cpp:
    //   Test for EXT_frag_depth
    //
    
    #include "tests/test_utils/ShaderExtensionTest.h"
    
    using EXTFragDepthTest = sh::ShaderExtensionTest;
    
    namespace
    {
    const char EXTPragma[] = "#extension GL_EXT_frag_depth : require\n";
    
    // Shader setting gl_FragDepthEXT
    const char ESSL100_FragDepthShader[] =
    
        R"(
        precision mediump float;
    
        void main()
        {
            gl_FragDepthEXT = 1.0;
        })";
    
    // Extension flag is required to compile properly. Expect failure when it is
    // not present.
    TEST_P(EXTFragDepthTest, CompileFailsWithoutExtension)
    {
        mResources.EXT_frag_depth = 0;
        InitializeCompiler();
        EXPECT_FALSE(TestShaderCompile(EXTPragma));
    }
    
    // Extension directive is required to compile properly. Expect failure when
    // it is not present.
    TEST_P(EXTFragDepthTest, CompileFailsWithExtensionWithoutPragma)
    {
        mResources.EXT_frag_depth = 1;
        InitializeCompiler();
        EXPECT_FALSE(TestShaderCompile(""));
    }
    
    // With extension flag and extension directive, compiling succeeds.
    // Also test that the extension directive state is reset correctly.
    TEST_P(EXTFragDepthTest, CompileSucceedsWithExtensionAndPragma)
    {
        mResources.EXT_frag_depth = 1;
        InitializeCompiler();
        EXPECT_TRUE(TestShaderCompile(EXTPragma));
        // Test reset functionality.
        EXPECT_FALSE(TestShaderCompile(""));
        EXPECT_TRUE(TestShaderCompile(EXTPragma));
    }
    
    // The SL #version 100 shaders that are correct work similarly
    // in both GL2 and GL3, with and without the version string.
    INSTANTIATE_TEST_SUITE_P(CorrectESSL100Shaders,
                             EXTFragDepthTest,
                             Combine(Values(SH_GLES2_SPEC),
                                     Values(sh::ESSLVersion100),
                                     Values(ESSL100_FragDepthShader)));
    
    }  // anonymous namespace