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 23 matching lines...) Expand all Loading... |
288 char test_binary[kBinaryLength]; | 256 char test_binary[kBinaryLength]; |
289 for (int i = 0; i < kBinaryLength; ++i) { | 257 for (int i = 0; i < kBinaryLength; ++i) { |
290 test_binary[i] = i; | 258 test_binary[i] = i; |
291 } | 259 } |
292 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); | 260 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); |
293 | 261 |
294 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); | 262 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); |
295 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, fragment_shader_, NULL, | 263 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, fragment_shader_, NULL, |
296 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 264 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
297 base::Unretained(this))); | 265 base::Unretained(this))); |
298 EXPECT_EQ(1, shader_cache_count()); | |
299 | 266 |
300 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); | 267 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); |
301 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); | 268 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); |
302 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); | 269 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); |
303 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); | 270 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); |
304 | 271 |
305 vertex_shader_->set_attrib_map(VariableMap()); | 272 vertex_shader_->set_attrib_map(VariableMap()); |
306 vertex_shader_->set_uniform_map(VariableMap()); | 273 vertex_shader_->set_uniform_map(VariableMap()); |
307 fragment_shader_->set_attrib_map(VariableMap()); | 274 fragment_shader_->set_attrib_map(VariableMap()); |
308 fragment_shader_->set_uniform_map(VariableMap()); | 275 fragment_shader_->set_uniform_map(VariableMap()); |
309 | 276 |
310 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); | 277 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); |
311 | 278 |
312 cache_->Clear(); | |
313 cache_->LoadProgram(shader_cache_shader()); | |
314 | |
315 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( | 279 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( |
316 kProgramId, | 280 kProgramId, |
317 vertex_shader_, | 281 vertex_shader_, |
318 fragment_shader_, | 282 fragment_shader_, |
319 NULL)); | 283 NULL)); |
320 | 284 |
321 // apparently the hash_map implementation on android doesn't have the | 285 // apparently the hash_map implementation on android doesn't have the |
322 // equality operator | 286 // equality operator |
323 #if !defined(OS_ANDROID) | 287 #if !defined(OS_ANDROID) |
324 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map()); | 288 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map()); |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
554 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator2); | 518 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator2); |
555 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( | 519 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( |
556 kProgramId, | 520 kProgramId, |
557 vertex_shader_, | 521 vertex_shader_, |
558 fragment_shader_, | 522 fragment_shader_, |
559 NULL)); | 523 NULL)); |
560 } | 524 } |
561 | 525 |
562 } // namespace gles2 | 526 } // namespace gles2 |
563 } // namespace gpu | 527 } // namespace gpu |
OLD | NEW |