| 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 |