| 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 #include "ui/gl/gl_version_info.h" | 9 #include "ui/gl/gl_version_info.h" |
| 10 | 10 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 "}"; | 96 "}"; |
| 97 | 97 |
| 98 // A valid shader should be successfully translated. | 98 // A valid shader should be successfully translated. |
| 99 std::string info_log, translated_source; | 99 std::string info_log, translated_source; |
| 100 int shader_version; | 100 int shader_version; |
| 101 AttributeMap attrib_map; | 101 AttributeMap attrib_map; |
| 102 UniformMap uniform_map; | 102 UniformMap uniform_map; |
| 103 VaryingMap varying_map; | 103 VaryingMap varying_map; |
| 104 InterfaceBlockMap interface_block_map; | 104 InterfaceBlockMap interface_block_map; |
| 105 OutputVariableList output_variable_list; | 105 OutputVariableList output_variable_list; |
| 106 NameMap name_map; | |
| 107 EXPECT_TRUE(vertex_translator_->Translate( | 106 EXPECT_TRUE(vertex_translator_->Translate( |
| 108 shader, &info_log, &translated_source, &shader_version, &attrib_map, | 107 shader, &info_log, &translated_source, &shader_version, &attrib_map, |
| 109 &uniform_map, &varying_map, &interface_block_map, &output_variable_list, | 108 &uniform_map, &varying_map, &interface_block_map, &output_variable_list)); |
| 110 &name_map)); | |
| 111 | 109 |
| 112 // Info log must be NULL. | 110 // Info log must be NULL. |
| 113 EXPECT_TRUE(info_log.empty()); | 111 EXPECT_TRUE(info_log.empty()); |
| 114 // Translated shader must be valid and non-empty. | 112 // Translated shader must be valid and non-empty. |
| 115 ASSERT_FALSE(translated_source.empty()); | 113 ASSERT_FALSE(translated_source.empty()); |
| 116 // There should be no attributes, uniforms, and only one built-in | 114 // There should be no attributes, uniforms, and only one built-in |
| 117 // varying: gl_Position. | 115 // varying: gl_Position. |
| 118 EXPECT_TRUE(attrib_map.empty()); | 116 EXPECT_TRUE(attrib_map.empty()); |
| 119 EXPECT_TRUE(uniform_map.empty()); | 117 EXPECT_TRUE(uniform_map.empty()); |
| 120 EXPECT_TRUE(interface_block_map.empty()); | 118 EXPECT_TRUE(interface_block_map.empty()); |
| 121 EXPECT_EQ(1u, varying_map.size()); | 119 EXPECT_EQ(1u, varying_map.size()); |
| 122 EXPECT_TRUE(output_variable_list.empty()); | 120 EXPECT_TRUE(output_variable_list.empty()); |
| 123 // There should be no name mapping. | |
| 124 EXPECT_TRUE(name_map.empty()); | |
| 125 } | 121 } |
| 126 | 122 |
| 127 TEST_F(ShaderTranslatorTest, InvalidVertexShader) { | 123 TEST_F(ShaderTranslatorTest, InvalidVertexShader) { |
| 128 const char* bad_shader = "foo-bar"; | 124 const char* bad_shader = "foo-bar"; |
| 129 const char* good_shader = | 125 const char* good_shader = |
| 130 "void main() {\n" | 126 "void main() {\n" |
| 131 " gl_Position = vec4(1.0);\n" | 127 " gl_Position = vec4(1.0);\n" |
| 132 "}"; | 128 "}"; |
| 133 | 129 |
| 134 // An invalid shader should fail. | 130 // An invalid shader should fail. |
| 135 std::string info_log, translated_source; | 131 std::string info_log, translated_source; |
| 136 int shader_version; | 132 int shader_version; |
| 137 AttributeMap attrib_map; | 133 AttributeMap attrib_map; |
| 138 UniformMap uniform_map; | 134 UniformMap uniform_map; |
| 139 VaryingMap varying_map; | 135 VaryingMap varying_map; |
| 140 InterfaceBlockMap interface_block_map; | 136 InterfaceBlockMap interface_block_map; |
| 141 OutputVariableList output_variable_list; | 137 OutputVariableList output_variable_list; |
| 142 NameMap name_map; | |
| 143 EXPECT_FALSE(vertex_translator_->Translate( | 138 EXPECT_FALSE(vertex_translator_->Translate( |
| 144 bad_shader, &info_log, &translated_source, &shader_version, &attrib_map, | 139 bad_shader, &info_log, &translated_source, &shader_version, &attrib_map, |
| 145 &uniform_map, &varying_map, &interface_block_map, &output_variable_list, | 140 &uniform_map, &varying_map, &interface_block_map, &output_variable_list)); |
| 146 &name_map)); | |
| 147 // Info log must be valid and non-empty. | 141 // Info log must be valid and non-empty. |
| 148 ASSERT_FALSE(info_log.empty()); | 142 ASSERT_FALSE(info_log.empty()); |
| 149 // Translated shader must be NULL. | 143 // Translated shader must be NULL. |
| 150 EXPECT_TRUE(translated_source.empty()); | 144 EXPECT_TRUE(translated_source.empty()); |
| 151 // There should be no attributes, uniforms, varyings, interface block or | 145 // There should be no attributes, uniforms, varyings, interface block or |
| 152 // name mapping. | 146 // name mapping. |
| 153 EXPECT_TRUE(attrib_map.empty()); | 147 EXPECT_TRUE(attrib_map.empty()); |
| 154 EXPECT_TRUE(uniform_map.empty()); | 148 EXPECT_TRUE(uniform_map.empty()); |
| 155 EXPECT_TRUE(varying_map.empty()); | 149 EXPECT_TRUE(varying_map.empty()); |
| 156 EXPECT_TRUE(interface_block_map.empty()); | 150 EXPECT_TRUE(interface_block_map.empty()); |
| 157 EXPECT_TRUE(output_variable_list.empty()); | 151 EXPECT_TRUE(output_variable_list.empty()); |
| 158 EXPECT_TRUE(name_map.empty()); | |
| 159 | 152 |
| 160 // Try a good shader after bad. | 153 // Try a good shader after bad. |
| 161 info_log.clear(); | 154 info_log.clear(); |
| 162 EXPECT_TRUE(vertex_translator_->Translate( | 155 EXPECT_TRUE(vertex_translator_->Translate( |
| 163 good_shader, &info_log, &translated_source, &shader_version, &attrib_map, | 156 good_shader, &info_log, &translated_source, &shader_version, &attrib_map, |
| 164 &uniform_map, &varying_map, &interface_block_map, &output_variable_list, | 157 &uniform_map, &varying_map, &interface_block_map, &output_variable_list)); |
| 165 &name_map)); | |
| 166 EXPECT_TRUE(info_log.empty()); | 158 EXPECT_TRUE(info_log.empty()); |
| 167 EXPECT_FALSE(translated_source.empty()); | 159 EXPECT_FALSE(translated_source.empty()); |
| 168 EXPECT_TRUE(interface_block_map.empty()); | 160 EXPECT_TRUE(interface_block_map.empty()); |
| 169 } | 161 } |
| 170 | 162 |
| 171 TEST_F(ShaderTranslatorTest, ValidFragmentShader) { | 163 TEST_F(ShaderTranslatorTest, ValidFragmentShader) { |
| 172 const char* shader = | 164 const char* shader = |
| 173 "void main() {\n" | 165 "void main() {\n" |
| 174 " gl_FragColor = vec4(1.0);\n" | 166 " gl_FragColor = vec4(1.0);\n" |
| 175 "}"; | 167 "}"; |
| 176 | 168 |
| 177 // A valid shader should be successfully translated. | 169 // A valid shader should be successfully translated. |
| 178 std::string info_log, translated_source; | 170 std::string info_log, translated_source; |
| 179 int shader_version; | 171 int shader_version; |
| 180 AttributeMap attrib_map; | 172 AttributeMap attrib_map; |
| 181 UniformMap uniform_map; | 173 UniformMap uniform_map; |
| 182 VaryingMap varying_map; | 174 VaryingMap varying_map; |
| 183 InterfaceBlockMap interface_block_map; | 175 InterfaceBlockMap interface_block_map; |
| 184 OutputVariableList output_variable_list; | 176 OutputVariableList output_variable_list; |
| 185 NameMap name_map; | |
| 186 EXPECT_TRUE(fragment_translator_->Translate( | 177 EXPECT_TRUE(fragment_translator_->Translate( |
| 187 shader, &info_log, &translated_source, &shader_version, &attrib_map, | 178 shader, &info_log, &translated_source, &shader_version, &attrib_map, |
| 188 &uniform_map, &varying_map, &interface_block_map, &output_variable_list, | 179 &uniform_map, &varying_map, &interface_block_map, &output_variable_list)); |
| 189 &name_map)); | |
| 190 // Info log must be NULL. | 180 // Info log must be NULL. |
| 191 EXPECT_TRUE(info_log.empty()); | 181 EXPECT_TRUE(info_log.empty()); |
| 192 // Translated shader must be valid and non-empty. | 182 // Translated shader must be valid and non-empty. |
| 193 ASSERT_FALSE(translated_source.empty()); | 183 ASSERT_FALSE(translated_source.empty()); |
| 194 // There should be no attributes, uniforms, varyings, interface block or | 184 // There should be no attributes, uniforms, varyings, interface block or |
| 195 // name mapping. | 185 // name mapping. |
| 196 EXPECT_TRUE(attrib_map.empty()); | 186 EXPECT_TRUE(attrib_map.empty()); |
| 197 EXPECT_TRUE(uniform_map.empty()); | 187 EXPECT_TRUE(uniform_map.empty()); |
| 198 EXPECT_TRUE(varying_map.empty()); | 188 EXPECT_TRUE(varying_map.empty()); |
| 199 EXPECT_TRUE(interface_block_map.empty()); | 189 EXPECT_TRUE(interface_block_map.empty()); |
| 200 EXPECT_TRUE(name_map.empty()); | |
| 201 // gl_FragColor. | 190 // gl_FragColor. |
| 202 EXPECT_EQ(1u, output_variable_list.size()); | 191 EXPECT_EQ(1u, output_variable_list.size()); |
| 203 } | 192 } |
| 204 | 193 |
| 205 TEST_F(ShaderTranslatorTest, InvalidFragmentShader) { | 194 TEST_F(ShaderTranslatorTest, InvalidFragmentShader) { |
| 206 const char* shader = "foo-bar"; | 195 const char* shader = "foo-bar"; |
| 207 | 196 |
| 208 std::string info_log, translated_source; | 197 std::string info_log, translated_source; |
| 209 int shader_version; | 198 int shader_version; |
| 210 AttributeMap attrib_map; | 199 AttributeMap attrib_map; |
| 211 UniformMap uniform_map; | 200 UniformMap uniform_map; |
| 212 VaryingMap varying_map; | 201 VaryingMap varying_map; |
| 213 InterfaceBlockMap interface_block_map; | 202 InterfaceBlockMap interface_block_map; |
| 214 OutputVariableList output_variable_list; | 203 OutputVariableList output_variable_list; |
| 215 NameMap name_map; | |
| 216 // An invalid shader should fail. | 204 // An invalid shader should fail. |
| 217 EXPECT_FALSE(fragment_translator_->Translate( | 205 EXPECT_FALSE(fragment_translator_->Translate( |
| 218 shader, &info_log, &translated_source, &shader_version, &attrib_map, | 206 shader, &info_log, &translated_source, &shader_version, &attrib_map, |
| 219 &uniform_map, &varying_map, &interface_block_map, &output_variable_list, | 207 &uniform_map, &varying_map, &interface_block_map, &output_variable_list)); |
| 220 &name_map)); | |
| 221 // Info log must be valid and non-empty. | 208 // Info log must be valid and non-empty. |
| 222 EXPECT_FALSE(info_log.empty()); | 209 EXPECT_FALSE(info_log.empty()); |
| 223 // Translated shader must be NULL. | 210 // Translated shader must be NULL. |
| 224 EXPECT_TRUE(translated_source.empty()); | 211 EXPECT_TRUE(translated_source.empty()); |
| 225 // There should be no attributes, uniforms, varyings, interface block or | 212 // There should be no attributes, uniforms, varyings, interface block or |
| 226 // name mapping. | 213 // name mapping. |
| 227 EXPECT_TRUE(attrib_map.empty()); | 214 EXPECT_TRUE(attrib_map.empty()); |
| 228 EXPECT_TRUE(uniform_map.empty()); | 215 EXPECT_TRUE(uniform_map.empty()); |
| 229 EXPECT_TRUE(varying_map.empty()); | 216 EXPECT_TRUE(varying_map.empty()); |
| 230 EXPECT_TRUE(output_variable_list.empty()); | 217 EXPECT_TRUE(output_variable_list.empty()); |
| 231 EXPECT_TRUE(name_map.empty()); | |
| 232 } | 218 } |
| 233 | 219 |
| 234 TEST_F(ShaderTranslatorTest, GetAttributes) { | 220 TEST_F(ShaderTranslatorTest, GetAttributes) { |
| 235 const char* shader = | 221 const char* shader = |
| 236 "attribute vec4 vPosition;\n" | 222 "attribute vec4 vPosition;\n" |
| 237 "void main() {\n" | 223 "void main() {\n" |
| 238 " gl_Position = vPosition;\n" | 224 " gl_Position = vPosition;\n" |
| 239 "}"; | 225 "}"; |
| 240 | 226 |
| 241 std::string info_log, translated_source; | 227 std::string info_log, translated_source; |
| 242 int shader_version; | 228 int shader_version; |
| 243 AttributeMap attrib_map; | 229 AttributeMap attrib_map; |
| 244 UniformMap uniform_map; | 230 UniformMap uniform_map; |
| 245 VaryingMap varying_map; | 231 VaryingMap varying_map; |
| 246 InterfaceBlockMap interface_block_map; | 232 InterfaceBlockMap interface_block_map; |
| 247 OutputVariableList output_variable_list; | 233 OutputVariableList output_variable_list; |
| 248 NameMap name_map; | |
| 249 EXPECT_TRUE(vertex_translator_->Translate( | 234 EXPECT_TRUE(vertex_translator_->Translate( |
| 250 shader, &info_log, &translated_source, &shader_version, &attrib_map, | 235 shader, &info_log, &translated_source, &shader_version, &attrib_map, |
| 251 &uniform_map, &varying_map, &interface_block_map, &output_variable_list, | 236 &uniform_map, &varying_map, &interface_block_map, &output_variable_list)); |
| 252 &name_map)); | |
| 253 // Info log must be NULL. | 237 // Info log must be NULL. |
| 254 EXPECT_TRUE(info_log.empty()); | 238 EXPECT_TRUE(info_log.empty()); |
| 255 // Translated shader must be valid and non-empty. | 239 // Translated shader must be valid and non-empty. |
| 256 EXPECT_FALSE(translated_source.empty()); | 240 EXPECT_FALSE(translated_source.empty()); |
| 257 // There should be no uniforms. | 241 // There should be no uniforms. |
| 258 EXPECT_TRUE(uniform_map.empty()); | 242 EXPECT_TRUE(uniform_map.empty()); |
| 259 // There should be no interface blocks. | 243 // There should be no interface blocks. |
| 260 EXPECT_TRUE(interface_block_map.empty()); | 244 EXPECT_TRUE(interface_block_map.empty()); |
| 261 // There should be one attribute with following characteristics: | 245 // There should be one attribute with following characteristics: |
| 262 // name:vPosition type:GL_FLOAT_VEC4 size:0. | 246 // name:vPosition type:GL_FLOAT_VEC4 size:0. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 282 " gl_FragColor = bar[0].foo.color[0] + bar[1].foo.color[0];\n" | 266 " gl_FragColor = bar[0].foo.color[0] + bar[1].foo.color[0];\n" |
| 283 "}"; | 267 "}"; |
| 284 | 268 |
| 285 std::string info_log, translated_source; | 269 std::string info_log, translated_source; |
| 286 int shader_version; | 270 int shader_version; |
| 287 AttributeMap attrib_map; | 271 AttributeMap attrib_map; |
| 288 UniformMap uniform_map; | 272 UniformMap uniform_map; |
| 289 VaryingMap varying_map; | 273 VaryingMap varying_map; |
| 290 InterfaceBlockMap interface_block_map; | 274 InterfaceBlockMap interface_block_map; |
| 291 OutputVariableList output_variable_list; | 275 OutputVariableList output_variable_list; |
| 292 NameMap name_map; | |
| 293 EXPECT_TRUE(fragment_translator_->Translate( | 276 EXPECT_TRUE(fragment_translator_->Translate( |
| 294 shader, &info_log, &translated_source, &shader_version, &attrib_map, | 277 shader, &info_log, &translated_source, &shader_version, &attrib_map, |
| 295 &uniform_map, &varying_map, &interface_block_map, &output_variable_list, | 278 &uniform_map, &varying_map, &interface_block_map, &output_variable_list)); |
| 296 &name_map)); | |
| 297 // Info log must be NULL. | 279 // Info log must be NULL. |
| 298 EXPECT_TRUE(info_log.empty()); | 280 EXPECT_TRUE(info_log.empty()); |
| 299 // Translated shader must be valid and non-empty. | 281 // Translated shader must be valid and non-empty. |
| 300 EXPECT_FALSE(translated_source.empty()); | 282 EXPECT_FALSE(translated_source.empty()); |
| 301 // There should be no attributes. | 283 // There should be no attributes. |
| 302 EXPECT_TRUE(attrib_map.empty()); | 284 EXPECT_TRUE(attrib_map.empty()); |
| 303 // There should be no interface blocks. | 285 // There should be no interface blocks. |
| 304 EXPECT_TRUE(interface_block_map.empty()); | 286 EXPECT_TRUE(interface_block_map.empty()); |
| 305 // There should be two uniforms with following characteristics: | 287 // There should be two uniforms with following characteristics: |
| 306 // 1. name:bar[0].foo.color[0] type:GL_FLOAT_VEC4 size:1 | 288 // 1. name:bar[0].foo.color[0] type:GL_FLOAT_VEC4 size:1 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 " oColor = vec4(red * R, green * green, blue * B, 1.0);\n" | 332 " oColor = vec4(red * R, green * green, blue * B, 1.0);\n" |
| 351 "}"; | 333 "}"; |
| 352 | 334 |
| 353 std::string info_log, translated_source; | 335 std::string info_log, translated_source; |
| 354 int shader_version; | 336 int shader_version; |
| 355 AttributeMap attrib_map; | 337 AttributeMap attrib_map; |
| 356 UniformMap uniform_map; | 338 UniformMap uniform_map; |
| 357 VaryingMap varying_map; | 339 VaryingMap varying_map; |
| 358 InterfaceBlockMap interface_block_map; | 340 InterfaceBlockMap interface_block_map; |
| 359 OutputVariableList output_variable_list; | 341 OutputVariableList output_variable_list; |
| 360 NameMap name_map; | |
| 361 EXPECT_FALSE(fragment_translator_->Translate( | 342 EXPECT_FALSE(fragment_translator_->Translate( |
| 362 shader, &info_log, &translated_source, &shader_version, &attrib_map, | 343 shader, &info_log, &translated_source, &shader_version, &attrib_map, |
| 363 &uniform_map, &varying_map, &interface_block_map, &output_variable_list, | 344 &uniform_map, &varying_map, &interface_block_map, &output_variable_list)); |
| 364 &name_map)); | |
| 365 // Info log must be valid and non-empty. | 345 // Info log must be valid and non-empty. |
| 366 ASSERT_FALSE(info_log.empty()); | 346 ASSERT_FALSE(info_log.empty()); |
| 367 // Translated shader must be NULL. | 347 // Translated shader must be NULL. |
| 368 EXPECT_TRUE(translated_source.empty()); | 348 EXPECT_TRUE(translated_source.empty()); |
| 369 // There should be no attributes, uniforms, varyings, interface block or | 349 // There should be no attributes, uniforms, varyings, interface block or |
| 370 // name mapping. | 350 // name mapping. |
| 371 EXPECT_TRUE(attrib_map.empty()); | 351 EXPECT_TRUE(attrib_map.empty()); |
| 372 EXPECT_TRUE(uniform_map.empty()); | 352 EXPECT_TRUE(uniform_map.empty()); |
| 373 EXPECT_TRUE(varying_map.empty()); | 353 EXPECT_TRUE(varying_map.empty()); |
| 374 EXPECT_TRUE(interface_block_map.empty()); | 354 EXPECT_TRUE(interface_block_map.empty()); |
| 375 EXPECT_TRUE(name_map.empty()); | |
| 376 } | 355 } |
| 377 | 356 |
| 378 TEST_F(ES3ShaderTranslatorTest, GetInterfaceBlocks) { | 357 TEST_F(ES3ShaderTranslatorTest, GetInterfaceBlocks) { |
| 379 const char* shader = | 358 const char* shader = |
| 380 "#version 300 es\n" | 359 "#version 300 es\n" |
| 381 "precision mediump float;\n" | 360 "precision mediump float;\n" |
| 382 "layout(location=0) out vec4 oColor;\n" | 361 "layout(location=0) out vec4 oColor;\n" |
| 383 "uniform Color {\n" | 362 "uniform Color {\n" |
| 384 " float red;\n" | 363 " float red;\n" |
| 385 " float green;\n" | 364 " float green;\n" |
| 386 " float blue;\n" | 365 " float blue;\n" |
| 387 "};\n" | 366 "};\n" |
| 388 "void main() {\n" | 367 "void main() {\n" |
| 389 " oColor = vec4(red, green, blue, 1.0);\n" | 368 " oColor = vec4(red, green, blue, 1.0);\n" |
| 390 "}"; | 369 "}"; |
| 391 | 370 |
| 392 std::string info_log, translated_source; | 371 std::string info_log, translated_source; |
| 393 int shader_version; | 372 int shader_version; |
| 394 AttributeMap attrib_map; | 373 AttributeMap attrib_map; |
| 395 UniformMap uniform_map; | 374 UniformMap uniform_map; |
| 396 VaryingMap varying_map; | 375 VaryingMap varying_map; |
| 397 InterfaceBlockMap interface_block_map; | 376 InterfaceBlockMap interface_block_map; |
| 398 OutputVariableList output_variable_list; | 377 OutputVariableList output_variable_list; |
| 399 NameMap name_map; | |
| 400 EXPECT_TRUE(fragment_translator_->Translate( | 378 EXPECT_TRUE(fragment_translator_->Translate( |
| 401 shader, &info_log, &translated_source, &shader_version, &attrib_map, | 379 shader, &info_log, &translated_source, &shader_version, &attrib_map, |
| 402 &uniform_map, &varying_map, &interface_block_map, &output_variable_list, | 380 &uniform_map, &varying_map, &interface_block_map, &output_variable_list)); |
| 403 &name_map)); | |
| 404 // Info log must be NULL. | 381 // Info log must be NULL. |
| 405 EXPECT_TRUE(info_log.empty()); | 382 EXPECT_TRUE(info_log.empty()); |
| 406 // Translated shader must be valid and non-empty. | 383 // Translated shader must be valid and non-empty. |
| 407 EXPECT_FALSE(translated_source.empty()); | 384 EXPECT_FALSE(translated_source.empty()); |
| 408 // There should be no attributes. | 385 // There should be no attributes. |
| 409 EXPECT_TRUE(attrib_map.empty()); | 386 EXPECT_TRUE(attrib_map.empty()); |
| 410 // There should be one block in interface_block_map | 387 // There should be one block in interface_block_map |
| 411 EXPECT_EQ(1u, interface_block_map.size()); | 388 EXPECT_EQ(1u, interface_block_map.size()); |
| 412 InterfaceBlockMap::const_iterator iter; | 389 InterfaceBlockMap::const_iterator iter; |
| 413 for (iter = interface_block_map.begin(); | 390 for (iter = interface_block_map.begin(); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 std::string translated_source; | 458 std::string translated_source; |
| 482 int shader_version; | 459 int shader_version; |
| 483 { | 460 { |
| 484 const char* kShader = | 461 const char* kShader = |
| 485 "attribute vec4 vPosition;\n" | 462 "attribute vec4 vPosition;\n" |
| 486 "void main() {\n" | 463 "void main() {\n" |
| 487 "}"; | 464 "}"; |
| 488 | 465 |
| 489 EXPECT_TRUE(vertex_translator->Translate( | 466 EXPECT_TRUE(vertex_translator->Translate( |
| 490 kShader, nullptr, &translated_source, &shader_version, nullptr, nullptr, | 467 kShader, nullptr, &translated_source, &shader_version, nullptr, nullptr, |
| 491 nullptr, nullptr, nullptr, nullptr)); | 468 nullptr, nullptr, nullptr)); |
| 492 EXPECT_TRUE(translated_source.find("#version") == std::string::npos); | 469 EXPECT_TRUE(translated_source.find("#version") == std::string::npos); |
| 493 if (translated_source.find("gl_Position =") == std::string::npos) { | 470 if (translated_source.find("gl_Position =") == std::string::npos) { |
| 494 ADD_FAILURE() << "Did not find gl_Position initialization."; | 471 ADD_FAILURE() << "Did not find gl_Position initialization."; |
| 495 LOG(ERROR) << "Generated output:\n" << translated_source; | 472 LOG(ERROR) << "Generated output:\n" << translated_source; |
| 496 } | 473 } |
| 497 } | 474 } |
| 498 { | 475 { |
| 499 const char* kShader = | 476 const char* kShader = |
| 500 "#pragma STDGL invariant(all)\n" | 477 "#pragma STDGL invariant(all)\n" |
| 501 "precision mediump float;\n" | 478 "precision mediump float;\n" |
| 502 "varying vec4 v_varying;\n" | 479 "varying vec4 v_varying;\n" |
| 503 "void main() {\n" | 480 "void main() {\n" |
| 504 " gl_FragColor = v_varying;\n" | 481 " gl_FragColor = v_varying;\n" |
| 505 "}\n"; | 482 "}\n"; |
| 506 | 483 |
| 507 EXPECT_TRUE(fragment_translator->Translate( | 484 EXPECT_TRUE(fragment_translator->Translate( |
| 508 kShader, nullptr, &translated_source, &shader_version, nullptr, nullptr, | 485 kShader, nullptr, &translated_source, &shader_version, nullptr, nullptr, |
| 509 nullptr, nullptr, nullptr, nullptr)); | 486 nullptr, nullptr, nullptr)); |
| 510 EXPECT_TRUE(translated_source.find("#version 120") != std::string::npos); | 487 EXPECT_TRUE(translated_source.find("#version 120") != std::string::npos); |
| 511 if (translated_source.find("#pragma STDGL invariant(all)") != | 488 if (translated_source.find("#pragma STDGL invariant(all)") != |
| 512 std::string::npos) { | 489 std::string::npos) { |
| 513 ADD_FAILURE() << "Found forbidden pragma."; | 490 ADD_FAILURE() << "Found forbidden pragma."; |
| 514 LOG(ERROR) << "Generated output:\n" << translated_source; | 491 LOG(ERROR) << "Generated output:\n" << translated_source; |
| 515 } | 492 } |
| 516 } | 493 } |
| 517 } | 494 } |
| 518 | 495 |
| 519 TEST_P(ShaderTranslatorOutputVersionTest, HasCorrectOutputGLSLVersion) { | 496 TEST_P(ShaderTranslatorOutputVersionTest, HasCorrectOutputGLSLVersion) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 537 ShShaderOutput shader_output_language = | 514 ShShaderOutput shader_output_language = |
| 538 ShaderTranslator::GetShaderOutputLanguageForContext( | 515 ShaderTranslator::GetShaderOutputLanguageForContext( |
| 539 output_context_version); | 516 output_context_version); |
| 540 ASSERT_TRUE(translator->Init(GL_VERTEX_SHADER, SH_GLES2_SPEC, &resources, | 517 ASSERT_TRUE(translator->Init(GL_VERTEX_SHADER, SH_GLES2_SPEC, &resources, |
| 541 shader_output_language, compile_options, false)); | 518 shader_output_language, compile_options, false)); |
| 542 | 519 |
| 543 std::string translated_source; | 520 std::string translated_source; |
| 544 int shader_version; | 521 int shader_version; |
| 545 EXPECT_TRUE(translator->Translate(kShader, nullptr, &translated_source, | 522 EXPECT_TRUE(translator->Translate(kShader, nullptr, &translated_source, |
| 546 &shader_version, nullptr, nullptr, nullptr, | 523 &shader_version, nullptr, nullptr, nullptr, |
| 547 nullptr, nullptr, nullptr)); | 524 nullptr, nullptr)); |
| 548 | 525 |
| 549 std::string expected_version_directive = testing::get<1>(GetParam()); | 526 std::string expected_version_directive = testing::get<1>(GetParam()); |
| 550 if (expected_version_directive.empty()) { | 527 if (expected_version_directive.empty()) { |
| 551 EXPECT_TRUE(translated_source.find("#version") == std::string::npos) | 528 EXPECT_TRUE(translated_source.find("#version") == std::string::npos) |
| 552 << "Translation was:\n" << translated_source; | 529 << "Translation was:\n" << translated_source; |
| 553 } else { | 530 } else { |
| 554 EXPECT_TRUE(translated_source.find(expected_version_directive) != | 531 EXPECT_TRUE(translated_source.find(expected_version_directive) != |
| 555 std::string::npos) | 532 std::string::npos) |
| 556 << "Translation was:\n" << translated_source; | 533 << "Translation was:\n" << translated_source; |
| 557 } | 534 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 INSTANTIATE_TEST_CASE_P(OpenGLESContexts, | 590 INSTANTIATE_TEST_CASE_P(OpenGLESContexts, |
| 614 ShaderTranslatorOutputVersionTest, | 591 ShaderTranslatorOutputVersionTest, |
| 615 testing::Values(make_gl_glsl_tuple("opengl es 2.0", ""), | 592 testing::Values(make_gl_glsl_tuple("opengl es 2.0", ""), |
| 616 make_gl_glsl_tuple("opengl es 3.0", ""), | 593 make_gl_glsl_tuple("opengl es 3.0", ""), |
| 617 make_gl_glsl_tuple("opengl es 3.1", ""), | 594 make_gl_glsl_tuple("opengl es 3.1", ""), |
| 618 make_gl_glsl_tuple("opengl es 3.2", | 595 make_gl_glsl_tuple("opengl es 3.2", |
| 619 ""))); | 596 ""))); |
| 620 | 597 |
| 621 } // namespace gles2 | 598 } // namespace gles2 |
| 622 } // namespace gpu | 599 } // namespace gpu |
| OLD | NEW |