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

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

Issue 159183002: Revert 250146 "Merge 249460 "Hookup clear_uniforms_before_first_..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1750/src/
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | gpu/config/gpu_driver_bug_list_json.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/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 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 ASSERT_TRUE(fragment_shader != NULL); 243 ASSERT_TRUE(fragment_shader != NULL);
244 vertex_shader->SetStatus(true, NULL, NULL); 244 vertex_shader->SetStatus(true, NULL, NULL);
245 fragment_shader->SetStatus(true, NULL, NULL); 245 fragment_shader->SetStatus(true, NULL, NULL);
246 246
247 program_ = manager_.CreateProgram( 247 program_ = manager_.CreateProgram(
248 kClientProgramId, kServiceProgramId); 248 kClientProgramId, kServiceProgramId);
249 ASSERT_TRUE(program_ != NULL); 249 ASSERT_TRUE(program_ != NULL);
250 250
251 program_->AttachShader(&shader_manager_, vertex_shader); 251 program_->AttachShader(&shader_manager_, vertex_shader);
252 program_->AttachShader(&shader_manager_, fragment_shader); 252 program_->AttachShader(&shader_manager_, fragment_shader);
253 program_->Link(NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 253 program_->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
254 } 254 }
255 255
256 void SetupShader(AttribInfo* attribs, size_t num_attribs, 256 void SetupShader(AttribInfo* attribs, size_t num_attribs,
257 UniformInfo* uniforms, size_t num_uniforms, 257 UniformInfo* uniforms, size_t num_uniforms,
258 GLuint service_id) { 258 GLuint service_id) {
259 TestHelper::SetupShader( 259 TestHelper::SetupShader(
260 gl_.get(), attribs, num_attribs, uniforms, num_uniforms, service_id); 260 gl_.get(), attribs, num_attribs, uniforms, num_uniforms, service_id);
261 } 261 }
262 262
263 void SetupDefaultShaderExpectations() { 263 void SetupDefaultShaderExpectations() {
(...skipping 12 matching lines...) Expand all
276 } 276 }
277 277
278 // Return true if link status matches expected_link_status 278 // Return true if link status matches expected_link_status
279 bool LinkAsExpected(Program* program, 279 bool LinkAsExpected(Program* program,
280 bool expected_link_status) { 280 bool expected_link_status) {
281 GLuint service_id = program->service_id(); 281 GLuint service_id = program->service_id();
282 if (expected_link_status) { 282 if (expected_link_status) {
283 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 283 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
284 service_id); 284 service_id);
285 } 285 }
286 program->Link(NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 286 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
287 GLint link_status; 287 GLint link_status;
288 program->GetProgramiv(GL_LINK_STATUS, &link_status); 288 program->GetProgramiv(GL_LINK_STATUS, &link_status);
289 return (static_cast<bool>(link_status) == expected_link_status); 289 return (static_cast<bool>(link_status) == expected_link_status);
290 } 290 }
291 291
292 Program* SetupShaderVariableTest(const VarInfo* vertex_variables, 292 Program* SetupShaderVariableTest(const VarInfo* vertex_variables,
293 size_t vertex_variable_size, 293 size_t vertex_variable_size,
294 const VarInfo* fragment_variables, 294 const VarInfo* fragment_variables,
295 size_t fragment_variable_size) { 295 size_t fragment_variable_size) {
296 // Set up shader 296 // Set up shader
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 vshader->SetStatus(true, "", NULL); 713 vshader->SetStatus(true, "", NULL);
714 Shader* fshader = shader_manager_.CreateShader( 714 Shader* fshader = shader_manager_.CreateShader(
715 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 715 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
716 ASSERT_TRUE(fshader != NULL); 716 ASSERT_TRUE(fshader != NULL);
717 fshader->SetStatus(true, "", NULL); 717 fshader->SetStatus(true, "", NULL);
718 Program* program = 718 Program* program =
719 manager_.CreateProgram(kClientProgramId, kServiceProgramId); 719 manager_.CreateProgram(kClientProgramId, kServiceProgramId);
720 ASSERT_TRUE(program != NULL); 720 ASSERT_TRUE(program != NULL);
721 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 721 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
722 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 722 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
723 program->Link(NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 723 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
724 GLint value = 0; 724 GLint value = 0;
725 program->GetProgramiv(GL_ACTIVE_ATTRIBUTES, &value); 725 program->GetProgramiv(GL_ACTIVE_ATTRIBUTES, &value);
726 EXPECT_EQ(3, value); 726 EXPECT_EQ(3, value);
727 // Check that we skipped the "gl_" uniform. 727 // Check that we skipped the "gl_" uniform.
728 program->GetProgramiv(GL_ACTIVE_UNIFORMS, &value); 728 program->GetProgramiv(GL_ACTIVE_UNIFORMS, &value);
729 EXPECT_EQ(2, value); 729 EXPECT_EQ(2, value);
730 // Check that our max length adds room for the array spec and is not as long 730 // Check that our max length adds room for the array spec and is not as long
731 // as the "gl_" uniform we skipped. 731 // as the "gl_" uniform we skipped.
732 // +4u is to account for "gl_" and NULL terminator. 732 // +4u is to account for "gl_" and NULL terminator.
733 program->GetProgramiv(GL_ACTIVE_UNIFORM_MAX_LENGTH, &value); 733 program->GetProgramiv(GL_ACTIVE_UNIFORM_MAX_LENGTH, &value);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 vshader->SetStatus(true, "", NULL); 781 vshader->SetStatus(true, "", NULL);
782 Shader* fshader = shader_manager_.CreateShader( 782 Shader* fshader = shader_manager_.CreateShader(
783 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); 783 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER);
784 ASSERT_TRUE(fshader != NULL); 784 ASSERT_TRUE(fshader != NULL);
785 fshader->SetStatus(true, "", NULL); 785 fshader->SetStatus(true, "", NULL);
786 Program* program = 786 Program* program =
787 manager_.CreateProgram(kClientProgramId, kServiceProgramId); 787 manager_.CreateProgram(kClientProgramId, kServiceProgramId);
788 ASSERT_TRUE(program != NULL); 788 ASSERT_TRUE(program != NULL);
789 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 789 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
790 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 790 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
791 program->Link(NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 791 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
792 792
793 // Check that we get the correct locations. 793 // Check that we get the correct locations.
794 EXPECT_EQ(kUniform2FakeLocation, 794 EXPECT_EQ(kUniform2FakeLocation,
795 program->GetUniformFakeLocation(kUniform2Name)); 795 program->GetUniformFakeLocation(kUniform2Name));
796 EXPECT_EQ(kUniform3FakeLocation, 796 EXPECT_EQ(kUniform3FakeLocation,
797 program->GetUniformFakeLocation(kUniform3Name)); 797 program->GetUniformFakeLocation(kUniform3Name));
798 } 798 }
799 799
800 // Some GL drivers incorrectly return the wrong type. For example they return 800 // Some GL drivers incorrectly return the wrong type. For example they return
801 // GL_FLOAT_VEC2 when they should return GL_FLOAT_MAT2. Check we handle this. 801 // GL_FLOAT_VEC2 when they should return GL_FLOAT_MAT2. Check we handle this.
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 const size_t kNumUniforms = arraysize(kUniforms); 882 const size_t kNumUniforms = arraysize(kUniforms);
883 static const GLuint kClientProgramId = 1234; 883 static const GLuint kClientProgramId = 1234;
884 static const GLuint kServiceProgramId = 5679; 884 static const GLuint kServiceProgramId = 5679;
885 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 885 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
886 kServiceProgramId); 886 kServiceProgramId);
887 Program* program = manager_.CreateProgram( 887 Program* program = manager_.CreateProgram(
888 kClientProgramId, kServiceProgramId); 888 kClientProgramId, kServiceProgramId);
889 ASSERT_TRUE(program!= NULL); 889 ASSERT_TRUE(program!= NULL);
890 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader)); 890 EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
891 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader)); 891 EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
892 program->Link(NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 892 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
893 // Check that we got the good type, not the bad. 893 // Check that we got the good type, not the bad.
894 // Check Attribs 894 // Check Attribs
895 for (unsigned index = 0; index < kNumAttribs; ++index) { 895 for (unsigned index = 0; index < kNumAttribs; ++index) {
896 const Program::VertexAttrib* attrib_info = 896 const Program::VertexAttrib* attrib_info =
897 program->GetAttribInfo(index); 897 program->GetAttribInfo(index);
898 ASSERT_TRUE(attrib_info != NULL); 898 ASSERT_TRUE(attrib_info != NULL);
899 ShaderTranslator::VariableMap::const_iterator it = attrib_map.find( 899 ShaderTranslator::VariableMap::const_iterator it = attrib_map.find(
900 attrib_info->name); 900 attrib_info->name);
901 ASSERT_TRUE(it != attrib_map.end()); 901 ASSERT_TRUE(it != attrib_map.end());
902 EXPECT_EQ(it->first, attrib_info->name); 902 EXPECT_EQ(it->first, attrib_info->name);
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
1433 kUniform3FakeLocation, 1433 kUniform3FakeLocation,
1434 kUniform3RealLocation, 1434 kUniform3RealLocation,
1435 kUniform3DesiredLocation, 1435 kUniform3DesiredLocation,
1436 kUniform3GoodName, 1436 kUniform3GoodName,
1437 }, 1437 },
1438 }; 1438 };
1439 const size_t kNumAttribs = arraysize(kAttribs); 1439 const size_t kNumAttribs = arraysize(kAttribs);
1440 const size_t kNumUniforms = arraysize(kUniforms); 1440 const size_t kNumUniforms = arraysize(kUniforms);
1441 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 1441 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
1442 kServiceProgramId); 1442 kServiceProgramId);
1443 program->Link(NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 1443 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
1444 SetupExpectationsForClearingUniforms(kUniforms, kNumUniforms); 1444 SetupExpectationsForClearingUniforms(kUniforms, kNumUniforms);
1445 manager_.ClearUniforms(program); 1445 manager_.ClearUniforms(program);
1446 } 1446 }
1447 } 1447 }
1448 1448
1449 TEST_F(ProgramManagerWithShaderTest, BindUniformLocation) { 1449 TEST_F(ProgramManagerWithShaderTest, BindUniformLocation) {
1450 const GLuint kVShaderClientId = 2001; 1450 const GLuint kVShaderClientId = 2001;
1451 const GLuint kFShaderClientId = 2002; 1451 const GLuint kFShaderClientId = 2002;
1452 const GLuint kVShaderServiceId = 3001; 1452 const GLuint kVShaderServiceId = 3001;
1453 const GLuint kFShaderServiceId = 3002; 1453 const GLuint kFShaderServiceId = 3002;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1505 kUniform3RealLocation, 1505 kUniform3RealLocation,
1506 kUniform3DesiredLocation, 1506 kUniform3DesiredLocation,
1507 kUniform3GoodName, 1507 kUniform3GoodName,
1508 }, 1508 },
1509 }; 1509 };
1510 1510
1511 const size_t kNumAttribs = arraysize(kAttribs); 1511 const size_t kNumAttribs = arraysize(kAttribs);
1512 const size_t kNumUniforms = arraysize(kUniforms); 1512 const size_t kNumUniforms = arraysize(kUniforms);
1513 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 1513 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
1514 kServiceProgramId); 1514 kServiceProgramId);
1515 program->Link(NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 1515 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
1516 1516
1517 EXPECT_EQ(kUniform1DesiredLocation, 1517 EXPECT_EQ(kUniform1DesiredLocation,
1518 program->GetUniformFakeLocation(kUniform1Name)); 1518 program->GetUniformFakeLocation(kUniform1Name));
1519 EXPECT_EQ(kUniform3DesiredLocation, 1519 EXPECT_EQ(kUniform3DesiredLocation,
1520 program->GetUniformFakeLocation(kUniform3BadName)); 1520 program->GetUniformFakeLocation(kUniform3BadName));
1521 EXPECT_EQ(kUniform3DesiredLocation, 1521 EXPECT_EQ(kUniform3DesiredLocation,
1522 program->GetUniformFakeLocation(kUniform3GoodName)); 1522 program->GetUniformFakeLocation(kUniform3GoodName));
1523 } 1523 }
1524 1524
1525 class ProgramManagerWithCacheTest : public testing::Test { 1525 class ProgramManagerWithCacheTest : public testing::Test {
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1728 const GLuint ProgramManagerWithCacheTest::kVertexShaderClientId; 1728 const GLuint ProgramManagerWithCacheTest::kVertexShaderClientId;
1729 const GLuint ProgramManagerWithCacheTest::kFragmentShaderClientId; 1729 const GLuint ProgramManagerWithCacheTest::kFragmentShaderClientId;
1730 const GLuint ProgramManagerWithCacheTest::kVertexShaderServiceId; 1730 const GLuint ProgramManagerWithCacheTest::kVertexShaderServiceId;
1731 const GLuint ProgramManagerWithCacheTest::kFragmentShaderServiceId; 1731 const GLuint ProgramManagerWithCacheTest::kFragmentShaderServiceId;
1732 #endif 1732 #endif
1733 1733
1734 TEST_F(ProgramManagerWithCacheTest, CacheProgramOnSuccessfulLink) { 1734 TEST_F(ProgramManagerWithCacheTest, CacheProgramOnSuccessfulLink) {
1735 SetShadersCompiled(); 1735 SetShadersCompiled();
1736 SetExpectationsForProgramLink(); 1736 SetExpectationsForProgramLink();
1737 SetExpectationsForProgramCached(); 1737 SetExpectationsForProgramCached();
1738 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, 1738 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, NULL,
1739 base::Bind(&ShaderCacheCb))); 1739 base::Bind(&ShaderCacheCb)));
1740 } 1740 }
1741 1741
1742 TEST_F(ProgramManagerWithCacheTest, LoadProgramOnProgramCacheHit) { 1742 TEST_F(ProgramManagerWithCacheTest, LoadProgramOnProgramCacheHit) {
1743 SetShadersCompiled(); 1743 SetShadersCompiled();
1744 SetProgramCached(); 1744 SetProgramCached();
1745 1745
1746 SetExpectationsForNoCompile(vertex_shader_); 1746 SetExpectationsForNoCompile(vertex_shader_);
1747 SetExpectationsForNoCompile(fragment_shader_); 1747 SetExpectationsForNoCompile(fragment_shader_);
1748 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); 1748 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS);
1749 SetExpectationsForNotCachingProgram(); 1749 SetExpectationsForNotCachingProgram();
1750 SetExpectationsForProgramLoadSuccess(); 1750 SetExpectationsForProgramLoadSuccess();
1751 1751
1752 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, 1752 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, NULL,
1753 base::Bind(&ShaderCacheCb))); 1753 base::Bind(&ShaderCacheCb)));
1754 } 1754 }
1755 1755
1756 } // namespace gles2 1756 } // namespace gles2
1757 } // namespace gpu 1757 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | gpu/config/gpu_driver_bug_list_json.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698