Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/tests/compiler_tests/FragDepth_test.cpp
1693 views
1
//
2
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
3
// Use of this source code is governed by a BSD-style license that can be
4
// found in the LICENSE file.
5
//
6
// FragDepth_test.cpp:
7
// Test for GLES SL 3.0 gl_FragDepth variable implementation.
8
//
9
10
#include "GLSLANG/ShaderLang.h"
11
#include "angle_gl.h"
12
#include "gtest/gtest.h"
13
14
namespace
15
{
16
const char ESSLVersion100[] = "#version 100\n";
17
const char ESSLVersion300[] = "#version 300 es\n";
18
const char EXTFDPragma[] = "#extension GL_EXT_frag_depth : require\n";
19
} // namespace
20
21
class FragDepthTest : public testing::TestWithParam<bool>
22
{
23
protected:
24
void SetUp() override
25
{
26
sh::InitBuiltInResources(&mResources);
27
mCompiler = nullptr;
28
mResources.EXT_frag_depth = GetParam();
29
}
30
31
void TearDown() override { DestroyCompiler(); }
32
void DestroyCompiler()
33
{
34
if (mCompiler)
35
{
36
sh::Destruct(mCompiler);
37
mCompiler = nullptr;
38
}
39
}
40
41
void InitializeCompiler()
42
{
43
DestroyCompiler();
44
mCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_GLES3_SPEC,
45
SH_GLSL_COMPATIBILITY_OUTPUT, &mResources);
46
ASSERT_TRUE(mCompiler != nullptr) << "Compiler could not be constructed.";
47
}
48
49
testing::AssertionResult TestShaderCompile(const char *version,
50
const char *pragma,
51
const char *shader)
52
{
53
const char *shaderStrings[] = {version, pragma, shader};
54
bool success = sh::Compile(mCompiler, shaderStrings, 3, 0);
55
if (success)
56
{
57
return ::testing::AssertionSuccess() << "Compilation success";
58
}
59
return ::testing::AssertionFailure() << sh::GetInfoLog(mCompiler);
60
}
61
62
protected:
63
ShBuiltInResources mResources;
64
ShHandle mCompiler;
65
};
66
67
// The GLES SL 3.0 built-in variable gl_FragDepth fails to compile with GLES SL 1.0.
68
TEST_P(FragDepthTest, CompileFailsESSL100)
69
{
70
static const char shaderString[] =
71
"precision mediump float;\n"
72
"void main() { \n"
73
" gl_FragDepth = 1.0;\n"
74
"}\n";
75
76
InitializeCompiler();
77
EXPECT_FALSE(TestShaderCompile(ESSLVersion100, "", shaderString));
78
EXPECT_FALSE(TestShaderCompile("", "", shaderString));
79
EXPECT_FALSE(TestShaderCompile("", EXTFDPragma, shaderString));
80
}
81
82
// The GLES SL 3.0 built-in variable gl_FragDepth compiles with GLES SL 3.0.
83
TEST_P(FragDepthTest, CompileSucceedsESSL300)
84
{
85
static const char shaderString[] =
86
"precision mediump float;\n"
87
"void main() { \n"
88
" gl_FragDepth = 1.0;\n"
89
"}\n";
90
InitializeCompiler();
91
EXPECT_TRUE(TestShaderCompile(ESSLVersion300, "", shaderString));
92
}
93
94
// Using #extension GL_EXT_frag_depth in GLSL ES 3.0 shader fails to compile.
95
TEST_P(FragDepthTest, ExtensionFDFailsESSL300)
96
{
97
static const char shaderString[] =
98
"precision mediump float;\n"
99
"out vec4 fragColor;\n"
100
"void main() { \n"
101
" fragColor = vec4(1.0);\n"
102
"}\n";
103
InitializeCompiler();
104
if (mResources.EXT_frag_depth == 1)
105
{
106
// TODO(kkinnunen, geofflang): this should fail. Extensions need to have similar level
107
// system to SymbolTable. The biggest task is to implement version-aware preprocessor, so
108
// that the extension defines can be defined depending on the version that the preprocessor
109
// saw or did not see.
110
EXPECT_TRUE(TestShaderCompile(ESSLVersion300, EXTFDPragma, shaderString));
111
}
112
else
113
{
114
EXPECT_FALSE(TestShaderCompile(ESSLVersion300, EXTFDPragma, shaderString));
115
}
116
}
117
118
// The tests should pass regardless whether the EXT_frag_depth is on or not.
119
INSTANTIATE_TEST_SUITE_P(FragDepthTests, FragDepthTest, testing::Values(false, true));
120
121