| 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 "gpu/command_buffer/service/memory_program_cache.h" | 5 #include "gpu/command_buffer/service/memory_program_cache.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 8 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| 9 #include "gpu/command_buffer/service/gl_utils.h" | 9 #include "gpu/command_buffer/service/gl_utils.h" |
| 10 #include "gpu/command_buffer/service/gpu_service_test.h" | 10 #include "gpu/command_buffer/service/gpu_service_test.h" |
| 11 #include "gpu/command_buffer/service/shader_manager.h" | 11 #include "gpu/command_buffer/service/shader_manager.h" |
| 12 #include "gpu/command_buffer/service/shader_translator.h" | 12 #include "gpu/command_buffer/service/shader_translator.h" |
| 13 #include "gpu/command_buffer/service/test_helper.h" | 13 #include "gpu/command_buffer/service/test_helper.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "ui/gl/gl_bindings.h" | 15 #include "ui/gl/gl_bindings.h" |
| 16 #include "ui/gl/gl_mock.h" | 16 #include "ui/gl/gl_mock.h" |
| 17 | 17 |
| 18 using ::testing::_; | 18 using ::testing::_; |
| 19 using ::testing::ElementsAreArray; | 19 using ::testing::ElementsAreArray; |
| 20 using ::testing::Invoke; | 20 using ::testing::Invoke; |
| 21 using ::testing::SetArgPointee; | 21 using ::testing::SetArgPointee; |
| 22 using ::testing::SetArrayArgument; | 22 using ::testing::SetArrayArgument; |
| 23 | 23 |
| 24 namespace { | |
| 25 typedef gpu::gles2::ShaderTranslator::VariableMap VariableMap; | |
| 26 } // anonymous namespace | |
| 27 | |
| 28 namespace gpu { | 24 namespace gpu { |
| 29 namespace gles2 { | 25 namespace gles2 { |
| 30 | 26 |
| 31 class ProgramBinaryEmulator { | 27 class ProgramBinaryEmulator { |
| 32 public: | 28 public: |
| 33 ProgramBinaryEmulator(GLsizei length, | 29 ProgramBinaryEmulator(GLsizei length, |
| 34 GLenum format, | 30 GLenum format, |
| 35 const char* binary) | 31 const char* binary) |
| 36 : length_(length), | 32 : length_(length), |
| 37 format_(format), | 33 format_(format), |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 | 94 |
| 99 vertex_shader_ = shader_manager_.CreateShader(kVertexShaderClientId, | 95 vertex_shader_ = shader_manager_.CreateShader(kVertexShaderClientId, |
| 100 kVertexShaderServiceId, | 96 kVertexShaderServiceId, |
| 101 GL_VERTEX_SHADER); | 97 GL_VERTEX_SHADER); |
| 102 fragment_shader_ = shader_manager_.CreateShader( | 98 fragment_shader_ = shader_manager_.CreateShader( |
| 103 kFragmentShaderClientId, | 99 kFragmentShaderClientId, |
| 104 kFragmentShaderServiceId, | 100 kFragmentShaderServiceId, |
| 105 GL_FRAGMENT_SHADER); | 101 GL_FRAGMENT_SHADER); |
| 106 ASSERT_TRUE(vertex_shader_ != NULL); | 102 ASSERT_TRUE(vertex_shader_ != NULL); |
| 107 ASSERT_TRUE(fragment_shader_ != NULL); | 103 ASSERT_TRUE(fragment_shader_ != NULL); |
| 108 typedef ShaderTranslatorInterface::VariableInfo VariableInfo; | 104 AttributeMap vertex_attrib_map; |
| 109 typedef ShaderTranslator::VariableMap VariableMap; | 105 UniformMap vertex_uniform_map; |
| 110 VariableMap vertex_attrib_map; | 106 VaryingMap vertex_varying_map; |
| 111 VariableMap vertex_uniform_map; | 107 AttributeMap fragment_attrib_map; |
| 112 VariableMap vertex_varying_map; | 108 UniformMap fragment_uniform_map; |
| 113 VariableMap fragment_attrib_map; | 109 VaryingMap fragment_varying_map; |
| 114 VariableMap fragment_uniform_map; | |
| 115 VariableMap fragment_varying_map; | |
| 116 | 110 |
| 117 vertex_attrib_map["a"] = VariableInfo(1, 34, SH_PRECISION_LOWP, 0, "a"); | 111 vertex_attrib_map["a"] = TestHelper::ConstructAttribute( |
| 118 vertex_uniform_map["a"] = VariableInfo(0, 10, SH_PRECISION_MEDIUMP, 1, "a"); | 112 GL_FLOAT_VEC2, 34, GL_LOW_FLOAT, false, "a"); |
| 119 vertex_uniform_map["b"] = VariableInfo(2, 3114, SH_PRECISION_HIGHP, 1, "b"); | 113 vertex_uniform_map["a"] = TestHelper::ConstructUniform( |
| 120 vertex_varying_map["c"] = VariableInfo(3, 2, SH_PRECISION_HIGHP, 1, "c"); | 114 GL_FLOAT, 10, GL_MEDIUM_FLOAT, true, "a"); |
| 121 fragment_attrib_map["jjjbb"] = | 115 vertex_uniform_map["b"] = TestHelper::ConstructUniform( |
| 122 VariableInfo(463, 1114, SH_PRECISION_MEDIUMP, 0, "jjjbb"); | 116 GL_FLOAT_VEC3, 3114, GL_HIGH_FLOAT, true, "b"); |
| 123 fragment_uniform_map["k"] = | 117 vertex_varying_map["c"] = TestHelper::ConstructVarying( |
| 124 VariableInfo(10, 34413, SH_PRECISION_MEDIUMP, 1, "k"); | 118 GL_FLOAT_VEC4, 2, GL_HIGH_FLOAT, true, "c"); |
| 125 fragment_varying_map["c"] = VariableInfo(3, 2, SH_PRECISION_HIGHP, 1, "c"); | 119 fragment_attrib_map["jjjbb"] = TestHelper::ConstructAttribute( |
| 120 GL_FLOAT_MAT4, 1114, GL_MEDIUM_FLOAT, false, "jjjbb"); |
| 121 fragment_uniform_map["k"] = TestHelper::ConstructUniform( |
| 122 GL_FLOAT_MAT2, 34413, GL_MEDIUM_FLOAT, true, "k"); |
| 123 fragment_varying_map["c"] = TestHelper::ConstructVarying( |
| 124 GL_FLOAT_VEC4, 2, GL_HIGH_FLOAT, true, "c"); |
| 126 | 125 |
| 127 vertex_shader_->set_source("bbbalsldkdkdkd"); | 126 vertex_shader_->set_source("bbbalsldkdkdkd"); |
| 128 fragment_shader_->set_source("bbbal sldkdkdkas 134 ad"); | 127 fragment_shader_->set_source("bbbal sldkdkdkas 134 ad"); |
| 129 | 128 |
| 130 TestHelper::SetShaderStates( | 129 TestHelper::SetShaderStates( |
| 131 gl_.get(), vertex_shader_, true, NULL, NULL, | 130 gl_.get(), vertex_shader_, true, NULL, NULL, |
| 132 &vertex_attrib_map, &vertex_uniform_map, &vertex_varying_map, | 131 &vertex_attrib_map, &vertex_uniform_map, &vertex_varying_map, |
| 133 NULL); | 132 NULL); |
| 134 TestHelper::SetShaderStates( | 133 TestHelper::SetShaderStates( |
| 135 gl_.get(), fragment_shader_, true, NULL, NULL, | 134 gl_.get(), fragment_shader_, true, NULL, NULL, |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 } | 253 } |
| 255 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); | 254 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); |
| 256 | 255 |
| 257 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); | 256 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); |
| 258 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, | 257 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, |
| 259 fragment_shader_, NULL, NULL, | 258 fragment_shader_, NULL, NULL, |
| 260 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 259 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
| 261 base::Unretained(this))); | 260 base::Unretained(this))); |
| 262 EXPECT_EQ(1, shader_cache_count()); | 261 EXPECT_EQ(1, shader_cache_count()); |
| 263 | 262 |
| 264 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); | 263 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); |
| 265 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); | 264 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); |
| 266 VariableMap vertex_varying_map = vertex_shader_->varying_map(); | 265 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); |
| 267 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); | 266 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); |
| 268 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); | 267 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); |
| 269 VariableMap fragment_varying_map = fragment_shader_->varying_map(); | 268 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); |
| 270 | 269 |
| 271 vertex_shader_->set_attrib_map(VariableMap()); | 270 vertex_shader_->set_attrib_map(AttributeMap()); |
| 272 vertex_shader_->set_uniform_map(VariableMap()); | 271 vertex_shader_->set_uniform_map(UniformMap()); |
| 273 vertex_shader_->set_varying_map(VariableMap()); | 272 vertex_shader_->set_varying_map(VaryingMap()); |
| 274 fragment_shader_->set_attrib_map(VariableMap()); | 273 fragment_shader_->set_attrib_map(AttributeMap()); |
| 275 fragment_shader_->set_uniform_map(VariableMap()); | 274 fragment_shader_->set_uniform_map(UniformMap()); |
| 276 fragment_shader_->set_varying_map(VariableMap()); | 275 fragment_shader_->set_varying_map(VaryingMap()); |
| 277 | 276 |
| 278 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); | 277 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); |
| 279 | 278 |
| 280 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( | 279 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( |
| 281 kProgramId, | 280 kProgramId, |
| 282 vertex_shader_, | 281 vertex_shader_, |
| 283 NULL, | 282 NULL, |
| 284 fragment_shader_, | 283 fragment_shader_, |
| 285 NULL, | 284 NULL, |
| 286 NULL, | 285 NULL, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 309 } | 308 } |
| 310 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); | 309 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); |
| 311 | 310 |
| 312 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); | 311 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); |
| 313 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, | 312 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, |
| 314 fragment_shader_, NULL, NULL, | 313 fragment_shader_, NULL, NULL, |
| 315 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 314 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
| 316 base::Unretained(this))); | 315 base::Unretained(this))); |
| 317 EXPECT_EQ(1, shader_cache_count()); | 316 EXPECT_EQ(1, shader_cache_count()); |
| 318 | 317 |
| 319 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); | 318 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); |
| 320 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); | 319 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); |
| 321 VariableMap vertex_varying_map = vertex_shader_->varying_map(); | 320 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); |
| 322 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); | 321 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); |
| 323 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); | 322 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); |
| 324 VariableMap fragment_varying_map = fragment_shader_->varying_map(); | 323 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); |
| 325 | 324 |
| 326 vertex_shader_->set_attrib_map(VariableMap()); | 325 vertex_shader_->set_attrib_map(AttributeMap()); |
| 327 vertex_shader_->set_uniform_map(VariableMap()); | 326 vertex_shader_->set_uniform_map(UniformMap()); |
| 328 vertex_shader_->set_varying_map(VariableMap()); | 327 vertex_shader_->set_varying_map(VaryingMap()); |
| 329 fragment_shader_->set_attrib_map(VariableMap()); | 328 fragment_shader_->set_attrib_map(AttributeMap()); |
| 330 fragment_shader_->set_uniform_map(VariableMap()); | 329 fragment_shader_->set_uniform_map(UniformMap()); |
| 331 fragment_shader_->set_varying_map(VariableMap()); | 330 fragment_shader_->set_varying_map(VaryingMap()); |
| 332 | 331 |
| 333 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); | 332 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); |
| 334 | 333 |
| 335 cache_->Clear(); | 334 cache_->Clear(); |
| 336 cache_->LoadProgram(shader_cache_shader()); | 335 cache_->LoadProgram(shader_cache_shader()); |
| 337 | 336 |
| 338 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( | 337 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( |
| 339 kProgramId, | 338 kProgramId, |
| 340 vertex_shader_, | 339 vertex_shader_, |
| 341 NULL, | 340 NULL, |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 NULL, | 626 NULL, |
| 628 fragment_shader_, | 627 fragment_shader_, |
| 629 NULL, | 628 NULL, |
| 630 NULL, | 629 NULL, |
| 631 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 630 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
| 632 base::Unretained(this)))); | 631 base::Unretained(this)))); |
| 633 } | 632 } |
| 634 | 633 |
| 635 } // namespace gles2 | 634 } // namespace gles2 |
| 636 } // namespace gpu | 635 } // namespace gpu |
| OLD | NEW |