summaryrefslogtreecommitdiffstats
path: root/gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /gfx/angle/src/tests/compiler_tests/FragDepth_test.cpp
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-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-xgfx/angle/src/tests/compiler_tests/FragDepth_test.cpp119
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));