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

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

Issue 566023002: Clean up interfaces between Shader / ShaderTranslator / ANGLE side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months 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
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/program_manager.h" 5 #include "gpu/command_buffer/service/program_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 SetupDefaultShaderExpectations(); 220 SetupDefaultShaderExpectations();
221 221
222 Shader* vertex_shader = shader_manager_.CreateShader( 222 Shader* vertex_shader = shader_manager_.CreateShader(
223 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER); 223 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER);
224 Shader* fragment_shader = 224 Shader* fragment_shader =
225 shader_manager_.CreateShader( 225 shader_manager_.CreateShader(
226 kFragmentShaderClientId, kFragmentShaderServiceId, 226 kFragmentShaderClientId, kFragmentShaderServiceId,
227 GL_FRAGMENT_SHADER); 227 GL_FRAGMENT_SHADER);
228 ASSERT_TRUE(vertex_shader != NULL); 228 ASSERT_TRUE(vertex_shader != NULL);
229 ASSERT_TRUE(fragment_shader != NULL); 229 ASSERT_TRUE(fragment_shader != NULL);
230 vertex_shader->SetStatus(true, NULL, NULL); 230 TestHelper::SetShaderStates(gl_.get(), vertex_shader, true);
231 fragment_shader->SetStatus(true, NULL, NULL); 231 TestHelper::SetShaderStates(gl_.get(), fragment_shader, true);
232 232
233 program_ = manager_.CreateProgram( 233 program_ = manager_.CreateProgram(
234 kClientProgramId, kServiceProgramId); 234 kClientProgramId, kServiceProgramId);
235 ASSERT_TRUE(program_ != NULL); 235 ASSERT_TRUE(program_ != NULL);
236 236
237 program_->AttachShader(&shader_manager_, vertex_shader); 237 program_->AttachShader(&shader_manager_, vertex_shader);
238 program_->AttachShader(&shader_manager_, fragment_shader); 238 program_->AttachShader(&shader_manager_, fragment_shader);
239 program_->Link(NULL, NULL, NULL, Program::kCountOnlyStaticallyUsed, 239 program_->Link(NULL, NULL, NULL, Program::kCountOnlyStaticallyUsed,
240 base::Bind(&ShaderCacheCb)); 240 base::Bind(&ShaderCacheCb));
241 } 241 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 Program* SetupShaderVariableTest(const VarInfo* vertex_variables, 276 Program* SetupShaderVariableTest(const VarInfo* vertex_variables,
277 size_t vertex_variable_size, 277 size_t vertex_variable_size,
278 const VarInfo* fragment_variables, 278 const VarInfo* fragment_variables,
279 size_t fragment_variable_size) { 279 size_t fragment_variable_size) {
280 // Set up shader 280 // Set up shader
281 const GLuint kVShaderClientId = 1; 281 const GLuint kVShaderClientId = 1;
282 const GLuint kVShaderServiceId = 11; 282 const GLuint kVShaderServiceId = 11;
283 const GLuint kFShaderClientId = 2; 283 const GLuint kFShaderClientId = 2;
284 const GLuint kFShaderServiceId = 12; 284 const GLuint kFShaderServiceId = 12;
285 285
286 MockShaderTranslator vertex_shader_translator;
287 ShaderTranslator::VariableMap vertex_attrib_map; 286 ShaderTranslator::VariableMap vertex_attrib_map;
288 ShaderTranslator::VariableMap vertex_uniform_map; 287 ShaderTranslator::VariableMap vertex_uniform_map;
289 ShaderTranslator::VariableMap vertex_varying_map; 288 ShaderTranslator::VariableMap vertex_varying_map;
290 for (size_t ii = 0; ii < vertex_variable_size; ++ii) { 289 for (size_t ii = 0; ii < vertex_variable_size; ++ii) {
291 ShaderTranslator::VariableMap* map = NULL; 290 ShaderTranslator::VariableMap* map = NULL;
292 switch (vertex_variables[ii].category) { 291 switch (vertex_variables[ii].category) {
293 case kVarAttribute: 292 case kVarAttribute:
294 map = &vertex_attrib_map; 293 map = &vertex_attrib_map;
295 break; 294 break;
296 case kVarUniform: 295 case kVarUniform:
297 map = &vertex_uniform_map; 296 map = &vertex_uniform_map;
298 break; 297 break;
299 case kVarVarying: 298 case kVarVarying:
300 map = &vertex_varying_map; 299 map = &vertex_varying_map;
301 break; 300 break;
302 default: 301 default:
303 NOTREACHED(); 302 NOTREACHED();
304 } 303 }
305 (*map)[vertex_variables[ii].name] = 304 (*map)[vertex_variables[ii].name] =
306 ShaderTranslator::VariableInfo(vertex_variables[ii].type, 305 ShaderTranslator::VariableInfo(vertex_variables[ii].type,
307 vertex_variables[ii].size, 306 vertex_variables[ii].size,
308 vertex_variables[ii].precision, 307 vertex_variables[ii].precision,
309 vertex_variables[ii].static_use, 308 vertex_variables[ii].static_use,
310 vertex_variables[ii].name); 309 vertex_variables[ii].name);
311 } 310 }
312 ShaderTranslator::NameMap vertex_name_map;
313 EXPECT_CALL(vertex_shader_translator, attrib_map())
314 .WillRepeatedly(ReturnRef(vertex_attrib_map));
315 EXPECT_CALL(vertex_shader_translator, uniform_map())
316 .WillRepeatedly(ReturnRef(vertex_uniform_map));
317 EXPECT_CALL(vertex_shader_translator, varying_map())
318 .WillRepeatedly(ReturnRef(vertex_varying_map));
319 EXPECT_CALL(vertex_shader_translator, name_map())
320 .WillRepeatedly(ReturnRef(vertex_name_map));
321 311
322 MockShaderTranslator frag_shader_translator;
323 ShaderTranslator::VariableMap frag_attrib_map; 312 ShaderTranslator::VariableMap frag_attrib_map;
324 ShaderTranslator::VariableMap frag_uniform_map; 313 ShaderTranslator::VariableMap frag_uniform_map;
325 ShaderTranslator::VariableMap frag_varying_map; 314 ShaderTranslator::VariableMap frag_varying_map;
326 for (size_t ii = 0; ii < fragment_variable_size; ++ii) { 315 for (size_t ii = 0; ii < fragment_variable_size; ++ii) {
327 ShaderTranslator::VariableMap* map = NULL; 316 ShaderTranslator::VariableMap* map = NULL;
328 switch (fragment_variables[ii].category) { 317 switch (fragment_variables[ii].category) {
329 case kVarAttribute: 318 case kVarAttribute:
330 map = &frag_attrib_map; 319 map = &frag_attrib_map;
331 break; 320 break;
332 case kVarUniform: 321 case kVarUniform:
333 map = &frag_uniform_map; 322 map = &frag_uniform_map;
334 break; 323 break;
335 case kVarVarying: 324 case kVarVarying:
336 map = &frag_varying_map; 325 map = &frag_varying_map;
337 break; 326 break;
338 default: 327 default:
339 NOTREACHED(); 328 NOTREACHED();
340 } 329 }
341 (*map)[fragment_variables[ii].name] = 330 (*map)[fragment_variables[ii].name] =
342 ShaderTranslator::VariableInfo(fragment_variables[ii].type, 331 ShaderTranslator::VariableInfo(fragment_variables[ii].type,
343 fragment_variables[ii].size, 332 fragment_variables[ii].size,
344 fragment_variables[ii].precision, 333 fragment_variables[ii].precision,
345 fragment_variables[ii].static_use, 334 fragment_variables[ii].static_use,
346 fragment_variables[ii].name); 335 fragment_variables[ii].name);
347 } 336 }
348 ShaderTranslator::NameMap frag_name_map;
349 EXPECT_CALL(frag_shader_translator, attrib_map())
350 .WillRepeatedly(ReturnRef(frag_attrib_map));
351 EXPECT_CALL(frag_shader_translator, uniform_map())
352 .WillRepeatedly(ReturnRef(frag_uniform_map));
353 EXPECT_CALL(frag_shader_translator, varying_map())
354 .WillRepeatedly(ReturnRef(frag_varying_map));
355 EXPECT_CALL(frag_shader_translator, name_map())
356 .WillRepeatedly(ReturnRef(frag_name_map));
357 337
358 // Check we can create shader. 338 // Check we can create shader.
359 Shader* vshader = shader_manager_.CreateShader( 339 Shader* vshader = shader_manager_.CreateShader(
360 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 340 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
361 Shader* fshader = shader_manager_.CreateShader( 341 Shader* fshader = shader_manager_.CreateShader(
362 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 342 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
363 // Check shader got created. 343 // Check shader got created.
364 EXPECT_TRUE(vshader != NULL && fshader != NULL); 344 EXPECT_TRUE(vshader != NULL && fshader != NULL);
365 // Set Status 345 // Set Status
366 vshader->SetStatus(true, "", &vertex_shader_translator); 346 TestHelper::SetShaderStates(
367 fshader->SetStatus(true, "", &frag_shader_translator); 347 gl_.get(), vshader, true, NULL, NULL,
348 &vertex_attrib_map, &vertex_uniform_map, &vertex_varying_map, NULL);
349 TestHelper::SetShaderStates(
350 gl_.get(), fshader, true, NULL, NULL,
351 &frag_attrib_map, &frag_uniform_map, &frag_varying_map, NULL);
368 352
369 // Set up program 353 // Set up program
370 const GLuint kClientProgramId = 6666; 354 const GLuint kClientProgramId = 6666;
371 const GLuint kServiceProgramId = 8888; 355 const GLuint kServiceProgramId = 8888;
372 Program* program = 356 Program* program =
373 manager_.CreateProgram(kClientProgramId, kServiceProgramId); 357 manager_.CreateProgram(kClientProgramId, kServiceProgramId);
374 EXPECT_TRUE(program != NULL); 358 EXPECT_TRUE(program != NULL);
375 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 359 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
376 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 360 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
377 return program; 361 return program;
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 kClientProgramId, kServiceProgramId); 533 kClientProgramId, kServiceProgramId);
550 ASSERT_TRUE(program != NULL); 534 ASSERT_TRUE(program != NULL);
551 EXPECT_FALSE(program->CanLink()); 535 EXPECT_FALSE(program->CanLink());
552 const GLuint kVShaderClientId = 2001; 536 const GLuint kVShaderClientId = 2001;
553 const GLuint kFShaderClientId = 2002; 537 const GLuint kFShaderClientId = 2002;
554 const GLuint kVShaderServiceId = 3001; 538 const GLuint kVShaderServiceId = 3001;
555 const GLuint kFShaderServiceId = 3002; 539 const GLuint kFShaderServiceId = 3002;
556 Shader* vshader = shader_manager_.CreateShader( 540 Shader* vshader = shader_manager_.CreateShader(
557 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 541 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
558 ASSERT_TRUE(vshader != NULL); 542 ASSERT_TRUE(vshader != NULL);
559 vshader->SetStatus(true, "", NULL); 543 TestHelper::SetShaderStates(gl_.get(), vshader, true);
560 Shader* fshader = shader_manager_.CreateShader( 544 Shader* fshader = shader_manager_.CreateShader(
561 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 545 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
562 ASSERT_TRUE(fshader != NULL); 546 ASSERT_TRUE(fshader != NULL);
563 fshader->SetStatus(true, "", NULL); 547 TestHelper::SetShaderStates(gl_.get(), fshader, true);
564 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 548 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
565 EXPECT_FALSE(program->CanLink()); 549 EXPECT_FALSE(program->CanLink());
566 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 550 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
567 EXPECT_TRUE(program->CanLink()); 551 EXPECT_TRUE(program->CanLink());
568 program->DetachShader(&shader_manager_, vshader); 552 program->DetachShader(&shader_manager_, vshader);
569 EXPECT_FALSE(program->CanLink()); 553 EXPECT_FALSE(program->CanLink());
570 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 554 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
571 EXPECT_TRUE(program->CanLink()); 555 EXPECT_TRUE(program->CanLink());
572 program->DetachShader(&shader_manager_, fshader); 556 program->DetachShader(&shader_manager_, fshader);
573 EXPECT_FALSE(program->CanLink()); 557 EXPECT_FALSE(program->CanLink());
574 EXPECT_FALSE(program->AttachShader(&shader_manager_, vshader)); 558 EXPECT_FALSE(program->AttachShader(&shader_manager_, vshader));
575 EXPECT_FALSE(program->CanLink()); 559 EXPECT_FALSE(program->CanLink());
576 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 560 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
577 EXPECT_TRUE(program->CanLink()); 561 EXPECT_TRUE(program->CanLink());
578 vshader->SetStatus(false, "", NULL); 562 TestHelper::SetShaderStates(gl_.get(), vshader, false);
579 EXPECT_FALSE(program->CanLink()); 563 EXPECT_FALSE(program->CanLink());
580 vshader->SetStatus(true, "", NULL); 564 TestHelper::SetShaderStates(gl_.get(), vshader, true);
581 EXPECT_TRUE(program->CanLink()); 565 EXPECT_TRUE(program->CanLink());
582 fshader->SetStatus(false, "", NULL); 566 TestHelper::SetShaderStates(gl_.get(), fshader, false);
583 EXPECT_FALSE(program->CanLink()); 567 EXPECT_FALSE(program->CanLink());
584 fshader->SetStatus(true, "", NULL); 568 TestHelper::SetShaderStates(gl_.get(), fshader, true);
585 EXPECT_TRUE(program->CanLink()); 569 EXPECT_TRUE(program->CanLink());
586 EXPECT_TRUE(program->DetachShader(&shader_manager_, fshader)); 570 EXPECT_TRUE(program->DetachShader(&shader_manager_, fshader));
587 EXPECT_FALSE(program->DetachShader(&shader_manager_, fshader)); 571 EXPECT_FALSE(program->DetachShader(&shader_manager_, fshader));
588 } 572 }
589 573
590 TEST_F(ProgramManagerWithShaderTest, GetUniformFakeLocation) { 574 TEST_F(ProgramManagerWithShaderTest, GetUniformFakeLocation) {
591 const Program* program = manager_.GetProgram(kClientProgramId); 575 const Program* program = manager_.GetProgram(kClientProgramId);
592 ASSERT_TRUE(program != NULL); 576 ASSERT_TRUE(program != NULL);
593 // Emulate the situation that uniform3[1] isn't used and optimized out by 577 // Emulate the situation that uniform3[1] isn't used and optimized out by
594 // a driver, so it's location is -1. 578 // a driver, so it's location is -1.
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 static const GLuint kServiceProgramId = 5679; 669 static const GLuint kServiceProgramId = 5679;
686 const GLuint kVShaderClientId = 2001; 670 const GLuint kVShaderClientId = 2001;
687 const GLuint kFShaderClientId = 2002; 671 const GLuint kFShaderClientId = 2002;
688 const GLuint kVShaderServiceId = 3001; 672 const GLuint kVShaderServiceId = 3001;
689 const GLuint kFShaderServiceId = 3002; 673 const GLuint kFShaderServiceId = 3002;
690 SetupShader( 674 SetupShader(
691 kAttribs, kNumAttribs, kUniforms, kNumUniforms, kServiceProgramId); 675 kAttribs, kNumAttribs, kUniforms, kNumUniforms, kServiceProgramId);
692 Shader* vshader = shader_manager_.CreateShader( 676 Shader* vshader = shader_manager_.CreateShader(
693 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 677 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
694 ASSERT_TRUE(vshader != NULL); 678 ASSERT_TRUE(vshader != NULL);
695 vshader->SetStatus(true, "", NULL); 679 TestHelper::SetShaderStates(gl_.get(), vshader, true);
696 Shader* fshader = shader_manager_.CreateShader( 680 Shader* fshader = shader_manager_.CreateShader(
697 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 681 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
698 ASSERT_TRUE(fshader != NULL); 682 ASSERT_TRUE(fshader != NULL);
699 fshader->SetStatus(true, "", NULL); 683 TestHelper::SetShaderStates(gl_.get(), fshader, true);
700 Program* program = 684 Program* program =
701 manager_.CreateProgram(kClientProgramId, kServiceProgramId); 685 manager_.CreateProgram(kClientProgramId, kServiceProgramId);
702 ASSERT_TRUE(program != NULL); 686 ASSERT_TRUE(program != NULL);
703 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 687 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
704 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 688 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
705 program->Link(NULL, NULL, NULL, Program::kCountOnlyStaticallyUsed, 689 program->Link(NULL, NULL, NULL, Program::kCountOnlyStaticallyUsed,
706 base::Bind(&ShaderCacheCb)); 690 base::Bind(&ShaderCacheCb));
707 GLint value = 0; 691 GLint value = 0;
708 program->GetProgramiv(GL_ACTIVE_ATTRIBUTES, &value); 692 program->GetProgramiv(GL_ACTIVE_ATTRIBUTES, &value);
709 EXPECT_EQ(3, value); 693 EXPECT_EQ(3, value);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 static const GLuint kServiceProgramId = 5679; 738 static const GLuint kServiceProgramId = 5679;
755 const GLuint kVShaderClientId = 2001; 739 const GLuint kVShaderClientId = 2001;
756 const GLuint kFShaderClientId = 2002; 740 const GLuint kFShaderClientId = 2002;
757 const GLuint kVShaderServiceId = 3001; 741 const GLuint kVShaderServiceId = 3001;
758 const GLuint kFShaderServiceId = 3002; 742 const GLuint kFShaderServiceId = 3002;
759 SetupShader( 743 SetupShader(
760 kAttribs, kNumAttribs, kUniforms, kNumUniforms, kServiceProgramId); 744 kAttribs, kNumAttribs, kUniforms, kNumUniforms, kServiceProgramId);
761 Shader* vshader = shader_manager_.CreateShader( 745 Shader* vshader = shader_manager_.CreateShader(
762 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 746 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
763 ASSERT_TRUE(vshader != NULL); 747 ASSERT_TRUE(vshader != NULL);
764 vshader->SetStatus(true, "", NULL); 748 TestHelper::SetShaderStates(gl_.get(), vshader, true);
765 Shader* fshader = shader_manager_.CreateShader( 749 Shader* fshader = shader_manager_.CreateShader(
766 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 750 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
767 ASSERT_TRUE(fshader != NULL); 751 ASSERT_TRUE(fshader != NULL);
768 fshader->SetStatus(true, "", NULL); 752 TestHelper::SetShaderStates(gl_.get(), fshader, true);
769 Program* program = 753 Program* program =
770 manager_.CreateProgram(kClientProgramId, kServiceProgramId); 754 manager_.CreateProgram(kClientProgramId, kServiceProgramId);
771 ASSERT_TRUE(program != NULL); 755 ASSERT_TRUE(program != NULL);
772 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 756 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
773 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 757 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
774 program->Link(NULL, NULL, NULL, Program::kCountOnlyStaticallyUsed, 758 program->Link(NULL, NULL, NULL, Program::kCountOnlyStaticallyUsed,
775 base::Bind(&ShaderCacheCb)); 759 base::Bind(&ShaderCacheCb));
776 760
777 // Check that we get the correct locations. 761 // Check that we get the correct locations.
778 EXPECT_EQ(kUniform2FakeLocation, 762 EXPECT_EQ(kUniform2FakeLocation,
779 program->GetUniformFakeLocation(kUniform2Name)); 763 program->GetUniformFakeLocation(kUniform2Name));
780 EXPECT_EQ(kUniform3FakeLocation, 764 EXPECT_EQ(kUniform3FakeLocation,
781 program->GetUniformFakeLocation(kUniform3Name)); 765 program->GetUniformFakeLocation(kUniform3Name));
782 } 766 }
783 767
784 // Some GL drivers incorrectly return the wrong type. For example they return 768 // Some GL drivers incorrectly return the wrong type. For example they return
785 // GL_FLOAT_VEC2 when they should return GL_FLOAT_MAT2. Check we handle this. 769 // GL_FLOAT_VEC2 when they should return GL_FLOAT_MAT2. Check we handle this.
786 TEST_F(ProgramManagerWithShaderTest, GLDriverReturnsWrongTypeInfo) { 770 TEST_F(ProgramManagerWithShaderTest, GLDriverReturnsWrongTypeInfo) {
787 static GLenum kAttrib2BadType = GL_FLOAT_VEC2; 771 static GLenum kAttrib2BadType = GL_FLOAT_VEC2;
788 static GLenum kAttrib2GoodType = GL_FLOAT_MAT2; 772 static GLenum kAttrib2GoodType = GL_FLOAT_MAT2;
789 static GLenum kUniform2BadType = GL_FLOAT_VEC3; 773 static GLenum kUniform2BadType = GL_FLOAT_VEC3;
790 static GLenum kUniform2GoodType = GL_FLOAT_MAT3; 774 static GLenum kUniform2GoodType = GL_FLOAT_MAT3;
791 MockShaderTranslator shader_translator;
792 ShaderTranslator::VariableMap attrib_map; 775 ShaderTranslator::VariableMap attrib_map;
793 ShaderTranslator::VariableMap uniform_map; 776 ShaderTranslator::VariableMap uniform_map;
794 ShaderTranslator::VariableMap varying_map; 777 ShaderTranslator::VariableMap varying_map;
795 attrib_map[kAttrib1Name] = ShaderTranslatorInterface::VariableInfo( 778 attrib_map[kAttrib1Name] = ShaderTranslatorInterface::VariableInfo(
796 kAttrib1Type, kAttrib1Size, kAttrib1Precision, 779 kAttrib1Type, kAttrib1Size, kAttrib1Precision,
797 kAttribStaticUse, kAttrib1Name); 780 kAttribStaticUse, kAttrib1Name);
798 attrib_map[kAttrib2Name] = ShaderTranslatorInterface::VariableInfo( 781 attrib_map[kAttrib2Name] = ShaderTranslatorInterface::VariableInfo(
799 kAttrib2GoodType, kAttrib2Size, kAttrib2Precision, 782 kAttrib2GoodType, kAttrib2Size, kAttrib2Precision,
800 kAttribStaticUse, kAttrib2Name); 783 kAttribStaticUse, kAttrib2Name);
801 attrib_map[kAttrib3Name] = ShaderTranslatorInterface::VariableInfo( 784 attrib_map[kAttrib3Name] = ShaderTranslatorInterface::VariableInfo(
802 kAttrib3Type, kAttrib3Size, kAttrib3Precision, 785 kAttrib3Type, kAttrib3Size, kAttrib3Precision,
803 kAttribStaticUse, kAttrib3Name); 786 kAttribStaticUse, kAttrib3Name);
804 uniform_map[kUniform1Name] = ShaderTranslatorInterface::VariableInfo( 787 uniform_map[kUniform1Name] = ShaderTranslatorInterface::VariableInfo(
805 kUniform1Type, kUniform1Size, kUniform1Precision, 788 kUniform1Type, kUniform1Size, kUniform1Precision,
806 kUniform1StaticUse, kUniform1Name); 789 kUniform1StaticUse, kUniform1Name);
807 uniform_map[kUniform2Name] = ShaderTranslatorInterface::VariableInfo( 790 uniform_map[kUniform2Name] = ShaderTranslatorInterface::VariableInfo(
808 kUniform2GoodType, kUniform2Size, kUniform2Precision, 791 kUniform2GoodType, kUniform2Size, kUniform2Precision,
809 kUniform2StaticUse, kUniform2Name); 792 kUniform2StaticUse, kUniform2Name);
810 uniform_map[kUniform3GoodName] = ShaderTranslatorInterface::VariableInfo( 793 uniform_map[kUniform3GoodName] = ShaderTranslatorInterface::VariableInfo(
811 kUniform3Type, kUniform3Size, kUniform3Precision, 794 kUniform3Type, kUniform3Size, kUniform3Precision,
812 kUniform3StaticUse, kUniform3GoodName); 795 kUniform3StaticUse, kUniform3GoodName);
813 EXPECT_CALL(shader_translator, attrib_map())
814 .WillRepeatedly(ReturnRef(attrib_map));
815 EXPECT_CALL(shader_translator, uniform_map())
816 .WillRepeatedly(ReturnRef(uniform_map));
817 EXPECT_CALL(shader_translator, varying_map())
818 .WillRepeatedly(ReturnRef(varying_map));
819 ShaderTranslator::NameMap name_map;
820 EXPECT_CALL(shader_translator, name_map())
821 .WillRepeatedly(ReturnRef(name_map));
822 const GLuint kVShaderClientId = 2001; 796 const GLuint kVShaderClientId = 2001;
823 const GLuint kFShaderClientId = 2002; 797 const GLuint kFShaderClientId = 2002;
824 const GLuint kVShaderServiceId = 3001; 798 const GLuint kVShaderServiceId = 3001;
825 const GLuint kFShaderServiceId = 3002; 799 const GLuint kFShaderServiceId = 3002;
826 Shader* vshader = shader_manager_.CreateShader( 800 Shader* vshader = shader_manager_.CreateShader(
827 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 801 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
828 ASSERT_TRUE(vshader != NULL); 802 ASSERT_TRUE(vshader != NULL);
829 vshader->SetStatus(true, "", &shader_translator); 803 TestHelper::SetShaderStates(
804 gl_.get(), vshader, true, NULL, NULL,
805 &attrib_map, &uniform_map, &varying_map, NULL);
830 Shader* fshader = shader_manager_.CreateShader( 806 Shader* fshader = shader_manager_.CreateShader(
831 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 807 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
832 ASSERT_TRUE(fshader != NULL); 808 ASSERT_TRUE(fshader != NULL);
833 fshader->SetStatus(true, "", &shader_translator); 809 TestHelper::SetShaderStates(
810 gl_.get(), fshader, true, NULL, NULL,
811 &attrib_map, &uniform_map, &varying_map, NULL);
834 static ProgramManagerWithShaderTest::AttribInfo kAttribs[] = { 812 static ProgramManagerWithShaderTest::AttribInfo kAttribs[] = {
835 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, 813 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, },
836 { kAttrib2Name, kAttrib2Size, kAttrib2BadType, kAttrib2Location, }, 814 { kAttrib2Name, kAttrib2Size, kAttrib2BadType, kAttrib2Location, },
837 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, 815 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, },
838 }; 816 };
839 static ProgramManagerWithShaderTest::UniformInfo kUniforms[] = { 817 static ProgramManagerWithShaderTest::UniformInfo kUniforms[] = {
840 { kUniform1Name, 818 { kUniform1Name,
841 kUniform1Size, 819 kUniform1Size,
842 kUniform1Type, 820 kUniform1Type,
843 kUniform1FakeLocation, 821 kUniform1FakeLocation,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 kClientProgramId, kServiceProgramId); 889 kClientProgramId, kServiceProgramId);
912 ASSERT_TRUE(program != NULL); 890 ASSERT_TRUE(program != NULL);
913 EXPECT_FALSE(program->CanLink()); 891 EXPECT_FALSE(program->CanLink());
914 const GLuint kVShaderClientId = 2001; 892 const GLuint kVShaderClientId = 2001;
915 const GLuint kFShaderClientId = 2002; 893 const GLuint kFShaderClientId = 2002;
916 const GLuint kVShaderServiceId = 3001; 894 const GLuint kVShaderServiceId = 3001;
917 const GLuint kFShaderServiceId = 3002; 895 const GLuint kFShaderServiceId = 3002;
918 Shader* vshader = shader_manager_.CreateShader( 896 Shader* vshader = shader_manager_.CreateShader(
919 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 897 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
920 ASSERT_TRUE(vshader != NULL); 898 ASSERT_TRUE(vshader != NULL);
921 vshader->SetStatus(true, "", NULL); 899 TestHelper::SetShaderStates(gl_.get(), vshader, true);
922 Shader* fshader = shader_manager_.CreateShader( 900 Shader* fshader = shader_manager_.CreateShader(
923 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 901 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
924 ASSERT_TRUE(fshader != NULL); 902 ASSERT_TRUE(fshader != NULL);
925 fshader->SetStatus(true, "", NULL); 903 TestHelper::SetShaderStates(gl_.get(), fshader, true);
926 EXPECT_FALSE(vshader->InUse()); 904 EXPECT_FALSE(vshader->InUse());
927 EXPECT_FALSE(fshader->InUse()); 905 EXPECT_FALSE(fshader->InUse());
928 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 906 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
929 EXPECT_TRUE(vshader->InUse()); 907 EXPECT_TRUE(vshader->InUse());
930 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 908 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
931 EXPECT_TRUE(fshader->InUse()); 909 EXPECT_TRUE(fshader->InUse());
932 EXPECT_TRUE(program->CanLink()); 910 EXPECT_TRUE(program->CanLink());
933 EXPECT_FALSE(program->InUse()); 911 EXPECT_FALSE(program->InUse());
934 EXPECT_FALSE(program->IsDeleted()); 912 EXPECT_FALSE(program->IsDeleted());
935 manager_.UseProgram(program); 913 manager_.UseProgram(program);
(...skipping 24 matching lines...) Expand all
960 kClientProgramId, kServiceProgramId); 938 kClientProgramId, kServiceProgramId);
961 ASSERT_TRUE(program != NULL); 939 ASSERT_TRUE(program != NULL);
962 EXPECT_FALSE(program->CanLink()); 940 EXPECT_FALSE(program->CanLink());
963 const GLuint kVShaderClientId = 2001; 941 const GLuint kVShaderClientId = 2001;
964 const GLuint kFShaderClientId = 2002; 942 const GLuint kFShaderClientId = 2002;
965 const GLuint kVShaderServiceId = 3001; 943 const GLuint kVShaderServiceId = 3001;
966 const GLuint kFShaderServiceId = 3002; 944 const GLuint kFShaderServiceId = 3002;
967 Shader* vshader = shader_manager_.CreateShader( 945 Shader* vshader = shader_manager_.CreateShader(
968 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 946 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
969 ASSERT_TRUE(vshader != NULL); 947 ASSERT_TRUE(vshader != NULL);
970 vshader->SetStatus(true, "", NULL); 948 TestHelper::SetShaderStates(gl_.get(), vshader, true);
971 Shader* fshader = shader_manager_.CreateShader( 949 Shader* fshader = shader_manager_.CreateShader(
972 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 950 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
973 ASSERT_TRUE(fshader != NULL); 951 ASSERT_TRUE(fshader != NULL);
974 fshader->SetStatus(true, "", NULL); 952 TestHelper::SetShaderStates(gl_.get(), fshader, true);
975 EXPECT_FALSE(vshader->InUse()); 953 EXPECT_FALSE(vshader->InUse());
976 EXPECT_FALSE(fshader->InUse()); 954 EXPECT_FALSE(fshader->InUse());
977 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 955 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
978 EXPECT_TRUE(vshader->InUse()); 956 EXPECT_TRUE(vshader->InUse());
979 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 957 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
980 EXPECT_TRUE(fshader->InUse()); 958 EXPECT_TRUE(fshader->InUse());
981 EXPECT_TRUE(program->CanLink()); 959 EXPECT_TRUE(program->CanLink());
982 EXPECT_FALSE(program->InUse()); 960 EXPECT_FALSE(program->InUse());
983 EXPECT_FALSE(program->IsDeleted()); 961 EXPECT_FALSE(program->IsDeleted());
984 manager_.UseProgram(program); 962 manager_.UseProgram(program);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 ++input; 1079 ++input;
1102 } 1080 }
1103 } 1081 }
1104 1082
1105 TEST_F(ProgramManagerWithShaderTest, BindAttribLocationConflicts) { 1083 TEST_F(ProgramManagerWithShaderTest, BindAttribLocationConflicts) {
1106 // Set up shader 1084 // Set up shader
1107 const GLuint kVShaderClientId = 1; 1085 const GLuint kVShaderClientId = 1;
1108 const GLuint kVShaderServiceId = 11; 1086 const GLuint kVShaderServiceId = 11;
1109 const GLuint kFShaderClientId = 2; 1087 const GLuint kFShaderClientId = 2;
1110 const GLuint kFShaderServiceId = 12; 1088 const GLuint kFShaderServiceId = 12;
1111 MockShaderTranslator shader_translator;
1112 ShaderTranslator::VariableMap attrib_map; 1089 ShaderTranslator::VariableMap attrib_map;
1113 for (uint32 ii = 0; ii < kNumAttribs; ++ii) { 1090 for (uint32 ii = 0; ii < kNumAttribs; ++ii) {
1114 attrib_map[kAttribs[ii].name] = ShaderTranslatorInterface::VariableInfo( 1091 attrib_map[kAttribs[ii].name] = ShaderTranslatorInterface::VariableInfo(
1115 kAttribs[ii].type, 1092 kAttribs[ii].type,
1116 kAttribs[ii].size, 1093 kAttribs[ii].size,
1117 SH_PRECISION_MEDIUMP, 1094 SH_PRECISION_MEDIUMP,
1118 kAttribStaticUse, 1095 kAttribStaticUse,
1119 kAttribs[ii].name); 1096 kAttribs[ii].name);
1120 } 1097 }
1121 ShaderTranslator::VariableMap uniform_map;
1122 ShaderTranslator::VariableMap varying_map;
1123 EXPECT_CALL(shader_translator, attrib_map())
1124 .WillRepeatedly(ReturnRef(attrib_map));
1125 EXPECT_CALL(shader_translator, uniform_map())
1126 .WillRepeatedly(ReturnRef(uniform_map));
1127 EXPECT_CALL(shader_translator, varying_map())
1128 .WillRepeatedly(ReturnRef(varying_map));
1129 ShaderTranslator::NameMap name_map;
1130 EXPECT_CALL(shader_translator, name_map())
1131 .WillRepeatedly(ReturnRef(name_map));
1132 // Check we can create shader. 1098 // Check we can create shader.
1133 Shader* vshader = shader_manager_.CreateShader( 1099 Shader* vshader = shader_manager_.CreateShader(
1134 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 1100 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
1135 Shader* fshader = shader_manager_.CreateShader( 1101 Shader* fshader = shader_manager_.CreateShader(
1136 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 1102 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
1137 // Check shader got created. 1103 // Check shader got created.
1138 ASSERT_TRUE(vshader != NULL && fshader != NULL); 1104 ASSERT_TRUE(vshader != NULL && fshader != NULL);
1139 // Set Status 1105 // Set Status
1140 vshader->SetStatus(true, "", &shader_translator); 1106 TestHelper::SetShaderStates(
1107 gl_.get(), vshader, true, NULL, NULL, &attrib_map, NULL, NULL, NULL);
1141 // Check attrib infos got copied. 1108 // Check attrib infos got copied.
1142 for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin(); 1109 for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin();
1143 it != attrib_map.end(); ++it) { 1110 it != attrib_map.end(); ++it) {
1144 const Shader::VariableInfo* variable_info = 1111 const Shader::VariableInfo* variable_info =
1145 vshader->GetAttribInfo(it->first); 1112 vshader->GetAttribInfo(it->first);
1146 ASSERT_TRUE(variable_info != NULL); 1113 ASSERT_TRUE(variable_info != NULL);
1147 EXPECT_EQ(it->second.type, variable_info->type); 1114 EXPECT_EQ(it->second.type, variable_info->type);
1148 EXPECT_EQ(it->second.size, variable_info->size); 1115 EXPECT_EQ(it->second.size, variable_info->size);
1149 EXPECT_EQ(it->second.precision, variable_info->precision); 1116 EXPECT_EQ(it->second.precision, variable_info->precision);
1150 EXPECT_EQ(it->second.static_use, variable_info->static_use); 1117 EXPECT_EQ(it->second.static_use, variable_info->static_use);
1151 EXPECT_EQ(it->second.name, variable_info->name); 1118 EXPECT_EQ(it->second.name, variable_info->name);
1152 } 1119 }
1153 fshader->SetStatus(true, "", NULL); 1120 TestHelper::SetShaderStates(
1121 gl_.get(), fshader, true, NULL, NULL, &attrib_map, NULL, NULL, NULL);
1154 1122
1155 // Set up program 1123 // Set up program
1156 const GLuint kClientProgramId = 6666; 1124 const GLuint kClientProgramId = 6666;
1157 const GLuint kServiceProgramId = 8888; 1125 const GLuint kServiceProgramId = 8888;
1158 Program* program = 1126 Program* program =
1159 manager_.CreateProgram(kClientProgramId, kServiceProgramId); 1127 manager_.CreateProgram(kClientProgramId, kServiceProgramId);
1160 ASSERT_TRUE(program != NULL); 1128 ASSERT_TRUE(program != NULL);
1161 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 1129 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
1162 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 1130 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
1163 1131
(...skipping 17 matching lines...) Expand all
1181 EXPECT_TRUE(LinkAsExpected(program, false)); 1149 EXPECT_TRUE(LinkAsExpected(program, false));
1182 } 1150 }
1183 1151
1184 TEST_F(ProgramManagerWithShaderTest, UniformsPrecisionMismatch) { 1152 TEST_F(ProgramManagerWithShaderTest, UniformsPrecisionMismatch) {
1185 // Set up shader 1153 // Set up shader
1186 const GLuint kVShaderClientId = 1; 1154 const GLuint kVShaderClientId = 1;
1187 const GLuint kVShaderServiceId = 11; 1155 const GLuint kVShaderServiceId = 11;
1188 const GLuint kFShaderClientId = 2; 1156 const GLuint kFShaderClientId = 2;
1189 const GLuint kFShaderServiceId = 12; 1157 const GLuint kFShaderServiceId = 12;
1190 1158
1191 MockShaderTranslator vertex_shader_translator;
1192 ShaderTranslator::VariableMap vertex_attrib_map;
1193 ShaderTranslator::VariableMap vertex_uniform_map; 1159 ShaderTranslator::VariableMap vertex_uniform_map;
1194 vertex_uniform_map["a"] = ShaderTranslator::VariableInfo( 1160 vertex_uniform_map["a"] = ShaderTranslator::VariableInfo(
1195 1, 3, SH_PRECISION_MEDIUMP, 1, "a"); 1161 1, 3, SH_PRECISION_MEDIUMP, 1, "a");
1196 ShaderTranslator::VariableMap vertex_varying_map;
1197 ShaderTranslator::NameMap vertex_name_map;
1198 EXPECT_CALL(vertex_shader_translator, attrib_map())
1199 .WillRepeatedly(ReturnRef(vertex_attrib_map));
1200 EXPECT_CALL(vertex_shader_translator, uniform_map())
1201 .WillRepeatedly(ReturnRef(vertex_uniform_map));
1202 EXPECT_CALL(vertex_shader_translator, varying_map())
1203 .WillRepeatedly(ReturnRef(vertex_varying_map));
1204 EXPECT_CALL(vertex_shader_translator, name_map())
1205 .WillRepeatedly(ReturnRef(vertex_name_map));
1206
1207 MockShaderTranslator frag_shader_translator;
1208 ShaderTranslator::VariableMap frag_attrib_map;
1209 ShaderTranslator::VariableMap frag_uniform_map; 1162 ShaderTranslator::VariableMap frag_uniform_map;
1210 frag_uniform_map["a"] = ShaderTranslator::VariableInfo( 1163 frag_uniform_map["a"] = ShaderTranslator::VariableInfo(
1211 1, 3, SH_PRECISION_LOWP, 1, "a"); 1164 1, 3, SH_PRECISION_LOWP, 1, "a");
1212 ShaderTranslator::VariableMap frag_varying_map;
1213 ShaderTranslator::NameMap frag_name_map;
1214 EXPECT_CALL(frag_shader_translator, attrib_map())
1215 .WillRepeatedly(ReturnRef(frag_attrib_map));
1216 EXPECT_CALL(frag_shader_translator, uniform_map())
1217 .WillRepeatedly(ReturnRef(frag_uniform_map));
1218 EXPECT_CALL(frag_shader_translator, varying_map())
1219 .WillRepeatedly(ReturnRef(frag_varying_map));
1220 EXPECT_CALL(frag_shader_translator, name_map())
1221 .WillRepeatedly(ReturnRef(frag_name_map));
1222 1165
1223 // Check we can create shader. 1166 // Check we can create shader.
1224 Shader* vshader = shader_manager_.CreateShader( 1167 Shader* vshader = shader_manager_.CreateShader(
1225 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 1168 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
1226 Shader* fshader = shader_manager_.CreateShader( 1169 Shader* fshader = shader_manager_.CreateShader(
1227 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 1170 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
1228 // Check shader got created. 1171 // Check shader got created.
1229 ASSERT_TRUE(vshader != NULL && fshader != NULL); 1172 ASSERT_TRUE(vshader != NULL && fshader != NULL);
1230 // Set Status 1173 // Set Status
1231 vshader->SetStatus(true, "", &vertex_shader_translator); 1174 TestHelper::SetShaderStates(
1232 fshader->SetStatus(true, "", &frag_shader_translator); 1175 gl_.get(), vshader, true, NULL, NULL, NULL,
1176 &vertex_uniform_map, NULL, NULL);
1177 TestHelper::SetShaderStates(
1178 gl_.get(), fshader, true, NULL, NULL, NULL,
1179 &frag_uniform_map, NULL, NULL);
1233 1180
1234 // Set up program 1181 // Set up program
1235 const GLuint kClientProgramId = 6666; 1182 const GLuint kClientProgramId = 6666;
1236 const GLuint kServiceProgramId = 8888; 1183 const GLuint kServiceProgramId = 8888;
1237 Program* program = 1184 Program* program =
1238 manager_.CreateProgram(kClientProgramId, kServiceProgramId); 1185 manager_.CreateProgram(kClientProgramId, kServiceProgramId);
1239 ASSERT_TRUE(program != NULL); 1186 ASSERT_TRUE(program != NULL);
1240 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 1187 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
1241 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 1188 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
1242 1189
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
1401 } 1348 }
1402 1349
1403 TEST_F(ProgramManagerWithShaderTest, ClearWithSamplerTypes) { 1350 TEST_F(ProgramManagerWithShaderTest, ClearWithSamplerTypes) {
1404 const GLuint kVShaderClientId = 2001; 1351 const GLuint kVShaderClientId = 2001;
1405 const GLuint kFShaderClientId = 2002; 1352 const GLuint kFShaderClientId = 2002;
1406 const GLuint kVShaderServiceId = 3001; 1353 const GLuint kVShaderServiceId = 3001;
1407 const GLuint kFShaderServiceId = 3002; 1354 const GLuint kFShaderServiceId = 3002;
1408 Shader* vshader = shader_manager_.CreateShader( 1355 Shader* vshader = shader_manager_.CreateShader(
1409 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 1356 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
1410 ASSERT_TRUE(vshader != NULL); 1357 ASSERT_TRUE(vshader != NULL);
1411 vshader->SetStatus(true, NULL, NULL); 1358 TestHelper::SetShaderStates(gl_.get(), vshader, true);
1412 Shader* fshader = shader_manager_.CreateShader( 1359 Shader* fshader = shader_manager_.CreateShader(
1413 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 1360 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
1414 ASSERT_TRUE(fshader != NULL); 1361 ASSERT_TRUE(fshader != NULL);
1415 fshader->SetStatus(true, NULL, NULL); 1362 TestHelper::SetShaderStates(gl_.get(), fshader, true);
1416 static const GLuint kClientProgramId = 1234; 1363 static const GLuint kClientProgramId = 1234;
1417 static const GLuint kServiceProgramId = 5679; 1364 static const GLuint kServiceProgramId = 5679;
1418 Program* program = manager_.CreateProgram( 1365 Program* program = manager_.CreateProgram(
1419 kClientProgramId, kServiceProgramId); 1366 kClientProgramId, kServiceProgramId);
1420 ASSERT_TRUE(program != NULL); 1367 ASSERT_TRUE(program != NULL);
1421 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 1368 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
1422 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 1369 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
1423 1370
1424 static const GLenum kSamplerTypes[] = { 1371 static const GLenum kSamplerTypes[] = {
1425 GL_SAMPLER_2D, 1372 GL_SAMPLER_2D,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1478 const GLuint kVShaderServiceId = 3001; 1425 const GLuint kVShaderServiceId = 3001;
1479 const GLuint kFShaderServiceId = 3002; 1426 const GLuint kFShaderServiceId = 3002;
1480 1427
1481 const GLint kUniform1DesiredLocation = 10; 1428 const GLint kUniform1DesiredLocation = 10;
1482 const GLint kUniform2DesiredLocation = -1; 1429 const GLint kUniform2DesiredLocation = -1;
1483 const GLint kUniform3DesiredLocation = 5; 1430 const GLint kUniform3DesiredLocation = 5;
1484 1431
1485 Shader* vshader = shader_manager_.CreateShader( 1432 Shader* vshader = shader_manager_.CreateShader(
1486 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); 1433 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER);
1487 ASSERT_TRUE(vshader != NULL); 1434 ASSERT_TRUE(vshader != NULL);
1488 vshader->SetStatus(true, NULL, NULL); 1435 TestHelper::SetShaderStates(gl_.get(), vshader, true);
1489 Shader* fshader = shader_manager_.CreateShader( 1436 Shader* fshader = shader_manager_.CreateShader(
1490 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 1437 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
1491 ASSERT_TRUE(fshader != NULL); 1438 ASSERT_TRUE(fshader != NULL);
1492 fshader->SetStatus(true, NULL, NULL); 1439 TestHelper::SetShaderStates(gl_.get(), fshader, true);
1493 static const GLuint kClientProgramId = 1234; 1440 static const GLuint kClientProgramId = 1234;
1494 static const GLuint kServiceProgramId = 5679; 1441 static const GLuint kServiceProgramId = 5679;
1495 Program* program = manager_.CreateProgram( 1442 Program* program = manager_.CreateProgram(
1496 kClientProgramId, kServiceProgramId); 1443 kClientProgramId, kServiceProgramId);
1497 ASSERT_TRUE(program != NULL); 1444 ASSERT_TRUE(program != NULL);
1498 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 1445 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
1499 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 1446 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
1500 EXPECT_TRUE(program->SetUniformLocationBinding( 1447 EXPECT_TRUE(program->SetUniformLocationBinding(
1501 kUniform1Name, kUniform1DesiredLocation)); 1448 kUniform1Name, kUniform1DesiredLocation));
1502 EXPECT_TRUE(program->SetUniformLocationBinding( 1449 EXPECT_TRUE(program->SetUniformLocationBinding(
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1573 protected: 1520 protected:
1574 virtual void SetUp() { 1521 virtual void SetUp() {
1575 GpuServiceTest::SetUp(); 1522 GpuServiceTest::SetUp();
1576 1523
1577 vertex_shader_ = shader_manager_.CreateShader( 1524 vertex_shader_ = shader_manager_.CreateShader(
1578 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER); 1525 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER);
1579 fragment_shader_ = shader_manager_.CreateShader( 1526 fragment_shader_ = shader_manager_.CreateShader(
1580 kFragmentShaderClientId, kFragmentShaderServiceId, GL_FRAGMENT_SHADER); 1527 kFragmentShaderClientId, kFragmentShaderServiceId, GL_FRAGMENT_SHADER);
1581 ASSERT_TRUE(vertex_shader_ != NULL); 1528 ASSERT_TRUE(vertex_shader_ != NULL);
1582 ASSERT_TRUE(fragment_shader_ != NULL); 1529 ASSERT_TRUE(fragment_shader_ != NULL);
1583 vertex_shader_->UpdateSource("lka asjf bjajsdfj"); 1530 vertex_shader_->set_source("lka asjf bjajsdfj");
1584 fragment_shader_->UpdateSource("lka asjf a fasgag 3rdsf3 bjajsdfj"); 1531 fragment_shader_->set_source("lka asjf a fasgag 3rdsf3 bjajsdfj");
1585 1532
1586 program_ = manager_.CreateProgram( 1533 program_ = manager_.CreateProgram(
1587 kClientProgramId, kServiceProgramId); 1534 kClientProgramId, kServiceProgramId);
1588 ASSERT_TRUE(program_ != NULL); 1535 ASSERT_TRUE(program_ != NULL);
1589 1536
1590 program_->AttachShader(&shader_manager_, vertex_shader_); 1537 program_->AttachShader(&shader_manager_, vertex_shader_);
1591 program_->AttachShader(&shader_manager_, fragment_shader_); 1538 program_->AttachShader(&shader_manager_, fragment_shader_);
1592 } 1539 }
1593 1540
1594 void SetShadersCompiled() { 1541 void SetShadersCompiled() {
1595 vertex_shader_->SetStatus(true, NULL, NULL); 1542 TestHelper::SetShaderStates(gl_.get(), vertex_shader_, true);
1596 fragment_shader_->SetStatus(true, NULL, NULL); 1543 TestHelper::SetShaderStates(gl_.get(), fragment_shader_, true);
1597 } 1544 }
1598 1545
1599 void SetProgramCached() { 1546 void SetProgramCached() {
1600 cache_->LinkedProgramCacheSuccess( 1547 cache_->LinkedProgramCacheSuccess(
1601 vertex_shader_->source()->c_str(), 1548 vertex_shader_->source(),
1602 NULL, 1549 NULL,
1603 fragment_shader_->source()->c_str(), 1550 fragment_shader_->source(),
1604 NULL, 1551 NULL,
1605 &program_->bind_attrib_location_map()); 1552 &program_->bind_attrib_location_map());
1606 } 1553 }
1607 1554
1608 void SetExpectationsForProgramCached() { 1555 void SetExpectationsForProgramCached() {
1609 SetExpectationsForProgramCached(program_, 1556 SetExpectationsForProgramCached(program_,
1610 vertex_shader_, 1557 vertex_shader_,
1611 fragment_shader_); 1558 fragment_shader_);
1612 } 1559 }
1613 1560
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1693 EXPECT_CALL(*gl_.get(), 1640 EXPECT_CALL(*gl_.get(),
1694 ProgramParameteri(service_program_id, 1641 ProgramParameteri(service_program_id,
1695 PROGRAM_BINARY_RETRIEVABLE_HINT, 1642 PROGRAM_BINARY_RETRIEVABLE_HINT,
1696 GL_TRUE)).Times(1); 1643 GL_TRUE)).Times(1);
1697 } 1644 }
1698 } 1645 }
1699 1646
1700 void SetExpectationsForSuccessCompile( 1647 void SetExpectationsForSuccessCompile(
1701 const Shader* shader) { 1648 const Shader* shader) {
1702 const GLuint shader_id = shader->service_id(); 1649 const GLuint shader_id = shader->service_id();
1703 const char* src = shader->source()->c_str(); 1650 const char* src = shader->source().c_str();
1704 EXPECT_CALL(*gl_.get(), 1651 EXPECT_CALL(*gl_.get(),
1705 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1); 1652 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1);
1706 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1); 1653 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1);
1707 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) 1654 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _))
1708 .WillOnce(SetArgumentPointee<2>(GL_TRUE)); 1655 .WillOnce(SetArgumentPointee<2>(GL_TRUE));
1709 } 1656 }
1710 1657
1711 void SetExpectationsForNoCompile(const Shader* shader) { 1658 void SetExpectationsForNoCompile(const Shader* shader) {
1712 const GLuint shader_id = shader->service_id(); 1659 const GLuint shader_id = shader->service_id();
1713 const char* src = shader->source()->c_str(); 1660 const char* src = shader->source().c_str();
1714 EXPECT_CALL(*gl_.get(), 1661 EXPECT_CALL(*gl_.get(),
1715 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(0); 1662 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(0);
1716 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(0); 1663 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(0);
1717 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) 1664 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _))
1718 .Times(0); 1665 .Times(0);
1719 } 1666 }
1720 1667
1721 void SetExpectationsForErrorCompile(const Shader* shader) { 1668 void SetExpectationsForErrorCompile(const Shader* shader) {
1722 const GLuint shader_id = shader->service_id(); 1669 const GLuint shader_id = shader->service_id();
1723 const char* src = shader->source()->c_str(); 1670 const char* src = shader->source().c_str();
1724 EXPECT_CALL(*gl_.get(), 1671 EXPECT_CALL(*gl_.get(),
1725 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1); 1672 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1);
1726 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1); 1673 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1);
1727 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) 1674 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _))
1728 .WillOnce(SetArgumentPointee<2>(GL_FALSE)); 1675 .WillOnce(SetArgumentPointee<2>(GL_FALSE));
1729 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_INFO_LOG_LENGTH, _)) 1676 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_INFO_LOG_LENGTH, _))
1730 .WillOnce(SetArgumentPointee<2>(0)); 1677 .WillOnce(SetArgumentPointee<2>(0));
1731 EXPECT_CALL(*gl_.get(), GetShaderInfoLog(shader_id, 0, _, _)) 1678 EXPECT_CALL(*gl_.get(), GetShaderInfoLog(shader_id, 0, _, _))
1732 .Times(1); 1679 .Times(1);
1733 } 1680 }
1734 1681
1735 scoped_ptr<MockProgramCache> cache_; 1682 scoped_ptr<MockProgramCache> cache_;
1736 ProgramManager manager_; 1683 ProgramManager manager_;
1737 1684
1738 Shader* vertex_shader_; 1685 Shader* vertex_shader_;
1739 Shader* fragment_shader_; 1686 Shader* fragment_shader_;
1740 Program* program_; 1687 Program* program_;
1741 ShaderManager shader_manager_; 1688 ShaderManager shader_manager_;
1742 }; 1689 };
(...skipping 25 matching lines...) Expand all
1768 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); 1715 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS);
1769 SetExpectationsForNotCachingProgram(); 1716 SetExpectationsForNotCachingProgram();
1770 SetExpectationsForProgramLoadSuccess(); 1717 SetExpectationsForProgramLoadSuccess();
1771 1718
1772 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, 1719 EXPECT_TRUE(program_->Link(NULL, NULL, NULL,
1773 Program::kCountOnlyStaticallyUsed, base::Bind(&ShaderCacheCb))); 1720 Program::kCountOnlyStaticallyUsed, base::Bind(&ShaderCacheCb)));
1774 } 1721 }
1775 1722
1776 } // namespace gles2 1723 } // namespace gles2
1777 } // namespace gpu 1724 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | gpu/command_buffer/service/shader_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698