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 |