OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |