Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: gpu/command_buffer/service/shader_translator_unittest.cc

Issue 1126243002: Check for shader version mismatch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <GLES2/gl2.h> 5 #include <GLES2/gl2.h>
6 6
7 #include "gpu/command_buffer/service/shader_translator.h" 7 #include "gpu/command_buffer/service/shader_translator.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace gpu { 10 namespace gpu {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 }; 46 };
47 47
48 TEST_F(ShaderTranslatorTest, ValidVertexShader) { 48 TEST_F(ShaderTranslatorTest, ValidVertexShader) {
49 const char* shader = 49 const char* shader =
50 "void main() {\n" 50 "void main() {\n"
51 " gl_Position = vec4(1.0);\n" 51 " gl_Position = vec4(1.0);\n"
52 "}"; 52 "}";
53 53
54 // A valid shader should be successfully translated. 54 // A valid shader should be successfully translated.
55 std::string info_log, translated_source; 55 std::string info_log, translated_source;
56 int shader_version;
56 AttributeMap attrib_map; 57 AttributeMap attrib_map;
57 UniformMap uniform_map; 58 UniformMap uniform_map;
58 VaryingMap varying_map; 59 VaryingMap varying_map;
59 NameMap name_map; 60 NameMap name_map;
60 EXPECT_TRUE(vertex_translator_->Translate(shader, 61 EXPECT_TRUE(vertex_translator_->Translate(shader,
61 &info_log, 62 &info_log,
62 &translated_source, 63 &translated_source,
64 &shader_version,
63 &attrib_map, 65 &attrib_map,
64 &uniform_map, 66 &uniform_map,
65 &varying_map, 67 &varying_map,
66 &name_map)); 68 &name_map));
67 // Info log must be NULL. 69 // Info log must be NULL.
68 EXPECT_TRUE(info_log.empty()); 70 EXPECT_TRUE(info_log.empty());
69 // Translated shader must be valid and non-empty. 71 // Translated shader must be valid and non-empty.
70 ASSERT_FALSE(translated_source.empty()); 72 ASSERT_FALSE(translated_source.empty());
71 // There should be no attributes, uniforms, and only one built-in 73 // There should be no attributes, uniforms, and only one built-in
72 // varying: gl_Position. 74 // varying: gl_Position.
73 EXPECT_TRUE(attrib_map.empty()); 75 EXPECT_TRUE(attrib_map.empty());
74 EXPECT_TRUE(uniform_map.empty()); 76 EXPECT_TRUE(uniform_map.empty());
75 EXPECT_EQ(1u, varying_map.size()); 77 EXPECT_EQ(1u, varying_map.size());
76 // There should be no name mapping. 78 // There should be no name mapping.
77 EXPECT_TRUE(name_map.empty()); 79 EXPECT_TRUE(name_map.empty());
78 } 80 }
79 81
80 TEST_F(ShaderTranslatorTest, InvalidVertexShader) { 82 TEST_F(ShaderTranslatorTest, InvalidVertexShader) {
81 const char* bad_shader = "foo-bar"; 83 const char* bad_shader = "foo-bar";
82 const char* good_shader = 84 const char* good_shader =
83 "void main() {\n" 85 "void main() {\n"
84 " gl_Position = vec4(1.0);\n" 86 " gl_Position = vec4(1.0);\n"
85 "}"; 87 "}";
86 88
87 // An invalid shader should fail. 89 // An invalid shader should fail.
88 std::string info_log, translated_source; 90 std::string info_log, translated_source;
91 int shader_version;
89 AttributeMap attrib_map; 92 AttributeMap attrib_map;
90 UniformMap uniform_map; 93 UniformMap uniform_map;
91 VaryingMap varying_map; 94 VaryingMap varying_map;
92 NameMap name_map; 95 NameMap name_map;
93 EXPECT_FALSE(vertex_translator_->Translate(bad_shader, 96 EXPECT_FALSE(vertex_translator_->Translate(bad_shader,
94 &info_log, 97 &info_log,
95 &translated_source, 98 &translated_source,
99 &shader_version,
96 &attrib_map, 100 &attrib_map,
97 &uniform_map, 101 &uniform_map,
98 &varying_map, 102 &varying_map,
99 &name_map)); 103 &name_map));
100 // Info log must be valid and non-empty. 104 // Info log must be valid and non-empty.
101 ASSERT_FALSE(info_log.empty()); 105 ASSERT_FALSE(info_log.empty());
102 // Translated shader must be NULL. 106 // Translated shader must be NULL.
103 EXPECT_TRUE(translated_source.empty()); 107 EXPECT_TRUE(translated_source.empty());
104 // There should be no attributes, uniforms, varyings, or name mapping. 108 // There should be no attributes, uniforms, varyings, or name mapping.
105 EXPECT_TRUE(attrib_map.empty()); 109 EXPECT_TRUE(attrib_map.empty());
106 EXPECT_TRUE(uniform_map.empty()); 110 EXPECT_TRUE(uniform_map.empty());
107 EXPECT_TRUE(varying_map.empty()); 111 EXPECT_TRUE(varying_map.empty());
108 EXPECT_TRUE(name_map.empty()); 112 EXPECT_TRUE(name_map.empty());
109 113
110 // Try a good shader after bad. 114 // Try a good shader after bad.
111 info_log.clear(); 115 info_log.clear();
112 EXPECT_TRUE(vertex_translator_->Translate(good_shader, 116 EXPECT_TRUE(vertex_translator_->Translate(good_shader,
113 &info_log, 117 &info_log,
114 &translated_source, 118 &translated_source,
119 &shader_version,
115 &attrib_map, 120 &attrib_map,
116 &uniform_map, 121 &uniform_map,
117 &varying_map, 122 &varying_map,
118 &name_map)); 123 &name_map));
119 EXPECT_TRUE(info_log.empty()); 124 EXPECT_TRUE(info_log.empty());
120 EXPECT_FALSE(translated_source.empty()); 125 EXPECT_FALSE(translated_source.empty());
121 } 126 }
122 127
123 TEST_F(ShaderTranslatorTest, ValidFragmentShader) { 128 TEST_F(ShaderTranslatorTest, ValidFragmentShader) {
124 const char* shader = 129 const char* shader =
125 "void main() {\n" 130 "void main() {\n"
126 " gl_FragColor = vec4(1.0);\n" 131 " gl_FragColor = vec4(1.0);\n"
127 "}"; 132 "}";
128 133
129 // A valid shader should be successfully translated. 134 // A valid shader should be successfully translated.
130 std::string info_log, translated_source; 135 std::string info_log, translated_source;
136 int shader_version;
131 AttributeMap attrib_map; 137 AttributeMap attrib_map;
132 UniformMap uniform_map; 138 UniformMap uniform_map;
133 VaryingMap varying_map; 139 VaryingMap varying_map;
134 NameMap name_map; 140 NameMap name_map;
135 EXPECT_TRUE(fragment_translator_->Translate(shader, 141 EXPECT_TRUE(fragment_translator_->Translate(shader,
136 &info_log, 142 &info_log,
137 &translated_source, 143 &translated_source,
144 &shader_version,
138 &attrib_map, 145 &attrib_map,
139 &uniform_map, 146 &uniform_map,
140 &varying_map, 147 &varying_map,
141 &name_map)); 148 &name_map));
142 // Info log must be NULL. 149 // Info log must be NULL.
143 EXPECT_TRUE(info_log.empty()); 150 EXPECT_TRUE(info_log.empty());
144 // Translated shader must be valid and non-empty. 151 // Translated shader must be valid and non-empty.
145 ASSERT_FALSE(translated_source.empty()); 152 ASSERT_FALSE(translated_source.empty());
146 // There should be no attributes, uniforms, varyings, or name mapping. 153 // There should be no attributes, uniforms, varyings, or name mapping.
147 EXPECT_TRUE(attrib_map.empty()); 154 EXPECT_TRUE(attrib_map.empty());
148 EXPECT_TRUE(uniform_map.empty()); 155 EXPECT_TRUE(uniform_map.empty());
149 EXPECT_TRUE(varying_map.empty()); 156 EXPECT_TRUE(varying_map.empty());
150 EXPECT_TRUE(name_map.empty()); 157 EXPECT_TRUE(name_map.empty());
151 } 158 }
152 159
153 TEST_F(ShaderTranslatorTest, InvalidFragmentShader) { 160 TEST_F(ShaderTranslatorTest, InvalidFragmentShader) {
154 const char* shader = "foo-bar"; 161 const char* shader = "foo-bar";
155 162
156 std::string info_log, translated_source; 163 std::string info_log, translated_source;
164 int shader_version;
157 AttributeMap attrib_map; 165 AttributeMap attrib_map;
158 UniformMap uniform_map; 166 UniformMap uniform_map;
159 VaryingMap varying_map; 167 VaryingMap varying_map;
160 NameMap name_map; 168 NameMap name_map;
161 // An invalid shader should fail. 169 // An invalid shader should fail.
162 EXPECT_FALSE(fragment_translator_->Translate(shader, 170 EXPECT_FALSE(fragment_translator_->Translate(shader,
163 &info_log, 171 &info_log,
164 &translated_source, 172 &translated_source,
173 &shader_version,
165 &attrib_map, 174 &attrib_map,
166 &uniform_map, 175 &uniform_map,
167 &varying_map, 176 &varying_map,
168 &name_map)); 177 &name_map));
169 // Info log must be valid and non-empty. 178 // Info log must be valid and non-empty.
170 EXPECT_FALSE(info_log.empty()); 179 EXPECT_FALSE(info_log.empty());
171 // Translated shader must be NULL. 180 // Translated shader must be NULL.
172 EXPECT_TRUE(translated_source.empty()); 181 EXPECT_TRUE(translated_source.empty());
173 // There should be no attributes or uniforms. 182 // There should be no attributes or uniforms.
174 EXPECT_TRUE(attrib_map.empty()); 183 EXPECT_TRUE(attrib_map.empty());
175 EXPECT_TRUE(uniform_map.empty()); 184 EXPECT_TRUE(uniform_map.empty());
176 EXPECT_TRUE(varying_map.empty()); 185 EXPECT_TRUE(varying_map.empty());
177 EXPECT_TRUE(name_map.empty()); 186 EXPECT_TRUE(name_map.empty());
178 } 187 }
179 188
180 TEST_F(ShaderTranslatorTest, GetAttributes) { 189 TEST_F(ShaderTranslatorTest, GetAttributes) {
181 const char* shader = 190 const char* shader =
182 "attribute vec4 vPosition;\n" 191 "attribute vec4 vPosition;\n"
183 "void main() {\n" 192 "void main() {\n"
184 " gl_Position = vPosition;\n" 193 " gl_Position = vPosition;\n"
185 "}"; 194 "}";
186 195
187 std::string info_log, translated_source; 196 std::string info_log, translated_source;
197 int shader_version;
188 AttributeMap attrib_map; 198 AttributeMap attrib_map;
189 UniformMap uniform_map; 199 UniformMap uniform_map;
190 VaryingMap varying_map; 200 VaryingMap varying_map;
191 NameMap name_map; 201 NameMap name_map;
192 EXPECT_TRUE(vertex_translator_->Translate(shader, 202 EXPECT_TRUE(vertex_translator_->Translate(shader,
193 &info_log, 203 &info_log,
194 &translated_source, 204 &translated_source,
205 &shader_version,
195 &attrib_map, 206 &attrib_map,
196 &uniform_map, 207 &uniform_map,
197 &varying_map, 208 &varying_map,
198 &name_map)); 209 &name_map));
199 // Info log must be NULL. 210 // Info log must be NULL.
200 EXPECT_TRUE(info_log.empty()); 211 EXPECT_TRUE(info_log.empty());
201 // Translated shader must be valid and non-empty. 212 // Translated shader must be valid and non-empty.
202 EXPECT_FALSE(translated_source.empty()); 213 EXPECT_FALSE(translated_source.empty());
203 // There should be no uniforms. 214 // There should be no uniforms.
204 EXPECT_TRUE(uniform_map.empty()); 215 EXPECT_TRUE(uniform_map.empty());
(...skipping 15 matching lines...) Expand all
220 "};\n" 231 "};\n"
221 "struct Bar {\n" 232 "struct Bar {\n"
222 " Foo foo;\n" 233 " Foo foo;\n"
223 "};\n" 234 "};\n"
224 "uniform Bar bar[2];\n" 235 "uniform Bar bar[2];\n"
225 "void main() {\n" 236 "void main() {\n"
226 " gl_FragColor = bar[0].foo.color[0] + bar[1].foo.color[0];\n" 237 " gl_FragColor = bar[0].foo.color[0] + bar[1].foo.color[0];\n"
227 "}"; 238 "}";
228 239
229 std::string info_log, translated_source; 240 std::string info_log, translated_source;
241 int shader_version;
230 AttributeMap attrib_map; 242 AttributeMap attrib_map;
231 UniformMap uniform_map; 243 UniformMap uniform_map;
232 VaryingMap varying_map; 244 VaryingMap varying_map;
233 NameMap name_map; 245 NameMap name_map;
234 EXPECT_TRUE(fragment_translator_->Translate(shader, 246 EXPECT_TRUE(fragment_translator_->Translate(shader,
235 &info_log, 247 &info_log,
236 &translated_source, 248 &translated_source,
249 &shader_version,
237 &attrib_map, 250 &attrib_map,
238 &uniform_map, 251 &uniform_map,
239 &varying_map, 252 &varying_map,
240 &name_map)); 253 &name_map));
241 // Info log must be NULL. 254 // Info log must be NULL.
242 EXPECT_TRUE(info_log.empty()); 255 EXPECT_TRUE(info_log.empty());
243 // Translated shader must be valid and non-empty. 256 // Translated shader must be valid and non-empty.
244 EXPECT_FALSE(translated_source.empty()); 257 EXPECT_FALSE(translated_source.empty());
245 // There should be no attributes. 258 // There should be no attributes.
246 EXPECT_TRUE(attrib_map.empty()); 259 EXPECT_TRUE(attrib_map.empty());
(...skipping 26 matching lines...) Expand all
273 TEST_F(ShaderTranslatorTest, BuiltInFunctionEmulation) { 286 TEST_F(ShaderTranslatorTest, BuiltInFunctionEmulation) {
274 // This test might become invalid in the future when ANGLE Translator is no 287 // This test might become invalid in the future when ANGLE Translator is no
275 // longer emulate dot(float, float) in Mac, or the emulated function name is 288 // longer emulate dot(float, float) in Mac, or the emulated function name is
276 // no longer webgl_dot_emu. 289 // no longer webgl_dot_emu.
277 const char* shader = 290 const char* shader =
278 "void main() {\n" 291 "void main() {\n"
279 " gl_Position = vec4(dot(1.0, 1.0), 1.0, 1.0, 1.0);\n" 292 " gl_Position = vec4(dot(1.0, 1.0), 1.0, 1.0, 1.0);\n"
280 "}"; 293 "}";
281 294
282 std::string info_log, translated_source; 295 std::string info_log, translated_source;
296 int shader_version;
283 AttributeMap attrib_map; 297 AttributeMap attrib_map;
284 UniformMap uniform_map; 298 UniformMap uniform_map;
285 VaryingMap varying_map; 299 VaryingMap varying_map;
286 NameMap name_map; 300 NameMap name_map;
287 EXPECT_TRUE(vertex_translator_->Translate(shader, 301 EXPECT_TRUE(vertex_translator_->Translate(shader,
288 &info_log, 302 &info_log,
289 &translated_source, 303 &translated_source,
304 &shader_version,
290 &attrib_map, 305 &attrib_map,
291 &uniform_map, 306 &uniform_map,
292 &varying_map, 307 &varying_map,
293 &name_map)); 308 &name_map));
294 // Info log must be NULL. 309 // Info log must be NULL.
295 EXPECT_TRUE(info_log.empty()); 310 EXPECT_TRUE(info_log.empty());
296 // Translated shader must be valid and non-empty. 311 // Translated shader must be valid and non-empty.
297 ASSERT_FALSE(translated_source.empty()); 312 ASSERT_FALSE(translated_source.empty());
298 EXPECT_TRUE(strstr(translated_source.c_str(), 313 EXPECT_TRUE(strstr(translated_source.c_str(),
299 "webgl_dot_emu") != NULL); 314 "webgl_dot_emu") != NULL);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 348
334 EXPECT_EQ(options_1, options_2); 349 EXPECT_EQ(options_1, options_2);
335 EXPECT_NE(options_1, options_3); 350 EXPECT_NE(options_1, options_3);
336 EXPECT_NE(options_1, options_4); 351 EXPECT_NE(options_1, options_4);
337 EXPECT_NE(options_3, options_4); 352 EXPECT_NE(options_3, options_4);
338 } 353 }
339 354
340 } // namespace gles2 355 } // namespace gles2
341 } // namespace gpu 356 } // namespace gpu
342 357
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698