| 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/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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |