| 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/shader_manager.h" | 10 #include "gpu/command_buffer/service/shader_manager.h" |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 | 197 |
| 198 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); | 198 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); |
| 199 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, fragment_shader_, NULL, | 199 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, fragment_shader_, NULL, |
| 200 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 200 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
| 201 base::Unretained(this))); | 201 base::Unretained(this))); |
| 202 | 202 |
| 203 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( | 203 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( |
| 204 *vertex_shader_->deferred_compilation_source(), | 204 *vertex_shader_->deferred_compilation_source(), |
| 205 *fragment_shader_->deferred_compilation_source(), | 205 *fragment_shader_->deferred_compilation_source(), |
| 206 NULL)); | 206 NULL)); |
| 207 EXPECT_EQ(1, shader_cache_count()); | |
| 208 } | |
| 209 | |
| 210 TEST_F(MemoryProgramCacheTest, LoadProgram) { | |
| 211 const GLenum kFormat = 1; | |
| 212 const int kProgramId = 10; | |
| 213 const int kBinaryLength = 20; | |
| 214 char test_binary[kBinaryLength]; | |
| 215 for (int i = 0; i < kBinaryLength; ++i) { | |
| 216 test_binary[i] = i; | |
| 217 } | |
| 218 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); | |
| 219 | |
| 220 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); | |
| 221 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, fragment_shader_, NULL, | |
| 222 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | |
| 223 base::Unretained(this))); | |
| 224 | |
| 225 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( | |
| 226 *vertex_shader_->deferred_compilation_source(), | |
| 227 *fragment_shader_->deferred_compilation_source(), | |
| 228 NULL)); | |
| 229 EXPECT_EQ(1, shader_cache_count()); | |
| 230 | |
| 231 cache_->Clear(); | |
| 232 | |
| 233 cache_->LoadProgram(shader_cache_shader()); | |
| 234 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, cache_->GetLinkedProgramStatus( | |
| 235 *vertex_shader_->deferred_compilation_source(), | |
| 236 *fragment_shader_->deferred_compilation_source(), | |
| 237 NULL)); | |
| 238 } | 207 } |
| 239 | 208 |
| 240 TEST_F(MemoryProgramCacheTest, CacheLoadMatchesSave) { | 209 TEST_F(MemoryProgramCacheTest, CacheLoadMatchesSave) { |
| 241 const GLenum kFormat = 1; | 210 const GLenum kFormat = 1; |
| 242 const int kProgramId = 10; | 211 const int kProgramId = 10; |
| 243 const int kBinaryLength = 20; | 212 const int kBinaryLength = 20; |
| 244 char test_binary[kBinaryLength]; | 213 char test_binary[kBinaryLength]; |
| 245 for (int i = 0; i < kBinaryLength; ++i) { | 214 for (int i = 0; i < kBinaryLength; ++i) { |
| 246 test_binary[i] = i; | 215 test_binary[i] = i; |
| 247 } | 216 } |
| 248 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); | 217 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); |
| 249 | 218 |
| 250 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); | 219 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); |
| 251 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, fragment_shader_, NULL, | 220 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, fragment_shader_, NULL, |
| 252 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 221 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
| 253 base::Unretained(this))); | 222 base::Unretained(this))); |
| 254 EXPECT_EQ(1, shader_cache_count()); | |
| 255 | 223 |
| 256 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); | 224 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); |
| 257 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); | 225 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); |
| 258 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); | 226 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); |
| 259 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); | 227 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); |
| 260 | 228 |
| 261 vertex_shader_->set_attrib_map(VariableMap()); | 229 vertex_shader_->set_attrib_map(VariableMap()); |
| 262 vertex_shader_->set_uniform_map(VariableMap()); | 230 vertex_shader_->set_uniform_map(VariableMap()); |
| 263 fragment_shader_->set_attrib_map(VariableMap()); | 231 fragment_shader_->set_attrib_map(VariableMap()); |
| 264 fragment_shader_->set_uniform_map(VariableMap()); | 232 fragment_shader_->set_uniform_map(VariableMap()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 290 char test_binary[kBinaryLength]; | 258 char test_binary[kBinaryLength]; |
| 291 for (int i = 0; i < kBinaryLength; ++i) { | 259 for (int i = 0; i < kBinaryLength; ++i) { |
| 292 test_binary[i] = i; | 260 test_binary[i] = i; |
| 293 } | 261 } |
| 294 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); | 262 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); |
| 295 | 263 |
| 296 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); | 264 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); |
| 297 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, fragment_shader_, NULL, | 265 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, fragment_shader_, NULL, |
| 298 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 266 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
| 299 base::Unretained(this))); | 267 base::Unretained(this))); |
| 300 EXPECT_EQ(1, shader_cache_count()); | |
| 301 | 268 |
| 302 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); | 269 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); |
| 303 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); | 270 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); |
| 304 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); | 271 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); |
| 305 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); | 272 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); |
| 306 | 273 |
| 307 vertex_shader_->set_attrib_map(VariableMap()); | 274 vertex_shader_->set_attrib_map(VariableMap()); |
| 308 vertex_shader_->set_uniform_map(VariableMap()); | 275 vertex_shader_->set_uniform_map(VariableMap()); |
| 309 fragment_shader_->set_attrib_map(VariableMap()); | 276 fragment_shader_->set_attrib_map(VariableMap()); |
| 310 fragment_shader_->set_uniform_map(VariableMap()); | 277 fragment_shader_->set_uniform_map(VariableMap()); |
| 311 | 278 |
| 312 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); | 279 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); |
| 313 | 280 |
| 314 cache_->Clear(); | |
| 315 cache_->LoadProgram(shader_cache_shader()); | |
| 316 | |
| 317 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( | 281 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( |
| 318 kProgramId, | 282 kProgramId, |
| 319 vertex_shader_, | 283 vertex_shader_, |
| 320 fragment_shader_, | 284 fragment_shader_, |
| 321 NULL, | 285 NULL, |
| 322 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 286 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
| 323 base::Unretained(this)))); | 287 base::Unretained(this)))); |
| 324 | 288 |
| 325 // apparently the hash_map implementation on android doesn't have the | 289 // apparently the hash_map implementation on android doesn't have the |
| 326 // equality operator | 290 // equality operator |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 kProgramId, | 536 kProgramId, |
| 573 vertex_shader_, | 537 vertex_shader_, |
| 574 fragment_shader_, | 538 fragment_shader_, |
| 575 NULL, | 539 NULL, |
| 576 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 540 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
| 577 base::Unretained(this)))); | 541 base::Unretained(this)))); |
| 578 } | 542 } |
| 579 | 543 |
| 580 } // namespace gles2 | 544 } // namespace gles2 |
| 581 } // namespace gpu | 545 } // namespace gpu |
| OLD | NEW |