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