Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(468)

Side by Side Diff: gpu/command_buffer/service/memory_program_cache_unittest.cc

Issue 1309743005: command_buffer: Implement EXT_blend_func_extended (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-05-path-fragment-input-gen
Patch Set: rebase Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gpu/command_buffer/service/memory_program_cache.cc ('k') | gpu/command_buffer/service/mocks.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 GL_VERTEX_SHADER); 93 GL_VERTEX_SHADER);
94 fragment_shader_ = shader_manager_.CreateShader( 94 fragment_shader_ = shader_manager_.CreateShader(
95 kFragmentShaderClientId, 95 kFragmentShaderClientId,
96 kFragmentShaderServiceId, 96 kFragmentShaderServiceId,
97 GL_FRAGMENT_SHADER); 97 GL_FRAGMENT_SHADER);
98 ASSERT_TRUE(vertex_shader_ != NULL); 98 ASSERT_TRUE(vertex_shader_ != NULL);
99 ASSERT_TRUE(fragment_shader_ != NULL); 99 ASSERT_TRUE(fragment_shader_ != NULL);
100 AttributeMap vertex_attrib_map; 100 AttributeMap vertex_attrib_map;
101 UniformMap vertex_uniform_map; 101 UniformMap vertex_uniform_map;
102 VaryingMap vertex_varying_map; 102 VaryingMap vertex_varying_map;
103 OutputVariableList vertex_output_variable_list;
103 AttributeMap fragment_attrib_map; 104 AttributeMap fragment_attrib_map;
104 UniformMap fragment_uniform_map; 105 UniformMap fragment_uniform_map;
105 VaryingMap fragment_varying_map; 106 VaryingMap fragment_varying_map;
107 OutputVariableList fragment_output_variable_list;
106 108
107 vertex_attrib_map["a"] = TestHelper::ConstructAttribute( 109 vertex_attrib_map["a"] = TestHelper::ConstructAttribute(
108 GL_FLOAT_VEC2, 34, GL_LOW_FLOAT, false, "a"); 110 GL_FLOAT_VEC2, 34, GL_LOW_FLOAT, false, "a");
109 vertex_uniform_map["a"] = TestHelper::ConstructUniform( 111 vertex_uniform_map["a"] = TestHelper::ConstructUniform(
110 GL_FLOAT, 10, GL_MEDIUM_FLOAT, true, "a"); 112 GL_FLOAT, 10, GL_MEDIUM_FLOAT, true, "a");
111 vertex_uniform_map["b"] = TestHelper::ConstructUniform( 113 vertex_uniform_map["b"] = TestHelper::ConstructUniform(
112 GL_FLOAT_VEC3, 3114, GL_HIGH_FLOAT, true, "b"); 114 GL_FLOAT_VEC3, 3114, GL_HIGH_FLOAT, true, "b");
113 vertex_varying_map["c"] = TestHelper::ConstructVarying( 115 vertex_varying_map["c"] = TestHelper::ConstructVarying(
114 GL_FLOAT_VEC4, 2, GL_HIGH_FLOAT, true, "c"); 116 GL_FLOAT_VEC4, 2, GL_HIGH_FLOAT, true, "c");
117 vertex_output_variable_list.push_back(TestHelper::ConstructOutputVariable(
118 GL_FLOAT, 0, GL_HIGH_FLOAT, true, "d"));
115 fragment_attrib_map["jjjbb"] = TestHelper::ConstructAttribute( 119 fragment_attrib_map["jjjbb"] = TestHelper::ConstructAttribute(
116 GL_FLOAT_MAT4, 1114, GL_MEDIUM_FLOAT, false, "jjjbb"); 120 GL_FLOAT_MAT4, 1114, GL_MEDIUM_FLOAT, false, "jjjbb");
117 fragment_uniform_map["k"] = TestHelper::ConstructUniform( 121 fragment_uniform_map["k"] = TestHelper::ConstructUniform(
118 GL_FLOAT_MAT2, 34413, GL_MEDIUM_FLOAT, true, "k"); 122 GL_FLOAT_MAT2, 34413, GL_MEDIUM_FLOAT, true, "k");
119 fragment_varying_map["c"] = TestHelper::ConstructVarying( 123 fragment_varying_map["c"] = TestHelper::ConstructVarying(
120 GL_FLOAT_VEC4, 2, GL_HIGH_FLOAT, true, "c"); 124 GL_FLOAT_VEC4, 2, GL_HIGH_FLOAT, true, "c");
125 fragment_output_variable_list.push_back(TestHelper::ConstructOutputVariable(
126 GL_FLOAT, 0, GL_HIGH_FLOAT, true, "d"));
121 127
122 vertex_shader_->set_source("bbbalsldkdkdkd"); 128 vertex_shader_->set_source("bbbalsldkdkdkd");
123 fragment_shader_->set_source("bbbal sldkdkdkas 134 ad"); 129 fragment_shader_->set_source("bbbal sldkdkdkas 134 ad");
124 130
131 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true, nullptr,
132 nullptr, nullptr, &vertex_attrib_map,
133 &vertex_uniform_map, &vertex_varying_map,
134 nullptr, &vertex_output_variable_list, nullptr);
125 TestHelper::SetShaderStates( 135 TestHelper::SetShaderStates(
126 gl_.get(), vertex_shader_, true, NULL, NULL, NULL, 136 gl_.get(), fragment_shader_, true, nullptr, nullptr, nullptr,
127 &vertex_attrib_map, &vertex_uniform_map, &vertex_varying_map,
128 NULL, NULL);
129 TestHelper::SetShaderStates(
130 gl_.get(), fragment_shader_, true, NULL, NULL, NULL,
131 &fragment_attrib_map, &fragment_uniform_map, &fragment_varying_map, 137 &fragment_attrib_map, &fragment_uniform_map, &fragment_varying_map,
132 NULL, NULL); 138 nullptr, &fragment_output_variable_list, nullptr);
133 } 139 }
134 140
135 void SetExpectationsForSaveLinkedProgram( 141 void SetExpectationsForSaveLinkedProgram(
136 const GLint program_id, 142 const GLint program_id,
137 ProgramBinaryEmulator* emulator) const { 143 ProgramBinaryEmulator* emulator) const {
138 EXPECT_CALL(*gl_.get(), 144 EXPECT_CALL(*gl_.get(),
139 GetProgramiv(program_id, GL_PROGRAM_BINARY_LENGTH_OES, _)) 145 GetProgramiv(program_id, GL_PROGRAM_BINARY_LENGTH_OES, _))
140 .WillOnce(SetArgPointee<2>(emulator->length())); 146 .WillOnce(SetArgPointee<2>(emulator->length()));
141 EXPECT_CALL(*gl_.get(), 147 EXPECT_CALL(*gl_.get(),
142 GetProgramBinary(program_id, emulator->length(), _, _, _)) 148 GetProgramBinary(program_id, emulator->length(), _, _, _))
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 253 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
248 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 254 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
249 fragment_shader_, NULL, varyings_, GL_NONE, 255 fragment_shader_, NULL, varyings_, GL_NONE,
250 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 256 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
251 base::Unretained(this))); 257 base::Unretained(this)));
252 EXPECT_EQ(1, shader_cache_count()); 258 EXPECT_EQ(1, shader_cache_count());
253 259
254 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); 260 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map();
255 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); 261 UniformMap vertex_uniform_map = vertex_shader_->uniform_map();
256 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); 262 VaryingMap vertex_varying_map = vertex_shader_->varying_map();
263 OutputVariableList vertex_output_variable_list =
264 vertex_shader_->output_variable_list();
257 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); 265 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map();
258 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); 266 UniformMap fragment_uniform_map = fragment_shader_->uniform_map();
259 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); 267 VaryingMap fragment_varying_map = fragment_shader_->varying_map();
268 OutputVariableList fragment_output_variable_list =
269 fragment_shader_->output_variable_list();
260 270
261 vertex_shader_->set_attrib_map(AttributeMap()); 271 vertex_shader_->set_attrib_map(AttributeMap());
262 vertex_shader_->set_uniform_map(UniformMap()); 272 vertex_shader_->set_uniform_map(UniformMap());
263 vertex_shader_->set_varying_map(VaryingMap()); 273 vertex_shader_->set_varying_map(VaryingMap());
274 vertex_shader_->set_output_variable_list(OutputVariableList());
264 fragment_shader_->set_attrib_map(AttributeMap()); 275 fragment_shader_->set_attrib_map(AttributeMap());
265 fragment_shader_->set_uniform_map(UniformMap()); 276 fragment_shader_->set_uniform_map(UniformMap());
266 fragment_shader_->set_varying_map(VaryingMap()); 277 fragment_shader_->set_varying_map(VaryingMap());
267 278 fragment_shader_->set_output_variable_list(OutputVariableList());
268 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); 279 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator);
269 280
270 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 281 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
271 kProgramId, 282 kProgramId,
272 vertex_shader_, 283 vertex_shader_,
273 fragment_shader_, 284 fragment_shader_,
274 NULL, 285 NULL,
275 varyings_, 286 varyings_,
276 GL_NONE, 287 GL_NONE,
277 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 288 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
278 base::Unretained(this)))); 289 base::Unretained(this))));
279 290
280 // apparently the hash_map implementation on android doesn't have the 291 // apparently the hash_map implementation on android doesn't have the
281 // equality operator 292 // equality operator
282 #if !defined(OS_ANDROID) 293 #if !defined(OS_ANDROID)
283 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map()); 294 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map());
284 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map()); 295 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map());
285 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map()); 296 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map());
297 EXPECT_EQ(vertex_output_variable_list,
298 vertex_shader_->output_variable_list());
286 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map()); 299 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map());
287 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map()); 300 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map());
288 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map()); 301 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map());
302 EXPECT_EQ(fragment_output_variable_list,
303 fragment_shader_->output_variable_list());
289 #endif 304 #endif
290 } 305 }
291 306
292 TEST_F(MemoryProgramCacheTest, LoadProgramMatchesSave) { 307 TEST_F(MemoryProgramCacheTest, LoadProgramMatchesSave) {
293 const GLenum kFormat = 1; 308 const GLenum kFormat = 1;
294 const int kProgramId = 10; 309 const int kProgramId = 10;
295 const int kBinaryLength = 20; 310 const int kBinaryLength = 20;
296 char test_binary[kBinaryLength]; 311 char test_binary[kBinaryLength];
297 for (int i = 0; i < kBinaryLength; ++i) { 312 for (int i = 0; i < kBinaryLength; ++i) {
298 test_binary[i] = i; 313 test_binary[i] = i;
299 } 314 }
300 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); 315 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary);
301 316
302 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); 317 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator);
303 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, 318 cache_->SaveLinkedProgram(kProgramId, vertex_shader_,
304 fragment_shader_, NULL, varyings_, GL_NONE, 319 fragment_shader_, NULL, varyings_, GL_NONE,
305 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 320 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
306 base::Unretained(this))); 321 base::Unretained(this)));
307 EXPECT_EQ(1, shader_cache_count()); 322 EXPECT_EQ(1, shader_cache_count());
308 323
309 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); 324 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map();
310 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); 325 UniformMap vertex_uniform_map = vertex_shader_->uniform_map();
311 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); 326 VaryingMap vertex_varying_map = vertex_shader_->varying_map();
327 OutputVariableList vertex_output_variable_list =
328 vertex_shader_->output_variable_list();
312 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); 329 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map();
313 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); 330 UniformMap fragment_uniform_map = fragment_shader_->uniform_map();
314 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); 331 VaryingMap fragment_varying_map = fragment_shader_->varying_map();
332 OutputVariableList fragment_output_variable_list =
333 fragment_shader_->output_variable_list();
315 334
316 vertex_shader_->set_attrib_map(AttributeMap()); 335 vertex_shader_->set_attrib_map(AttributeMap());
317 vertex_shader_->set_uniform_map(UniformMap()); 336 vertex_shader_->set_uniform_map(UniformMap());
318 vertex_shader_->set_varying_map(VaryingMap()); 337 vertex_shader_->set_varying_map(VaryingMap());
338 vertex_shader_->set_output_variable_list(OutputVariableList());
319 fragment_shader_->set_attrib_map(AttributeMap()); 339 fragment_shader_->set_attrib_map(AttributeMap());
320 fragment_shader_->set_uniform_map(UniformMap()); 340 fragment_shader_->set_uniform_map(UniformMap());
321 fragment_shader_->set_varying_map(VaryingMap()); 341 fragment_shader_->set_varying_map(VaryingMap());
342 fragment_shader_->set_output_variable_list(OutputVariableList());
322 343
323 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); 344 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator);
324 345
325 cache_->Clear(); 346 cache_->Clear();
326 cache_->LoadProgram(shader_cache_shader()); 347 cache_->LoadProgram(shader_cache_shader());
327 348
328 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( 349 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram(
329 kProgramId, 350 kProgramId,
330 vertex_shader_, 351 vertex_shader_,
331 fragment_shader_, 352 fragment_shader_,
332 NULL, 353 NULL,
333 varyings_, 354 varyings_,
334 GL_NONE, 355 GL_NONE,
335 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 356 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
336 base::Unretained(this)))); 357 base::Unretained(this))));
337 358
338 // apparently the hash_map implementation on android doesn't have the 359 // apparently the hash_map implementation on android doesn't have the
339 // equality operator 360 // equality operator
340 #if !defined(OS_ANDROID) 361 #if !defined(OS_ANDROID)
341 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map()); 362 EXPECT_EQ(vertex_attrib_map, vertex_shader_->attrib_map());
342 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map()); 363 EXPECT_EQ(vertex_uniform_map, vertex_shader_->uniform_map());
343 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map()); 364 EXPECT_EQ(vertex_varying_map, vertex_shader_->varying_map());
365 EXPECT_EQ(vertex_output_variable_list,
366 vertex_shader_->output_variable_list());
344 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map()); 367 EXPECT_EQ(fragment_attrib_map, fragment_shader_->attrib_map());
345 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map()); 368 EXPECT_EQ(fragment_uniform_map, fragment_shader_->uniform_map());
346 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map()); 369 EXPECT_EQ(fragment_varying_map, fragment_shader_->varying_map());
370 EXPECT_EQ(fragment_output_variable_list,
371 fragment_shader_->output_variable_list());
347 #endif 372 #endif
348 } 373 }
349 374
350 TEST_F(MemoryProgramCacheTest, LoadFailOnLinkFalse) { 375 TEST_F(MemoryProgramCacheTest, LoadFailOnLinkFalse) {
351 const GLenum kFormat = 1; 376 const GLenum kFormat = 1;
352 const int kProgramId = 10; 377 const int kProgramId = 10;
353 const int kBinaryLength = 20; 378 const int kBinaryLength = 20;
354 char test_binary[kBinaryLength]; 379 char test_binary[kBinaryLength];
355 for (int i = 0; i < kBinaryLength; ++i) { 380 for (int i = 0; i < kBinaryLength; ++i) {
356 test_binary[i] = i; 381 test_binary[i] = i;
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 fragment_shader_, 677 fragment_shader_,
653 NULL, 678 NULL,
654 varyings_, 679 varyings_,
655 GL_NONE, 680 GL_NONE,
656 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, 681 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb,
657 base::Unretained(this)))); 682 base::Unretained(this))));
658 } 683 }
659 684
660 } // namespace gles2 685 } // namespace gles2
661 } // namespace gpu 686 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/memory_program_cache.cc ('k') | gpu/command_buffer/service/mocks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698