Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/tests/compiler_tests/ARB_texture_rectangle_test.cpp
1693 views
1
//
2
// Copyright 2014 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
// ARB_texture_rectangle_test.cpp:
7
// Test for the ARB_texture_rectangle extension
8
//
9
10
#include "GLSLANG/ShaderLang.h"
11
#include "angle_gl.h"
12
#include "gtest/gtest.h"
13
#include "tests/test_utils/ShaderCompileTreeTest.h"
14
15
using namespace sh;
16
17
class ARBTextureRectangleTestNoExt : public ShaderCompileTreeTest
18
{
19
protected:
20
::GLenum getShaderType() const override { return GL_FRAGMENT_SHADER; }
21
ShShaderSpec getShaderSpec() const override { return SH_GLES3_SPEC; }
22
};
23
24
class ARBTextureRectangleTest : public ARBTextureRectangleTestNoExt
25
{
26
protected:
27
void initResources(ShBuiltInResources *resources) override
28
{
29
resources->ARB_texture_rectangle = 1;
30
}
31
};
32
33
// Check that if the extension is not supported, trying to use the features without having an
34
// extension directive fails.
35
TEST_F(ARBTextureRectangleTestNoExt, NewTypeAndBuiltinsWithoutExtensionDirective)
36
{
37
const std::string &shaderString =
38
R"(
39
precision mediump float;
40
uniform sampler2DRect tex;
41
void main()
42
{
43
vec4 color = texture2DRect(tex, vec2(1.0));
44
color = texture2DRectProj(tex, vec3(1.0));
45
color = texture2DRectProj(tex, vec4(1.0));
46
})";
47
if (compile(shaderString))
48
{
49
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
50
}
51
}
52
53
// Check that if the extension is not supported, trying to use the features fails.
54
TEST_F(ARBTextureRectangleTestNoExt, NewTypeAndBuiltinsWithExtensionDirective)
55
{
56
const std::string &shaderString =
57
R"(
58
#extension GL_ARB_texture_rectangle : enable
59
precision mediump float;
60
uniform sampler2DRect tex;
61
void main()
62
{
63
vec4 color = texture2DRect(tex, vec2(1.0));
64
color = texture2DRectProj(tex, vec3(1.0));
65
color = texture2DRectProj(tex, vec4(1.0));
66
})";
67
if (compile(shaderString))
68
{
69
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
70
}
71
}
72
73
// Check that new types and builtins are usable even with the #extension directive
74
// Issue #15 of ARB_texture_rectangle explains that the extension was specified before the
75
// #extension mechanism was in place so it doesn't require explicit enabling.
76
TEST_F(ARBTextureRectangleTest, NewTypeAndBuiltinsWithoutExtensionDirective)
77
{
78
const std::string &shaderString =
79
"precision mediump float;\n"
80
"uniform sampler2DRect tex;\n"
81
"void main() {\n"
82
" vec4 color = texture2DRect(tex, vec2(1.0));"
83
" color = texture2DRectProj(tex, vec3(1.0));"
84
" color = texture2DRectProj(tex, vec4(1.0));"
85
"}\n";
86
if (!compile(shaderString))
87
{
88
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
89
}
90
}
91
92
// Test valid usage of the new types and builtins
93
TEST_F(ARBTextureRectangleTest, NewTypeAndBuiltingsWithExtensionDirective)
94
{
95
const std::string &shaderString =
96
"#extension GL_ARB_texture_rectangle : require\n"
97
"precision mediump float;\n"
98
"uniform sampler2DRect tex;\n"
99
"void main() {\n"
100
" vec4 color = texture2DRect(tex, vec2(1.0));"
101
" color = texture2DRectProj(tex, vec3(1.0));"
102
" color = texture2DRectProj(tex, vec4(1.0));"
103
"}\n";
104
if (!compile(shaderString))
105
{
106
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
107
}
108
}
109
110
// Check that it is not possible to pass a sampler2DRect where sampler2D is expected, and vice versa
111
TEST_F(ARBTextureRectangleTest, Rect2DVs2DMismatch)
112
{
113
const std::string &shaderString1 =
114
"#extension GL_ARB_texture_rectangle : require\n"
115
"precision mediump float;\n"
116
"uniform sampler2DRect tex;\n"
117
"void main() {\n"
118
" vec4 color = texture2D(tex, vec2(1.0));"
119
"}\n";
120
if (compile(shaderString1))
121
{
122
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
123
}
124
125
const std::string &shaderString2 =
126
"#extension GL_ARB_texture_rectangle : require\n"
127
"precision mediump float;\n"
128
"uniform sampler2D tex;\n"
129
"void main() {\n"
130
" vec4 color = texture2DRect(tex, vec2(1.0));"
131
"}\n";
132
if (compile(shaderString2))
133
{
134
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
135
}
136
}
137
138
// Disabling ARB_texture_rectangle in GLSL should work, even if it is enabled by default.
139
// See ARB_texture_rectangle spec: "a shader can still include all variations of #extension
140
// GL_ARB_texture_rectangle in its source code"
141
TEST_F(ARBTextureRectangleTest, DisableARBTextureRectangle)
142
{
143
const std::string &shaderString =
144
R"(
145
#extension GL_ARB_texture_rectangle : disable
146
147
precision mediump float;
148
149
uniform sampler2DRect s;
150
void main()
151
{})";
152
if (compile(shaderString))
153
{
154
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
155
}
156
}
157
158
// The compiler option to disable ARB_texture_rectangle should prevent shaders from
159
// enabling it.
160
TEST_F(ARBTextureRectangleTest, CompilerOption)
161
{
162
const std::string &shaderString =
163
R"(
164
#extension GL_ARB_texture_rectangle : enable
165
precision mediump float;
166
uniform sampler2DRect s;
167
void main() {})";
168
mExtraCompileOptions |= SH_DISABLE_ARB_TEXTURE_RECTANGLE;
169
if (compile(shaderString))
170
{
171
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
172
}
173
}
174
175
// The compiler option to disable ARB_texture_rectangle should be toggleable.
176
TEST_F(ARBTextureRectangleTest, ToggleCompilerOption)
177
{
178
const std::string &shaderString =
179
R"(
180
precision mediump float;
181
uniform sampler2DRect s;
182
void main() {})";
183
if (!compile(shaderString))
184
{
185
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
186
}
187
mExtraCompileOptions |= SH_DISABLE_ARB_TEXTURE_RECTANGLE;
188
if (compile(shaderString))
189
{
190
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
191
}
192
mExtraCompileOptions &= ~SH_DISABLE_ARB_TEXTURE_RECTANGLE;
193
if (!compile(shaderString))
194
{
195
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
196
}
197
}
198
199