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 |