Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/tests/compiler_tests/PrunePureLiteralStatements_test.cpp
1693 views
1
//
2
// Copyright 2017 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
// PrunePureLiteralStatements_test.cpp:
7
// Tests for pruning literal statements.
8
//
9
10
#include "angle_gl.h"
11
#include "gtest/gtest.h"
12
#include "tests/test_utils/compiler_test.h"
13
14
using namespace sh;
15
16
namespace
17
{
18
19
class PrunePureLiteralStatementsTest : public MatchOutputCodeTest
20
{
21
public:
22
// The PrunePureLiteralStatements pass is used when outputting ESSL
23
PrunePureLiteralStatementsTest() : MatchOutputCodeTest(GL_FRAGMENT_SHADER, 0, SH_ESSL_OUTPUT) {}
24
};
25
26
// Most basic test for the pruning
27
TEST_F(PrunePureLiteralStatementsTest, FloatLiteralStatement)
28
{
29
const std::string shaderString =
30
R"(precision mediump float;
31
void main()
32
{
33
float f = 41.0;
34
42.0;
35
gl_FragColor = vec4(f);
36
})";
37
compile(shaderString);
38
ASSERT_TRUE(foundInCode("41"));
39
ASSERT_TRUE(notFoundInCode("42"));
40
}
41
42
// Test the pruning works for constructed types too
43
TEST_F(PrunePureLiteralStatementsTest, ConstructorLiteralStatement)
44
{
45
const std::string shaderString =
46
R"(precision mediump float;
47
void main()
48
{
49
vec2 f = vec2(41.0, 41.0);
50
vec2(42.0, 42.0);
51
gl_FragColor = vec4(f, 0.0, 0.0);
52
})";
53
compile(shaderString);
54
ASSERT_TRUE(foundInCode("41"));
55
ASSERT_TRUE(notFoundInCode("42"));
56
}
57
58
// Test the pruning works when the literal is a (non-trivial) expression
59
TEST_F(PrunePureLiteralStatementsTest, ExpressionLiteralStatement)
60
{
61
const std::string shaderString =
62
"precision mediump float;\n"
63
"void main()\n"
64
"{\n"
65
" vec2(21.0, 21.0) + vec2(21.0, 21.0);\n"
66
"}\n";
67
compile(shaderString);
68
ASSERT_TRUE(notFoundInCode("21"));
69
ASSERT_TRUE(notFoundInCode("42"));
70
}
71
72
// Test that the pruning happens in the for-loop expression too
73
TEST_F(PrunePureLiteralStatementsTest, ForLoopLiteralExpression)
74
{
75
const std::string shaderString =
76
"precision mediump float;\n"
77
"void main()\n"
78
"{\n"
79
" for (;; vec2(42.0, 42.0)) {}\n"
80
"}\n";
81
compile(shaderString);
82
ASSERT_TRUE(notFoundInCode("42"));
83
}
84
85
// Test that the pruning correctly handles the pruning inside switch statements - for a switch with
86
// one empty case.
87
TEST_F(PrunePureLiteralStatementsTest, SwitchLiteralExpressionEmptyCase)
88
{
89
const std::string shaderString =
90
"#version 300 es\n"
91
"precision mediump float;\n"
92
"void main()\n"
93
"{\n"
94
" switch(1)\n"
95
" {\n"
96
" default:\n"
97
" 42;\n"
98
" }\n"
99
"}\n";
100
compile(shaderString);
101
ASSERT_TRUE(notFoundInCode("default"));
102
ASSERT_TRUE(notFoundInCode("42"));
103
}
104
105
// Test that the pruning correctly handles the pruning inside switch statements - for a switch with
106
// multiple cases.
107
TEST_F(PrunePureLiteralStatementsTest, SwitchLiteralExpressionEmptyCases)
108
{
109
const std::string shaderString =
110
"#version 300 es\n"
111
"precision mediump float;\n"
112
"void main()\n"
113
"{\n"
114
" switch(1)\n"
115
" {\n"
116
" case 1:\n"
117
" case 2:\n"
118
" default:\n"
119
" 42;\n"
120
" }\n"
121
"}\n";
122
compile(shaderString);
123
ASSERT_TRUE(notFoundInCode("default"));
124
ASSERT_TRUE(notFoundInCode("case"));
125
ASSERT_TRUE(notFoundInCode("42"));
126
}
127
128
// Test that the pruning correctly handles the pruning inside switch statements - only cases at the
129
// end are deleted
130
TEST_F(PrunePureLiteralStatementsTest, SwitchLiteralExpressionOnlyLastCase)
131
{
132
const std::string shaderString =
133
"#version 300 es\n"
134
"precision mediump float;\n"
135
"void main()\n"
136
"{\n"
137
" switch(1)\n"
138
" {\n"
139
" case 1:\n"
140
" default:\n"
141
" 42;\n"
142
" break;\n"
143
" }\n"
144
"}\n";
145
compile(shaderString);
146
ASSERT_TRUE(foundInCode("default"));
147
ASSERT_TRUE(foundInCode("case"));
148
ASSERT_TRUE(notFoundInCode("42"));
149
}
150
151
// Test that the pruning correctly handles the pruning inside switch statements - pruning isn't
152
// stopped by literal statements
153
TEST_F(PrunePureLiteralStatementsTest, SwitchLiteralExpressionLiteralDoesntStop)
154
{
155
const std::string shaderString =
156
"#version 300 es\n"
157
"precision mediump float;\n"
158
"void main()\n"
159
"{\n"
160
" switch(1)\n"
161
" {\n"
162
" case 1:\n"
163
" 42;\n"
164
" case 2:\n"
165
" 43;\n"
166
" }\n"
167
"}\n";
168
compile(shaderString);
169
ASSERT_TRUE(notFoundInCode("case"));
170
ASSERT_TRUE(notFoundInCode("42"));
171
ASSERT_TRUE(notFoundInCode("43"));
172
}
173
174
} // namespace
175
176