2 // Copyright (c) 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.
6 // CollectVariables_test.cpp:
7 // Some tests for shader inspection
11 #include "gtest/gtest.h"
12 #include "GLSLANG/ShaderLang.h"
17 TEST(ShaderVariableTest, FindInfoByMappedName)
30 uni.mappedName = "m_uni";
39 ShaderVariable x(GL_FLOAT, 2);
42 a.fields.push_back(x);
44 ShaderVariable y(GL_FLOAT_VEC3, 0);
47 a.fields.push_back(y);
49 uni.fields.push_back(a);
52 const ShaderVariable *leafVar = NULL;
53 std::string originalFullName;
55 std::string mappedFullName = "wrongName";
56 EXPECT_FALSE(uni.findInfoByMappedName(
57 mappedFullName, &leafVar, &originalFullName));
59 mappedFullName = "m_uni";
60 EXPECT_TRUE(uni.findInfoByMappedName(
61 mappedFullName, &leafVar, &originalFullName));
62 EXPECT_EQ(&uni, leafVar);
63 EXPECT_STREQ("uni", originalFullName.c_str());
65 mappedFullName = "m_uni[0].m_a[1].wrongName";
66 EXPECT_FALSE(uni.findInfoByMappedName(
67 mappedFullName, &leafVar, &originalFullName));
69 mappedFullName = "m_uni[0].m_a[1].m_x";
70 EXPECT_TRUE(uni.findInfoByMappedName(
71 mappedFullName, &leafVar, &originalFullName));
72 EXPECT_EQ(&(uni.fields[0].fields[0]), leafVar);
73 EXPECT_STREQ("uni[0].a[1].x", originalFullName.c_str());
75 mappedFullName = "m_uni[0].m_a[1].m_x[0]";
76 EXPECT_TRUE(uni.findInfoByMappedName(
77 mappedFullName, &leafVar, &originalFullName));
78 EXPECT_EQ(&(uni.fields[0].fields[0]), leafVar);
79 EXPECT_STREQ("uni[0].a[1].x[0]", originalFullName.c_str());
81 mappedFullName = "m_uni[0].m_a[1].m_y";
82 EXPECT_TRUE(uni.findInfoByMappedName(
83 mappedFullName, &leafVar, &originalFullName));
84 EXPECT_EQ(&(uni.fields[0].fields[1]), leafVar);
85 EXPECT_STREQ("uni[0].a[1].y", originalFullName.c_str());
88 TEST(ShaderVariableTest, IsSameUniformWithDifferentFieldOrder)
98 vx_a.mappedName = "m_uni";
99 vx_a.structName = "A";
101 ShaderVariable x(GL_FLOAT, 0);
103 x.mappedName = "m_x";
104 vx_a.fields.push_back(x);
106 ShaderVariable y(GL_FLOAT, 0);
108 y.mappedName = "m_y";
109 vx_a.fields.push_back(y);
120 fx_a.mappedName = "m_uni";
121 fx_a.structName = "A";
123 ShaderVariable y(GL_FLOAT, 0);
125 y.mappedName = "m_y";
126 fx_a.fields.push_back(y);
128 ShaderVariable x(GL_FLOAT, 0);
130 x.mappedName = "m_x";
131 fx_a.fields.push_back(x);
134 EXPECT_FALSE(vx_a.isSameUniformAtLinkTime(fx_a));
137 TEST(ShaderVariableTest, IsSameUniformWithDifferentStructNames)
147 vx_a.mappedName = "m_uni";
148 vx_a.structName = "A";
150 ShaderVariable x(GL_FLOAT, 0);
152 x.mappedName = "m_x";
153 vx_a.fields.push_back(x);
155 ShaderVariable y(GL_FLOAT, 0);
157 y.mappedName = "m_y";
158 vx_a.fields.push_back(y);
169 fx_a.mappedName = "m_uni";
171 ShaderVariable x(GL_FLOAT, 0);
173 x.mappedName = "m_x";
174 fx_a.fields.push_back(x);
176 ShaderVariable y(GL_FLOAT, 0);
178 y.mappedName = "m_y";
179 fx_a.fields.push_back(y);
182 fx_a.structName = "B";
183 EXPECT_FALSE(vx_a.isSameUniformAtLinkTime(fx_a));
185 fx_a.structName = "A";
186 EXPECT_TRUE(vx_a.isSameUniformAtLinkTime(fx_a));
188 fx_a.structName = "";
189 EXPECT_FALSE(vx_a.isSameUniformAtLinkTime(fx_a));
192 TEST(ShaderVariableTest, IsSameVaryingWithDifferentInvariance)
194 // invariant varying float vary;
198 vx.precision = GL_MEDIUM_FLOAT;
200 vx.mappedName = "m_vary";
202 vx.isInvariant = true;
204 // varying float vary;
208 fx.precision = GL_MEDIUM_FLOAT;
210 fx.mappedName = "m_vary";
212 fx.isInvariant = false;
214 EXPECT_FALSE(vx.isSameVaryingAtLinkTime(fx));
216 // invariant varying float vary;
217 fx.isInvariant = true;
218 EXPECT_TRUE(vx.isSameVaryingAtLinkTime(fx));