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

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

Issue 1309743005: command_buffer: Implement EXT_blend_func_extended (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-05-path-fragment-input-gen
Patch Set: Created 5 years, 3 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 #include "ui/gl/gl_version_info.h" 9 #include "ui/gl/gl_version_info.h"
10 10
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 "void main() {\n" 53 "void main() {\n"
54 " gl_Position = vec4(1.0);\n" 54 " gl_Position = vec4(1.0);\n"
55 "}"; 55 "}";
56 56
57 // A valid shader should be successfully translated. 57 // A valid shader should be successfully translated.
58 std::string info_log, translated_source; 58 std::string info_log, translated_source;
59 int shader_version; 59 int shader_version;
60 AttributeMap attrib_map; 60 AttributeMap attrib_map;
61 UniformMap uniform_map; 61 UniformMap uniform_map;
62 VaryingMap varying_map; 62 VaryingMap varying_map;
63 AttributeList output_variable_list;
63 NameMap name_map; 64 NameMap name_map;
64 EXPECT_TRUE(vertex_translator_->Translate(shader, 65 EXPECT_TRUE(vertex_translator_->Translate(
65 &info_log, 66 shader, &info_log, &translated_source, &shader_version, &attrib_map,
66 &translated_source, 67 &uniform_map, &varying_map, &output_variable_list, &name_map));
67 &shader_version,
68 &attrib_map,
69 &uniform_map,
70 &varying_map,
71 &name_map));
72 // Info log must be NULL. 68 // Info log must be NULL.
73 EXPECT_TRUE(info_log.empty()); 69 EXPECT_TRUE(info_log.empty());
74 // Translated shader must be valid and non-empty. 70 // Translated shader must be valid and non-empty.
75 ASSERT_FALSE(translated_source.empty()); 71 ASSERT_FALSE(translated_source.empty());
76 // There should be no attributes, uniforms, and only one built-in 72 // There should be no attributes, uniforms, and only one built-in
77 // varying: gl_Position. 73 // varying: gl_Position.
78 EXPECT_TRUE(attrib_map.empty()); 74 EXPECT_TRUE(attrib_map.empty());
79 EXPECT_TRUE(uniform_map.empty()); 75 EXPECT_TRUE(uniform_map.empty());
80 EXPECT_EQ(1u, varying_map.size()); 76 EXPECT_EQ(1u, varying_map.size());
77 EXPECT_TRUE(output_variable_list.empty());
81 // There should be no name mapping. 78 // There should be no name mapping.
82 EXPECT_TRUE(name_map.empty()); 79 EXPECT_TRUE(name_map.empty());
83 } 80 }
84 81
85 TEST_F(ShaderTranslatorTest, InvalidVertexShader) { 82 TEST_F(ShaderTranslatorTest, InvalidVertexShader) {
86 const char* bad_shader = "foo-bar"; 83 const char* bad_shader = "foo-bar";
87 const char* good_shader = 84 const char* good_shader =
88 "void main() {\n" 85 "void main() {\n"
89 " gl_Position = vec4(1.0);\n" 86 " gl_Position = vec4(1.0);\n"
90 "}"; 87 "}";
91 88
92 // An invalid shader should fail. 89 // An invalid shader should fail.
93 std::string info_log, translated_source; 90 std::string info_log, translated_source;
94 int shader_version; 91 int shader_version;
95 AttributeMap attrib_map; 92 AttributeMap attrib_map;
96 UniformMap uniform_map; 93 UniformMap uniform_map;
97 VaryingMap varying_map; 94 VaryingMap varying_map;
95 AttributeList output_variable_list;
98 NameMap name_map; 96 NameMap name_map;
99 EXPECT_FALSE(vertex_translator_->Translate(bad_shader, 97 EXPECT_FALSE(vertex_translator_->Translate(
100 &info_log, 98 bad_shader, &info_log, &translated_source, &shader_version, &attrib_map,
101 &translated_source, 99 &uniform_map, &varying_map, &output_variable_list, &name_map));
102 &shader_version,
103 &attrib_map,
104 &uniform_map,
105 &varying_map,
106 &name_map));
107 // Info log must be valid and non-empty. 100 // Info log must be valid and non-empty.
108 ASSERT_FALSE(info_log.empty()); 101 ASSERT_FALSE(info_log.empty());
109 // Translated shader must be NULL. 102 // Translated shader must be NULL.
110 EXPECT_TRUE(translated_source.empty()); 103 EXPECT_TRUE(translated_source.empty());
111 // There should be no attributes, uniforms, varyings, or name mapping. 104 // There should be no attributes, uniforms, varyings, or name mapping.
112 EXPECT_TRUE(attrib_map.empty()); 105 EXPECT_TRUE(attrib_map.empty());
113 EXPECT_TRUE(uniform_map.empty()); 106 EXPECT_TRUE(uniform_map.empty());
114 EXPECT_TRUE(varying_map.empty()); 107 EXPECT_TRUE(varying_map.empty());
108 EXPECT_TRUE(output_variable_list.empty());
115 EXPECT_TRUE(name_map.empty()); 109 EXPECT_TRUE(name_map.empty());
116 110
117 // Try a good shader after bad. 111 // Try a good shader after bad.
118 info_log.clear(); 112 info_log.clear();
119 EXPECT_TRUE(vertex_translator_->Translate(good_shader, 113 EXPECT_TRUE(vertex_translator_->Translate(
120 &info_log, 114 good_shader, &info_log, &translated_source, &shader_version, &attrib_map,
121 &translated_source, 115 &uniform_map, &varying_map, &output_variable_list, &name_map));
122 &shader_version,
123 &attrib_map,
124 &uniform_map,
125 &varying_map,
126 &name_map));
127 EXPECT_TRUE(info_log.empty()); 116 EXPECT_TRUE(info_log.empty());
128 EXPECT_FALSE(translated_source.empty()); 117 EXPECT_FALSE(translated_source.empty());
129 } 118 }
130 119
131 TEST_F(ShaderTranslatorTest, ValidFragmentShader) { 120 TEST_F(ShaderTranslatorTest, ValidFragmentShader) {
132 const char* shader = 121 const char* shader =
133 "void main() {\n" 122 "void main() {\n"
134 " gl_FragColor = vec4(1.0);\n" 123 " gl_FragColor = vec4(1.0);\n"
135 "}"; 124 "}";
136 125
137 // A valid shader should be successfully translated. 126 // A valid shader should be successfully translated.
138 std::string info_log, translated_source; 127 std::string info_log, translated_source;
139 int shader_version; 128 int shader_version;
140 AttributeMap attrib_map; 129 AttributeMap attrib_map;
141 UniformMap uniform_map; 130 UniformMap uniform_map;
142 VaryingMap varying_map; 131 VaryingMap varying_map;
132 AttributeList output_variable_list;
143 NameMap name_map; 133 NameMap name_map;
144 EXPECT_TRUE(fragment_translator_->Translate(shader, 134 EXPECT_TRUE(fragment_translator_->Translate(
145 &info_log, 135 shader, &info_log, &translated_source, &shader_version, &attrib_map,
146 &translated_source, 136 &uniform_map, &varying_map, &output_variable_list, &name_map));
147 &shader_version,
148 &attrib_map,
149 &uniform_map,
150 &varying_map,
151 &name_map));
152 // Info log must be NULL. 137 // Info log must be NULL.
153 EXPECT_TRUE(info_log.empty()); 138 EXPECT_TRUE(info_log.empty());
154 // Translated shader must be valid and non-empty. 139 // Translated shader must be valid and non-empty.
155 ASSERT_FALSE(translated_source.empty()); 140 ASSERT_FALSE(translated_source.empty());
156 // There should be no attributes, uniforms, varyings, or name mapping. 141 // There should be no attributes, uniforms, varyings, or name mapping.
157 EXPECT_TRUE(attrib_map.empty()); 142 EXPECT_TRUE(attrib_map.empty());
158 EXPECT_TRUE(uniform_map.empty()); 143 EXPECT_TRUE(uniform_map.empty());
159 EXPECT_TRUE(varying_map.empty()); 144 EXPECT_TRUE(varying_map.empty());
160 EXPECT_TRUE(name_map.empty()); 145 EXPECT_TRUE(name_map.empty());
146 // gl_FragColor.
147 EXPECT_EQ(1u, output_variable_list.size());
161 } 148 }
162 149
163 TEST_F(ShaderTranslatorTest, InvalidFragmentShader) { 150 TEST_F(ShaderTranslatorTest, InvalidFragmentShader) {
164 const char* shader = "foo-bar"; 151 const char* shader = "foo-bar";
165 152
166 std::string info_log, translated_source; 153 std::string info_log, translated_source;
167 int shader_version; 154 int shader_version;
168 AttributeMap attrib_map; 155 AttributeMap attrib_map;
169 UniformMap uniform_map; 156 UniformMap uniform_map;
170 VaryingMap varying_map; 157 VaryingMap varying_map;
158 AttributeList output_variable_list;
171 NameMap name_map; 159 NameMap name_map;
172 // An invalid shader should fail. 160 // An invalid shader should fail.
173 EXPECT_FALSE(fragment_translator_->Translate(shader, 161 EXPECT_FALSE(fragment_translator_->Translate(
174 &info_log, 162 shader, &info_log, &translated_source, &shader_version, &attrib_map,
175 &translated_source, 163 &uniform_map, &varying_map, &output_variable_list, &name_map));
176 &shader_version,
177 &attrib_map,
178 &uniform_map,
179 &varying_map,
180 &name_map));
181 // Info log must be valid and non-empty. 164 // Info log must be valid and non-empty.
182 EXPECT_FALSE(info_log.empty()); 165 EXPECT_FALSE(info_log.empty());
183 // Translated shader must be NULL. 166 // Translated shader must be NULL.
184 EXPECT_TRUE(translated_source.empty()); 167 EXPECT_TRUE(translated_source.empty());
185 // There should be no attributes or uniforms. 168 // There should be no attributes or uniforms.
186 EXPECT_TRUE(attrib_map.empty()); 169 EXPECT_TRUE(attrib_map.empty());
187 EXPECT_TRUE(uniform_map.empty()); 170 EXPECT_TRUE(uniform_map.empty());
188 EXPECT_TRUE(varying_map.empty()); 171 EXPECT_TRUE(varying_map.empty());
172 EXPECT_TRUE(output_variable_list.empty());
189 EXPECT_TRUE(name_map.empty()); 173 EXPECT_TRUE(name_map.empty());
190 } 174 }
191 175
192 TEST_F(ShaderTranslatorTest, GetAttributes) { 176 TEST_F(ShaderTranslatorTest, GetAttributes) {
193 const char* shader = 177 const char* shader =
194 "attribute vec4 vPosition;\n" 178 "attribute vec4 vPosition;\n"
195 "void main() {\n" 179 "void main() {\n"
196 " gl_Position = vPosition;\n" 180 " gl_Position = vPosition;\n"
197 "}"; 181 "}";
198 182
199 std::string info_log, translated_source; 183 std::string info_log, translated_source;
200 int shader_version; 184 int shader_version;
201 AttributeMap attrib_map; 185 AttributeMap attrib_map;
202 UniformMap uniform_map; 186 UniformMap uniform_map;
203 VaryingMap varying_map; 187 VaryingMap varying_map;
188 AttributeList output_variable_list;
204 NameMap name_map; 189 NameMap name_map;
205 EXPECT_TRUE(vertex_translator_->Translate(shader, 190 EXPECT_TRUE(vertex_translator_->Translate(
206 &info_log, 191 shader, &info_log, &translated_source, &shader_version, &attrib_map,
207 &translated_source, 192 &uniform_map, &varying_map, &output_variable_list, &name_map));
208 &shader_version,
209 &attrib_map,
210 &uniform_map,
211 &varying_map,
212 &name_map));
213 // Info log must be NULL. 193 // Info log must be NULL.
214 EXPECT_TRUE(info_log.empty()); 194 EXPECT_TRUE(info_log.empty());
215 // Translated shader must be valid and non-empty. 195 // Translated shader must be valid and non-empty.
216 EXPECT_FALSE(translated_source.empty()); 196 EXPECT_FALSE(translated_source.empty());
217 // There should be no uniforms. 197 // There should be no uniforms.
218 EXPECT_TRUE(uniform_map.empty()); 198 EXPECT_TRUE(uniform_map.empty());
219 // There should be one attribute with following characteristics: 199 // There should be one attribute with following characteristics:
220 // name:vPosition type:GL_FLOAT_VEC4 size:0. 200 // name:vPosition type:GL_FLOAT_VEC4 size:0.
221 EXPECT_EQ(1u, attrib_map.size()); 201 EXPECT_EQ(1u, attrib_map.size());
222 AttributeMap::const_iterator iter = attrib_map.find("vPosition"); 202 AttributeMap::const_iterator iter = attrib_map.find("vPosition");
(...skipping 15 matching lines...) Expand all
238 "uniform Bar bar[2];\n" 218 "uniform Bar bar[2];\n"
239 "void main() {\n" 219 "void main() {\n"
240 " gl_FragColor = bar[0].foo.color[0] + bar[1].foo.color[0];\n" 220 " gl_FragColor = bar[0].foo.color[0] + bar[1].foo.color[0];\n"
241 "}"; 221 "}";
242 222
243 std::string info_log, translated_source; 223 std::string info_log, translated_source;
244 int shader_version; 224 int shader_version;
245 AttributeMap attrib_map; 225 AttributeMap attrib_map;
246 UniformMap uniform_map; 226 UniformMap uniform_map;
247 VaryingMap varying_map; 227 VaryingMap varying_map;
228 AttributeList output_variable_list;
248 NameMap name_map; 229 NameMap name_map;
249 EXPECT_TRUE(fragment_translator_->Translate(shader, 230 EXPECT_TRUE(fragment_translator_->Translate(
250 &info_log, 231 shader, &info_log, &translated_source, &shader_version, &attrib_map,
251 &translated_source, 232 &uniform_map, &varying_map, &output_variable_list, &name_map));
252 &shader_version,
253 &attrib_map,
254 &uniform_map,
255 &varying_map,
256 &name_map));
257 // Info log must be NULL. 233 // Info log must be NULL.
258 EXPECT_TRUE(info_log.empty()); 234 EXPECT_TRUE(info_log.empty());
259 // Translated shader must be valid and non-empty. 235 // Translated shader must be valid and non-empty.
260 EXPECT_FALSE(translated_source.empty()); 236 EXPECT_FALSE(translated_source.empty());
261 // There should be no attributes. 237 // There should be no attributes.
262 EXPECT_TRUE(attrib_map.empty()); 238 EXPECT_TRUE(attrib_map.empty());
263 // There should be two uniforms with following characteristics: 239 // There should be two uniforms with following characteristics:
264 // 1. name:bar[0].foo.color[0] type:GL_FLOAT_VEC4 size:1 240 // 1. name:bar[0].foo.color[0] type:GL_FLOAT_VEC4 size:1
265 // 2. name:bar[1].foo.color[0] type:GL_FLOAT_VEC4 size:1 241 // 2. name:bar[1].foo.color[0] type:GL_FLOAT_VEC4 size:1
266 // However, there will be only one entry "bar" in the map. 242 // However, there will be only one entry "bar" in the map.
267 EXPECT_EQ(1u, uniform_map.size()); 243 EXPECT_EQ(1u, uniform_map.size());
268 UniformMap::const_iterator iter = uniform_map.find("bar"); 244 UniformMap::const_iterator iter = uniform_map.find("bar");
269 EXPECT_TRUE(iter != uniform_map.end()); 245 EXPECT_TRUE(iter != uniform_map.end());
270 // First uniform. 246 // First uniform.
271 const sh::ShaderVariable* info; 247 const sh::ShaderVariable* info;
272 std::string original_name; 248 std::string original_name;
273 EXPECT_TRUE(iter->second.findInfoByMappedName( 249 EXPECT_TRUE(iter->second.findInfoByMappedName(
274 "bar[0].foo.color[0]", &info, &original_name)); 250 "bar[0].foo.color[0]", &info, &original_name));
275 EXPECT_EQ(static_cast<GLenum>(GL_FLOAT_VEC4), info->type); 251 EXPECT_EQ(static_cast<GLenum>(GL_FLOAT_VEC4), info->type);
276 EXPECT_EQ(1u, info->arraySize); 252 EXPECT_EQ(1u, info->arraySize);
277 EXPECT_STREQ("color", info->name.c_str()); 253 EXPECT_STREQ("color", info->name.c_str());
278 EXPECT_STREQ("bar[0].foo.color[0]", original_name.c_str()); 254 EXPECT_STREQ("bar[0].foo.color[0]", original_name.c_str());
279 // Second uniform. 255 // Second uniform.
280 EXPECT_TRUE(iter->second.findInfoByMappedName( 256 EXPECT_TRUE(iter->second.findInfoByMappedName(
281 "bar[1].foo.color[0]", &info, &original_name)); 257 "bar[1].foo.color[0]", &info, &original_name));
282 EXPECT_EQ(static_cast<GLenum>(GL_FLOAT_VEC4), info->type); 258 EXPECT_EQ(static_cast<GLenum>(GL_FLOAT_VEC4), info->type);
283 EXPECT_EQ(1u, info->arraySize); 259 EXPECT_EQ(1u, info->arraySize);
284 EXPECT_STREQ("color", info->name.c_str()); 260 EXPECT_STREQ("color", info->name.c_str());
285 EXPECT_STREQ("bar[1].foo.color[0]", original_name.c_str()); 261 EXPECT_STREQ("bar[1].foo.color[0]", original_name.c_str());
262 EXPECT_EQ(1u, output_variable_list.size());
263 ASSERT_TRUE(output_variable_list.size() > 0);
264 EXPECT_EQ(output_variable_list[0].mappedName, "gl_FragColor");
286 } 265 }
287 266
288 TEST_F(ShaderTranslatorTest, OptionsString) { 267 TEST_F(ShaderTranslatorTest, OptionsString) {
289 scoped_refptr<ShaderTranslator> translator_1 = new ShaderTranslator(); 268 scoped_refptr<ShaderTranslator> translator_1 = new ShaderTranslator();
290 scoped_refptr<ShaderTranslator> translator_2 = new ShaderTranslator(); 269 scoped_refptr<ShaderTranslator> translator_2 = new ShaderTranslator();
291 scoped_refptr<ShaderTranslator> translator_3 = new ShaderTranslator(); 270 scoped_refptr<ShaderTranslator> translator_3 = new ShaderTranslator();
292 271
293 ShBuiltInResources resources; 272 ShBuiltInResources resources;
294 ShInitBuiltInResources(&resources); 273 ShInitBuiltInResources(&resources);
295 274
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 ShShaderOutput shader_output_language = 324 ShShaderOutput shader_output_language =
346 ShaderTranslator::GetShaderOutputLanguageForContext( 325 ShaderTranslator::GetShaderOutputLanguageForContext(
347 output_context_version); 326 output_context_version);
348 ASSERT_TRUE(translator->Init(GL_VERTEX_SHADER, SH_GLES2_SPEC, &resources, 327 ASSERT_TRUE(translator->Init(GL_VERTEX_SHADER, SH_GLES2_SPEC, &resources,
349 shader_output_language, compile_options)); 328 shader_output_language, compile_options));
350 329
351 std::string translated_source; 330 std::string translated_source;
352 int shader_version; 331 int shader_version;
353 EXPECT_TRUE(translator->Translate(kShader, nullptr, &translated_source, 332 EXPECT_TRUE(translator->Translate(kShader, nullptr, &translated_source,
354 &shader_version, nullptr, nullptr, nullptr, 333 &shader_version, nullptr, nullptr, nullptr,
355 nullptr)); 334 nullptr, nullptr));
356 335
357 std::string expected_version_directive = testing::get<1>(GetParam()); 336 std::string expected_version_directive = testing::get<1>(GetParam());
358 if (expected_version_directive.empty()) { 337 if (expected_version_directive.empty()) {
359 EXPECT_TRUE(translated_source.find("#version") == std::string::npos) 338 EXPECT_TRUE(translated_source.find("#version") == std::string::npos)
360 << "Translation was:\n" << translated_source; 339 << "Translation was:\n" << translated_source;
361 } else { 340 } else {
362 EXPECT_TRUE(translated_source.find(expected_version_directive) != 341 EXPECT_TRUE(translated_source.find(expected_version_directive) !=
363 std::string::npos) 342 std::string::npos)
364 << "Translation was:\n" << translated_source; 343 << "Translation was:\n" << translated_source;
365 } 344 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 ShaderTranslatorOutputVersionTest, 401 ShaderTranslatorOutputVersionTest,
423 testing::Values(make_gl_glsl_tuple("opengl es 2.0", ""), 402 testing::Values(make_gl_glsl_tuple("opengl es 2.0", ""),
424 make_gl_glsl_tuple("opengl es 3.0", ""), 403 make_gl_glsl_tuple("opengl es 3.0", ""),
425 make_gl_glsl_tuple("opengl es 3.1", ""), 404 make_gl_glsl_tuple("opengl es 3.1", ""),
426 make_gl_glsl_tuple("opengl es 3.2", 405 make_gl_glsl_tuple("opengl es 3.2",
427 ""))); 406 "")));
428 407
429 } // namespace gles2 408 } // namespace gles2
430 } // namespace gpu 409 } // namespace gpu
431 410
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698