diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp')
-rwxr-xr-x | gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp b/gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp new file mode 100755 index 000000000..1d3e358ca --- /dev/null +++ b/gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp @@ -0,0 +1,119 @@ +// +// Copyright (c) 2015 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. +// +// FragDepth_test.cpp: +// Test for GLES SL 3.0 gl_FragDepth variable implementation. +// + +#include "angle_gl.h" +#include "gtest/gtest.h" +#include "GLSLANG/ShaderLang.h" + +namespace +{ +const char ESSLVersion100[] = "#version 100\n"; +const char ESSLVersion300[] = "#version 300 es\n"; +const char EXTFDPragma[] = "#extension GL_EXT_frag_depth : require\n"; +} // namespace + +class FragDepthTest : public testing::TestWithParam<bool> +{ + protected: + void SetUp() override + { + sh::InitBuiltInResources(&mResources); + mCompiler = nullptr; + mResources.EXT_frag_depth = GetParam(); + } + + void TearDown() override { DestroyCompiler(); } + void DestroyCompiler() + { + if (mCompiler) + { + sh::Destruct(mCompiler); + mCompiler = nullptr; + } + } + + void InitializeCompiler() + { + DestroyCompiler(); + mCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_GLES3_SPEC, + SH_GLSL_COMPATIBILITY_OUTPUT, &mResources); + ASSERT_TRUE(mCompiler != nullptr) << "Compiler could not be constructed."; + } + + testing::AssertionResult TestShaderCompile(const char *version, + const char *pragma, + const char *shader) + { + const char *shaderStrings[] = {version, pragma, shader}; + bool success = sh::Compile(mCompiler, shaderStrings, 3, 0); + if (success) + { + return ::testing::AssertionSuccess() << "Compilation success"; + } + return ::testing::AssertionFailure() << sh::GetInfoLog(mCompiler); + } + + protected: + ShBuiltInResources mResources; + ShHandle mCompiler; +}; + +// The GLES SL 3.0 built-in variable gl_FragDepth fails to compile with GLES SL 1.0. +TEST_P(FragDepthTest, CompileFailsESSL100) +{ + static const char shaderString[] = + "precision mediump float;\n" + "void main() { \n" + " gl_FragDepth = 1.0;\n" + "}\n"; + + InitializeCompiler(); + EXPECT_FALSE(TestShaderCompile(ESSLVersion100, "", shaderString)); + EXPECT_FALSE(TestShaderCompile("", "", shaderString)); + EXPECT_FALSE(TestShaderCompile("", EXTFDPragma, shaderString)); +} + +// The GLES SL 3.0 built-in variable gl_FragDepth compiles with GLES SL 3.0. +TEST_P(FragDepthTest, CompileSucceedsESSL300) +{ + static const char shaderString[] = + "precision mediump float;\n" + "void main() { \n" + " gl_FragDepth = 1.0;\n" + "}\n"; + InitializeCompiler(); + EXPECT_TRUE(TestShaderCompile(ESSLVersion300, "", shaderString)); +} + +// Using #extension GL_EXT_frag_depth in GLSL ES 3.0 shader fails to compile. +TEST_P(FragDepthTest, ExtensionFDFailsESSL300) +{ + static const char shaderString[] = + "precision mediump float;\n" + "out vec4 fragColor;\n" + "void main() { \n" + " fragColor = vec4(1.0);\n" + "}\n"; + InitializeCompiler(); + if (mResources.EXT_frag_depth == 1) + { + // TODO(kkinnunen, geofflang): this should fail. Extensions need to have similar level + // system to SymbolTable. The biggest task is to implement version-aware preprocessor, so + // that the extension defines can be defined depending on the version that the preprocessor + // saw or did not see. + EXPECT_TRUE(TestShaderCompile(ESSLVersion300, EXTFDPragma, shaderString)); + } + else + { + EXPECT_FALSE(TestShaderCompile(ESSLVersion300, EXTFDPragma, shaderString)); + } +} + +// The tests should pass regardless whether the EXT_frag_depth is on or not. +INSTANTIATE_TEST_CASE_P(FragDepthTests, FragDepthTest, testing::Values(false, true)); |