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

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

Issue 147593011: Hookup clear_uniforms_before_first_program_use workaround with implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: same 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, NULL, base::Bind(&ShaderCacheCb)); 253 program_->Link(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, NULL, base::Bind(&ShaderCacheCb)); 286 program->Link(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, NULL, base::Bind(&ShaderCacheCb)); 723 program->Link(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, NULL, base::Bind(&ShaderCacheCb)); 791 program->Link(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, NULL, base::Bind(&ShaderCacheCb)); 892 program->Link(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 551 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 kUniform3FakeLocation, 1454 kUniform3FakeLocation,
1455 kUniform3RealLocation, 1455 kUniform3RealLocation,
1456 kUniform3DesiredLocation, 1456 kUniform3DesiredLocation,
1457 kUniform3GoodName, 1457 kUniform3GoodName,
1458 }, 1458 },
1459 }; 1459 };
1460 const size_t kNumAttribs = arraysize(kAttribs); 1460 const size_t kNumAttribs = arraysize(kAttribs);
1461 const size_t kNumUniforms = arraysize(kUniforms); 1461 const size_t kNumUniforms = arraysize(kUniforms);
1462 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 1462 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
1463 kServiceProgramId); 1463 kServiceProgramId);
1464 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 1464 program->Link(NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
1465 SetupExpectationsForClearingUniforms(kUniforms, kNumUniforms); 1465 SetupExpectationsForClearingUniforms(kUniforms, kNumUniforms);
1466 manager_.ClearUniforms(program); 1466 manager_.ClearUniforms(program);
1467 } 1467 }
1468 } 1468 }
1469 1469
1470 TEST_F(ProgramManagerWithShaderTest, BindUniformLocation) { 1470 TEST_F(ProgramManagerWithShaderTest, BindUniformLocation) {
1471 const GLuint kVShaderClientId = 2001; 1471 const GLuint kVShaderClientId = 2001;
1472 const GLuint kFShaderClientId = 2002; 1472 const GLuint kFShaderClientId = 2002;
1473 const GLuint kVShaderServiceId = 3001; 1473 const GLuint kVShaderServiceId = 3001;
1474 const GLuint kFShaderServiceId = 3002; 1474 const GLuint kFShaderServiceId = 3002;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1526 kUniform3RealLocation, 1526 kUniform3RealLocation,
1527 kUniform3DesiredLocation, 1527 kUniform3DesiredLocation,
1528 kUniform3GoodName, 1528 kUniform3GoodName,
1529 }, 1529 },
1530 }; 1530 };
1531 1531
1532 const size_t kNumAttribs = arraysize(kAttribs); 1532 const size_t kNumAttribs = arraysize(kAttribs);
1533 const size_t kNumUniforms = arraysize(kUniforms); 1533 const size_t kNumUniforms = arraysize(kUniforms);
1534 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, 1534 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms,
1535 kServiceProgramId); 1535 kServiceProgramId);
1536 program->Link(NULL, NULL, NULL, NULL, base::Bind(&ShaderCacheCb)); 1536 program->Link(NULL, NULL, NULL, base::Bind(&ShaderCacheCb));
1537 1537
1538 EXPECT_EQ(kUniform1DesiredLocation, 1538 EXPECT_EQ(kUniform1DesiredLocation,
1539 program->GetUniformFakeLocation(kUniform1Name)); 1539 program->GetUniformFakeLocation(kUniform1Name));
1540 EXPECT_EQ(kUniform3DesiredLocation, 1540 EXPECT_EQ(kUniform3DesiredLocation,
1541 program->GetUniformFakeLocation(kUniform3BadName)); 1541 program->GetUniformFakeLocation(kUniform3BadName));
1542 EXPECT_EQ(kUniform3DesiredLocation, 1542 EXPECT_EQ(kUniform3DesiredLocation,
1543 program->GetUniformFakeLocation(kUniform3GoodName)); 1543 program->GetUniformFakeLocation(kUniform3GoodName));
1544 } 1544 }
1545 1545
1546 class ProgramManagerWithCacheTest : public testing::Test { 1546 class ProgramManagerWithCacheTest : public testing::Test {
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1749 const GLuint ProgramManagerWithCacheTest::kVertexShaderClientId; 1749 const GLuint ProgramManagerWithCacheTest::kVertexShaderClientId;
1750 const GLuint ProgramManagerWithCacheTest::kFragmentShaderClientId; 1750 const GLuint ProgramManagerWithCacheTest::kFragmentShaderClientId;
1751 const GLuint ProgramManagerWithCacheTest::kVertexShaderServiceId; 1751 const GLuint ProgramManagerWithCacheTest::kVertexShaderServiceId;
1752 const GLuint ProgramManagerWithCacheTest::kFragmentShaderServiceId; 1752 const GLuint ProgramManagerWithCacheTest::kFragmentShaderServiceId;
1753 #endif 1753 #endif
1754 1754
1755 TEST_F(ProgramManagerWithCacheTest, CacheProgramOnSuccessfulLink) { 1755 TEST_F(ProgramManagerWithCacheTest, CacheProgramOnSuccessfulLink) {
1756 SetShadersCompiled(); 1756 SetShadersCompiled();
1757 SetExpectationsForProgramLink(); 1757 SetExpectationsForProgramLink();
1758 SetExpectationsForProgramCached(); 1758 SetExpectationsForProgramCached();
1759 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, NULL, 1759 EXPECT_TRUE(program_->Link(NULL, NULL, NULL,
1760 base::Bind(&ShaderCacheCb))); 1760 base::Bind(&ShaderCacheCb)));
1761 } 1761 }
1762 1762
1763 TEST_F(ProgramManagerWithCacheTest, LoadProgramOnProgramCacheHit) { 1763 TEST_F(ProgramManagerWithCacheTest, LoadProgramOnProgramCacheHit) {
1764 SetShadersCompiled(); 1764 SetShadersCompiled();
1765 SetProgramCached(); 1765 SetProgramCached();
1766 1766
1767 SetExpectationsForNoCompile(vertex_shader_); 1767 SetExpectationsForNoCompile(vertex_shader_);
1768 SetExpectationsForNoCompile(fragment_shader_); 1768 SetExpectationsForNoCompile(fragment_shader_);
1769 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); 1769 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS);
1770 SetExpectationsForNotCachingProgram(); 1770 SetExpectationsForNotCachingProgram();
1771 SetExpectationsForProgramLoadSuccess(); 1771 SetExpectationsForProgramLoadSuccess();
1772 1772
1773 EXPECT_TRUE(program_->Link(NULL, NULL, NULL, NULL, 1773 EXPECT_TRUE(program_->Link(NULL, NULL, NULL,
1774 base::Bind(&ShaderCacheCb))); 1774 base::Bind(&ShaderCacheCb)));
1775 } 1775 }
1776 1776
1777 } // namespace gles2 1777 } // namespace gles2
1778 } // namespace gpu 1778 } // 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