| 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/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 // Use StrictMock to make 100% sure we know how GL will be called. | 55 // Use StrictMock to make 100% sure we know how GL will be called. |
| 56 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; | 56 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; |
| 57 ProgramManager manager_; | 57 ProgramManager manager_; |
| 58 }; | 58 }; |
| 59 | 59 |
| 60 TEST_F(ProgramManagerTest, Basic) { | 60 TEST_F(ProgramManagerTest, Basic) { |
| 61 const GLuint kClient1Id = 1; | 61 const GLuint kClient1Id = 1; |
| 62 const GLuint kService1Id = 11; | 62 const GLuint kService1Id = 11; |
| 63 const GLuint kClient2Id = 2; | 63 const GLuint kClient2Id = 2; |
| 64 // Check we can create program. | 64 // Check we can create program. |
| 65 manager_.CreateProgramInfo(kClient1Id, kService1Id); | 65 manager_.CreateProgram(kClient1Id, kService1Id); |
| 66 // Check program got created. | 66 // Check program got created. |
| 67 ProgramManager::ProgramInfo* info1 = manager_.GetProgramInfo(kClient1Id); | 67 Program* info1 = manager_.GetProgram(kClient1Id); |
| 68 ASSERT_TRUE(info1 != NULL); | 68 ASSERT_TRUE(info1 != NULL); |
| 69 GLuint client_id = 0; | 69 GLuint client_id = 0; |
| 70 EXPECT_TRUE(manager_.GetClientId(info1->service_id(), &client_id)); | 70 EXPECT_TRUE(manager_.GetClientId(info1->service_id(), &client_id)); |
| 71 EXPECT_EQ(kClient1Id, client_id); | 71 EXPECT_EQ(kClient1Id, client_id); |
| 72 // Check we get nothing for a non-existent program. | 72 // Check we get nothing for a non-existent program. |
| 73 EXPECT_TRUE(manager_.GetProgramInfo(kClient2Id) == NULL); | 73 EXPECT_TRUE(manager_.GetProgram(kClient2Id) == NULL); |
| 74 } | 74 } |
| 75 | 75 |
| 76 TEST_F(ProgramManagerTest, Destroy) { | 76 TEST_F(ProgramManagerTest, Destroy) { |
| 77 const GLuint kClient1Id = 1; | 77 const GLuint kClient1Id = 1; |
| 78 const GLuint kService1Id = 11; | 78 const GLuint kService1Id = 11; |
| 79 // Check we can create program. | 79 // Check we can create program. |
| 80 ProgramManager::ProgramInfo* info0 = manager_.CreateProgramInfo( | 80 Program* info0 = manager_.CreateProgram( |
| 81 kClient1Id, kService1Id); | 81 kClient1Id, kService1Id); |
| 82 ASSERT_TRUE(info0 != NULL); | 82 ASSERT_TRUE(info0 != NULL); |
| 83 // Check program got created. | 83 // Check program got created. |
| 84 ProgramManager::ProgramInfo* info1 = manager_.GetProgramInfo(kClient1Id); | 84 Program* info1 = manager_.GetProgram(kClient1Id); |
| 85 ASSERT_EQ(info0, info1); | 85 ASSERT_EQ(info0, info1); |
| 86 EXPECT_CALL(*gl_, DeleteProgram(kService1Id)) | 86 EXPECT_CALL(*gl_, DeleteProgram(kService1Id)) |
| 87 .Times(1) | 87 .Times(1) |
| 88 .RetiresOnSaturation(); | 88 .RetiresOnSaturation(); |
| 89 manager_.Destroy(true); | 89 manager_.Destroy(true); |
| 90 // Check the resources were released. | 90 // Check the resources were released. |
| 91 info1 = manager_.GetProgramInfo(kClient1Id); | 91 info1 = manager_.GetProgram(kClient1Id); |
| 92 ASSERT_TRUE(info1 == NULL); | 92 ASSERT_TRUE(info1 == NULL); |
| 93 } | 93 } |
| 94 | 94 |
| 95 TEST_F(ProgramManagerTest, DeleteBug) { | 95 TEST_F(ProgramManagerTest, DeleteBug) { |
| 96 ShaderManager shader_manager; | 96 ShaderManager shader_manager; |
| 97 const GLuint kClient1Id = 1; | 97 const GLuint kClient1Id = 1; |
| 98 const GLuint kClient2Id = 2; | 98 const GLuint kClient2Id = 2; |
| 99 const GLuint kService1Id = 11; | 99 const GLuint kService1Id = 11; |
| 100 const GLuint kService2Id = 12; | 100 const GLuint kService2Id = 12; |
| 101 // Check we can create program. | 101 // Check we can create program. |
| 102 ProgramManager::ProgramInfo::Ref info1( | 102 scoped_refptr<Program> info1( |
| 103 manager_.CreateProgramInfo(kClient1Id, kService1Id)); | 103 manager_.CreateProgram(kClient1Id, kService1Id)); |
| 104 ProgramManager::ProgramInfo::Ref info2( | 104 scoped_refptr<Program> info2( |
| 105 manager_.CreateProgramInfo(kClient2Id, kService2Id)); | 105 manager_.CreateProgram(kClient2Id, kService2Id)); |
| 106 // Check program got created. | 106 // Check program got created. |
| 107 ASSERT_TRUE(info1); | 107 ASSERT_TRUE(info1); |
| 108 ASSERT_TRUE(info2); | 108 ASSERT_TRUE(info2); |
| 109 manager_.UseProgram(info1); | 109 manager_.UseProgram(info1); |
| 110 manager_.MarkAsDeleted(&shader_manager, info1); | 110 manager_.MarkAsDeleted(&shader_manager, info1); |
| 111 // Program will be deleted when last ref is released. | 111 // Program will be deleted when last ref is released. |
| 112 EXPECT_CALL(*gl_, DeleteProgram(kService2Id)) | 112 EXPECT_CALL(*gl_, DeleteProgram(kService2Id)) |
| 113 .Times(1) | 113 .Times(1) |
| 114 .RetiresOnSaturation(); | 114 .RetiresOnSaturation(); |
| 115 manager_.MarkAsDeleted(&shader_manager, info2); | 115 manager_.MarkAsDeleted(&shader_manager, info2); |
| 116 EXPECT_TRUE(manager_.IsOwned(info1)); | 116 EXPECT_TRUE(manager_.IsOwned(info1)); |
| 117 EXPECT_FALSE(manager_.IsOwned(info2)); | 117 EXPECT_FALSE(manager_.IsOwned(info2)); |
| 118 } | 118 } |
| 119 | 119 |
| 120 TEST_F(ProgramManagerTest, ProgramInfo) { | 120 TEST_F(ProgramManagerTest, Program) { |
| 121 const GLuint kClient1Id = 1; | 121 const GLuint kClient1Id = 1; |
| 122 const GLuint kService1Id = 11; | 122 const GLuint kService1Id = 11; |
| 123 // Check we can create program. | 123 // Check we can create program. |
| 124 ProgramManager::ProgramInfo* info1 = manager_.CreateProgramInfo( | 124 Program* info1 = manager_.CreateProgram( |
| 125 kClient1Id, kService1Id); | 125 kClient1Id, kService1Id); |
| 126 ASSERT_TRUE(info1); | 126 ASSERT_TRUE(info1); |
| 127 EXPECT_EQ(kService1Id, info1->service_id()); | 127 EXPECT_EQ(kService1Id, info1->service_id()); |
| 128 EXPECT_FALSE(info1->InUse()); | 128 EXPECT_FALSE(info1->InUse()); |
| 129 EXPECT_FALSE(info1->IsValid()); | 129 EXPECT_FALSE(info1->IsValid()); |
| 130 EXPECT_FALSE(info1->IsDeleted()); | 130 EXPECT_FALSE(info1->IsDeleted()); |
| 131 EXPECT_FALSE(info1->CanLink()); | 131 EXPECT_FALSE(info1->CanLink()); |
| 132 EXPECT_TRUE(info1->log_info() == NULL); | 132 EXPECT_TRUE(info1->log_info() == NULL); |
| 133 } | 133 } |
| 134 | 134 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 protected: | 195 protected: |
| 196 typedef TestHelper::AttribInfo AttribInfo; | 196 typedef TestHelper::AttribInfo AttribInfo; |
| 197 typedef TestHelper::UniformInfo UniformInfo; | 197 typedef TestHelper::UniformInfo UniformInfo; |
| 198 | 198 |
| 199 virtual void SetUp() { | 199 virtual void SetUp() { |
| 200 gl_.reset(new StrictMock<gfx::MockGLInterface>()); | 200 gl_.reset(new StrictMock<gfx::MockGLInterface>()); |
| 201 ::gfx::GLInterface::SetGLInterface(gl_.get()); | 201 ::gfx::GLInterface::SetGLInterface(gl_.get()); |
| 202 | 202 |
| 203 SetupDefaultShaderExpectations(); | 203 SetupDefaultShaderExpectations(); |
| 204 | 204 |
| 205 ShaderManager::ShaderInfo* vertex_shader = shader_manager_.CreateShaderInfo( | 205 Shader* vertex_shader = shader_manager_.CreateShader( |
| 206 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER); | 206 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER); |
| 207 ShaderManager::ShaderInfo* fragment_shader = | 207 Shader* fragment_shader = |
| 208 shader_manager_.CreateShaderInfo( | 208 shader_manager_.CreateShader( |
| 209 kFragmentShaderClientId, kFragmentShaderServiceId, | 209 kFragmentShaderClientId, kFragmentShaderServiceId, |
| 210 GL_FRAGMENT_SHADER); | 210 GL_FRAGMENT_SHADER); |
| 211 ASSERT_TRUE(vertex_shader != NULL); | 211 ASSERT_TRUE(vertex_shader != NULL); |
| 212 ASSERT_TRUE(fragment_shader != NULL); | 212 ASSERT_TRUE(fragment_shader != NULL); |
| 213 vertex_shader->SetStatus(true, NULL, NULL); | 213 vertex_shader->SetStatus(true, NULL, NULL); |
| 214 fragment_shader->SetStatus(true, NULL, NULL); | 214 fragment_shader->SetStatus(true, NULL, NULL); |
| 215 | 215 |
| 216 program_info_ = manager_.CreateProgramInfo( | 216 program_info_ = manager_.CreateProgram( |
| 217 kClientProgramId, kServiceProgramId); | 217 kClientProgramId, kServiceProgramId); |
| 218 ASSERT_TRUE(program_info_ != NULL); | 218 ASSERT_TRUE(program_info_ != NULL); |
| 219 | 219 |
| 220 program_info_->AttachShader(&shader_manager_, vertex_shader); | 220 program_info_->AttachShader(&shader_manager_, vertex_shader); |
| 221 program_info_->AttachShader(&shader_manager_, fragment_shader); | 221 program_info_->AttachShader(&shader_manager_, fragment_shader); |
| 222 program_info_->Link(NULL, NULL, NULL, NULL); | 222 program_info_->Link(NULL, NULL, NULL, NULL); |
| 223 } | 223 } |
| 224 | 224 |
| 225 void SetupShader(AttribInfo* attribs, size_t num_attribs, | 225 void SetupShader(AttribInfo* attribs, size_t num_attribs, |
| 226 UniformInfo* uniforms, size_t num_uniforms, | 226 UniformInfo* uniforms, size_t num_uniforms, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 238 UniformInfo* uniforms, size_t num_uniforms) { | 238 UniformInfo* uniforms, size_t num_uniforms) { |
| 239 TestHelper::SetupExpectationsForClearingUniforms( | 239 TestHelper::SetupExpectationsForClearingUniforms( |
| 240 gl_.get(), uniforms, num_uniforms); | 240 gl_.get(), uniforms, num_uniforms); |
| 241 } | 241 } |
| 242 | 242 |
| 243 virtual void TearDown() { | 243 virtual void TearDown() { |
| 244 ::gfx::GLInterface::SetGLInterface(NULL); | 244 ::gfx::GLInterface::SetGLInterface(NULL); |
| 245 } | 245 } |
| 246 | 246 |
| 247 // Return true if link status matches expected_link_status | 247 // Return true if link status matches expected_link_status |
| 248 bool LinkAsExpected(ProgramManager::ProgramInfo* program_info, | 248 bool LinkAsExpected(Program* program_info, |
| 249 bool expected_link_status) { | 249 bool expected_link_status) { |
| 250 GLuint service_id = program_info->service_id(); | 250 GLuint service_id = program_info->service_id(); |
| 251 if (expected_link_status) { | 251 if (expected_link_status) { |
| 252 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, | 252 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, |
| 253 service_id); | 253 service_id); |
| 254 } | 254 } |
| 255 program_info->Link(NULL, NULL, NULL, NULL); | 255 program_info->Link(NULL, NULL, NULL, NULL); |
| 256 GLint link_status; | 256 GLint link_status; |
| 257 program_info->GetProgramiv(GL_LINK_STATUS, &link_status); | 257 program_info->GetProgramiv(GL_LINK_STATUS, &link_status); |
| 258 return (static_cast<bool>(link_status) == expected_link_status); | 258 return (static_cast<bool>(link_status) == expected_link_status); |
| 259 } | 259 } |
| 260 | 260 |
| 261 static AttribInfo kAttribs[]; | 261 static AttribInfo kAttribs[]; |
| 262 static UniformInfo kUniforms[]; | 262 static UniformInfo kUniforms[]; |
| 263 | 263 |
| 264 scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_; | 264 scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_; |
| 265 | 265 |
| 266 ProgramManager manager_; | 266 ProgramManager manager_; |
| 267 ProgramManager::ProgramInfo* program_info_; | 267 Program* program_info_; |
| 268 ShaderManager shader_manager_; | 268 ShaderManager shader_manager_; |
| 269 }; | 269 }; |
| 270 | 270 |
| 271 ProgramManagerWithShaderTest::AttribInfo | 271 ProgramManagerWithShaderTest::AttribInfo |
| 272 ProgramManagerWithShaderTest::kAttribs[] = { | 272 ProgramManagerWithShaderTest::kAttribs[] = { |
| 273 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, | 273 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, |
| 274 { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, | 274 { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, }, |
| 275 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, | 275 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, |
| 276 }; | 276 }; |
| 277 | 277 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 const char* ProgramManagerWithShaderTest::kAttrib2Name = "attrib2"; | 352 const char* ProgramManagerWithShaderTest::kAttrib2Name = "attrib2"; |
| 353 const char* ProgramManagerWithShaderTest::kAttrib3Name = "attrib3"; | 353 const char* ProgramManagerWithShaderTest::kAttrib3Name = "attrib3"; |
| 354 const char* ProgramManagerWithShaderTest::kUniform1Name = "uniform1"; | 354 const char* ProgramManagerWithShaderTest::kUniform1Name = "uniform1"; |
| 355 // Correctly has array spec. | 355 // Correctly has array spec. |
| 356 const char* ProgramManagerWithShaderTest::kUniform2Name = "uniform2[0]"; | 356 const char* ProgramManagerWithShaderTest::kUniform2Name = "uniform2[0]"; |
| 357 // Incorrectly missing array spec. | 357 // Incorrectly missing array spec. |
| 358 const char* ProgramManagerWithShaderTest::kUniform3BadName = "uniform3"; | 358 const char* ProgramManagerWithShaderTest::kUniform3BadName = "uniform3"; |
| 359 const char* ProgramManagerWithShaderTest::kUniform3GoodName = "uniform3[0]"; | 359 const char* ProgramManagerWithShaderTest::kUniform3GoodName = "uniform3[0]"; |
| 360 | 360 |
| 361 TEST_F(ProgramManagerWithShaderTest, GetAttribInfos) { | 361 TEST_F(ProgramManagerWithShaderTest, GetAttribInfos) { |
| 362 const ProgramManager::ProgramInfo* program_info = | 362 const Program* program_info = |
| 363 manager_.GetProgramInfo(kClientProgramId); | 363 manager_.GetProgram(kClientProgramId); |
| 364 ASSERT_TRUE(program_info != NULL); | 364 ASSERT_TRUE(program_info != NULL); |
| 365 const ProgramManager::ProgramInfo::AttribInfoVector& infos = | 365 const Program::AttribInfoVector& infos = |
| 366 program_info->GetAttribInfos(); | 366 program_info->GetAttribInfos(); |
| 367 ASSERT_EQ(kNumAttribs, infos.size()); | 367 ASSERT_EQ(kNumAttribs, infos.size()); |
| 368 for (size_t ii = 0; ii < kNumAttribs; ++ii) { | 368 for (size_t ii = 0; ii < kNumAttribs; ++ii) { |
| 369 const ProgramManager::ProgramInfo::VertexAttribInfo& info = infos[ii]; | 369 const Program::VertexAttrib& info = infos[ii]; |
| 370 const AttribInfo& expected = kAttribs[ii]; | 370 const AttribInfo& expected = kAttribs[ii]; |
| 371 EXPECT_EQ(expected.size, info.size); | 371 EXPECT_EQ(expected.size, info.size); |
| 372 EXPECT_EQ(expected.type, info.type); | 372 EXPECT_EQ(expected.type, info.type); |
| 373 EXPECT_EQ(expected.location, info.location); | 373 EXPECT_EQ(expected.location, info.location); |
| 374 EXPECT_STREQ(expected.name, info.name.c_str()); | 374 EXPECT_STREQ(expected.name, info.name.c_str()); |
| 375 } | 375 } |
| 376 } | 376 } |
| 377 | 377 |
| 378 TEST_F(ProgramManagerWithShaderTest, GetAttribInfo) { | 378 TEST_F(ProgramManagerWithShaderTest, GetAttribInfo) { |
| 379 const GLint kValidIndex = 1; | 379 const GLint kValidIndex = 1; |
| 380 const GLint kInvalidIndex = 1000; | 380 const GLint kInvalidIndex = 1000; |
| 381 const ProgramManager::ProgramInfo* program_info = | 381 const Program* program_info = |
| 382 manager_.GetProgramInfo(kClientProgramId); | 382 manager_.GetProgram(kClientProgramId); |
| 383 ASSERT_TRUE(program_info != NULL); | 383 ASSERT_TRUE(program_info != NULL); |
| 384 const ProgramManager::ProgramInfo::VertexAttribInfo* info = | 384 const Program::VertexAttrib* info = |
| 385 program_info->GetAttribInfo(kValidIndex); | 385 program_info->GetAttribInfo(kValidIndex); |
| 386 ASSERT_TRUE(info != NULL); | 386 ASSERT_TRUE(info != NULL); |
| 387 EXPECT_EQ(kAttrib2Size, info->size); | 387 EXPECT_EQ(kAttrib2Size, info->size); |
| 388 EXPECT_EQ(kAttrib2Type, info->type); | 388 EXPECT_EQ(kAttrib2Type, info->type); |
| 389 EXPECT_EQ(kAttrib2Location, info->location); | 389 EXPECT_EQ(kAttrib2Location, info->location); |
| 390 EXPECT_STREQ(kAttrib2Name, info->name.c_str()); | 390 EXPECT_STREQ(kAttrib2Name, info->name.c_str()); |
| 391 EXPECT_TRUE(program_info->GetAttribInfo(kInvalidIndex) == NULL); | 391 EXPECT_TRUE(program_info->GetAttribInfo(kInvalidIndex) == NULL); |
| 392 } | 392 } |
| 393 | 393 |
| 394 TEST_F(ProgramManagerWithShaderTest, GetAttribLocation) { | 394 TEST_F(ProgramManagerWithShaderTest, GetAttribLocation) { |
| 395 const char* kInvalidName = "foo"; | 395 const char* kInvalidName = "foo"; |
| 396 const ProgramManager::ProgramInfo* program_info = | 396 const Program* program_info = |
| 397 manager_.GetProgramInfo(kClientProgramId); | 397 manager_.GetProgram(kClientProgramId); |
| 398 ASSERT_TRUE(program_info != NULL); | 398 ASSERT_TRUE(program_info != NULL); |
| 399 EXPECT_EQ(kAttrib2Location, program_info->GetAttribLocation(kAttrib2Name)); | 399 EXPECT_EQ(kAttrib2Location, program_info->GetAttribLocation(kAttrib2Name)); |
| 400 EXPECT_EQ(-1, program_info->GetAttribLocation(kInvalidName)); | 400 EXPECT_EQ(-1, program_info->GetAttribLocation(kInvalidName)); |
| 401 } | 401 } |
| 402 | 402 |
| 403 TEST_F(ProgramManagerWithShaderTest, GetUniformInfo) { | 403 TEST_F(ProgramManagerWithShaderTest, GetUniformInfo) { |
| 404 const GLint kInvalidIndex = 1000; | 404 const GLint kInvalidIndex = 1000; |
| 405 const ProgramManager::ProgramInfo* program_info = | 405 const Program* program_info = |
| 406 manager_.GetProgramInfo(kClientProgramId); | 406 manager_.GetProgram(kClientProgramId); |
| 407 ASSERT_TRUE(program_info != NULL); | 407 ASSERT_TRUE(program_info != NULL); |
| 408 const ProgramManager::ProgramInfo::UniformInfo* info = | 408 const Program::UniformInfo* info = |
| 409 program_info->GetUniformInfo(0); | 409 program_info->GetUniformInfo(0); |
| 410 ASSERT_TRUE(info != NULL); | 410 ASSERT_TRUE(info != NULL); |
| 411 EXPECT_EQ(kUniform1Size, info->size); | 411 EXPECT_EQ(kUniform1Size, info->size); |
| 412 EXPECT_EQ(kUniform1Type, info->type); | 412 EXPECT_EQ(kUniform1Type, info->type); |
| 413 EXPECT_EQ(kUniform1RealLocation, info->element_locations[0]); | 413 EXPECT_EQ(kUniform1RealLocation, info->element_locations[0]); |
| 414 EXPECT_STREQ(kUniform1Name, info->name.c_str()); | 414 EXPECT_STREQ(kUniform1Name, info->name.c_str()); |
| 415 info = program_info->GetUniformInfo(1); | 415 info = program_info->GetUniformInfo(1); |
| 416 ASSERT_TRUE(info != NULL); | 416 ASSERT_TRUE(info != NULL); |
| 417 EXPECT_EQ(kUniform2Size, info->size); | 417 EXPECT_EQ(kUniform2Size, info->size); |
| 418 EXPECT_EQ(kUniform2Type, info->type); | 418 EXPECT_EQ(kUniform2Type, info->type); |
| 419 EXPECT_EQ(kUniform2RealLocation, info->element_locations[0]); | 419 EXPECT_EQ(kUniform2RealLocation, info->element_locations[0]); |
| 420 EXPECT_STREQ(kUniform2Name, info->name.c_str()); | 420 EXPECT_STREQ(kUniform2Name, info->name.c_str()); |
| 421 info = program_info->GetUniformInfo(2); | 421 info = program_info->GetUniformInfo(2); |
| 422 // We emulate certain OpenGL drivers by supplying the name without | 422 // We emulate certain OpenGL drivers by supplying the name without |
| 423 // the array spec. Our implementation should correctly add the required spec. | 423 // the array spec. Our implementation should correctly add the required spec. |
| 424 ASSERT_TRUE(info != NULL); | 424 ASSERT_TRUE(info != NULL); |
| 425 EXPECT_EQ(kUniform3Size, info->size); | 425 EXPECT_EQ(kUniform3Size, info->size); |
| 426 EXPECT_EQ(kUniform3Type, info->type); | 426 EXPECT_EQ(kUniform3Type, info->type); |
| 427 EXPECT_EQ(kUniform3RealLocation, info->element_locations[0]); | 427 EXPECT_EQ(kUniform3RealLocation, info->element_locations[0]); |
| 428 EXPECT_STREQ(kUniform3GoodName, info->name.c_str()); | 428 EXPECT_STREQ(kUniform3GoodName, info->name.c_str()); |
| 429 EXPECT_TRUE(program_info->GetUniformInfo(kInvalidIndex) == NULL); | 429 EXPECT_TRUE(program_info->GetUniformInfo(kInvalidIndex) == NULL); |
| 430 } | 430 } |
| 431 | 431 |
| 432 TEST_F(ProgramManagerWithShaderTest, AttachDetachShader) { | 432 TEST_F(ProgramManagerWithShaderTest, AttachDetachShader) { |
| 433 static const GLuint kClientProgramId = 124; | 433 static const GLuint kClientProgramId = 124; |
| 434 static const GLuint kServiceProgramId = 457; | 434 static const GLuint kServiceProgramId = 457; |
| 435 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( | 435 Program* program_info = manager_.CreateProgram( |
| 436 kClientProgramId, kServiceProgramId); | 436 kClientProgramId, kServiceProgramId); |
| 437 ASSERT_TRUE(program_info != NULL); | 437 ASSERT_TRUE(program_info != NULL); |
| 438 EXPECT_FALSE(program_info->CanLink()); | 438 EXPECT_FALSE(program_info->CanLink()); |
| 439 const GLuint kVShaderClientId = 2001; | 439 const GLuint kVShaderClientId = 2001; |
| 440 const GLuint kFShaderClientId = 2002; | 440 const GLuint kFShaderClientId = 2002; |
| 441 const GLuint kVShaderServiceId = 3001; | 441 const GLuint kVShaderServiceId = 3001; |
| 442 const GLuint kFShaderServiceId = 3002; | 442 const GLuint kFShaderServiceId = 3002; |
| 443 ShaderManager::ShaderInfo* vshader = shader_manager_.CreateShaderInfo( | 443 Shader* vshader = shader_manager_.CreateShader( |
| 444 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); | 444 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); |
| 445 ASSERT_TRUE(vshader != NULL); | 445 ASSERT_TRUE(vshader != NULL); |
| 446 vshader->SetStatus(true, "", NULL); | 446 vshader->SetStatus(true, "", NULL); |
| 447 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( | 447 Shader* fshader = shader_manager_.CreateShader( |
| 448 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); | 448 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); |
| 449 ASSERT_TRUE(fshader != NULL); | 449 ASSERT_TRUE(fshader != NULL); |
| 450 fshader->SetStatus(true, "", NULL); | 450 fshader->SetStatus(true, "", NULL); |
| 451 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 451 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| 452 EXPECT_FALSE(program_info->CanLink()); | 452 EXPECT_FALSE(program_info->CanLink()); |
| 453 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); | 453 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); |
| 454 EXPECT_TRUE(program_info->CanLink()); | 454 EXPECT_TRUE(program_info->CanLink()); |
| 455 program_info->DetachShader(&shader_manager_, vshader); | 455 program_info->DetachShader(&shader_manager_, vshader); |
| 456 EXPECT_FALSE(program_info->CanLink()); | 456 EXPECT_FALSE(program_info->CanLink()); |
| 457 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 457 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 468 EXPECT_TRUE(program_info->CanLink()); | 468 EXPECT_TRUE(program_info->CanLink()); |
| 469 fshader->SetStatus(false, "", NULL); | 469 fshader->SetStatus(false, "", NULL); |
| 470 EXPECT_FALSE(program_info->CanLink()); | 470 EXPECT_FALSE(program_info->CanLink()); |
| 471 fshader->SetStatus(true, "", NULL); | 471 fshader->SetStatus(true, "", NULL); |
| 472 EXPECT_TRUE(program_info->CanLink()); | 472 EXPECT_TRUE(program_info->CanLink()); |
| 473 EXPECT_TRUE(program_info->DetachShader(&shader_manager_, fshader)); | 473 EXPECT_TRUE(program_info->DetachShader(&shader_manager_, fshader)); |
| 474 EXPECT_FALSE(program_info->DetachShader(&shader_manager_, fshader)); | 474 EXPECT_FALSE(program_info->DetachShader(&shader_manager_, fshader)); |
| 475 } | 475 } |
| 476 | 476 |
| 477 TEST_F(ProgramManagerWithShaderTest, GetUniformFakeLocation) { | 477 TEST_F(ProgramManagerWithShaderTest, GetUniformFakeLocation) { |
| 478 const ProgramManager::ProgramInfo* program_info = | 478 const Program* program_info = |
| 479 manager_.GetProgramInfo(kClientProgramId); | 479 manager_.GetProgram(kClientProgramId); |
| 480 ASSERT_TRUE(program_info != NULL); | 480 ASSERT_TRUE(program_info != NULL); |
| 481 EXPECT_EQ(kUniform1FakeLocation, | 481 EXPECT_EQ(kUniform1FakeLocation, |
| 482 program_info->GetUniformFakeLocation(kUniform1Name)); | 482 program_info->GetUniformFakeLocation(kUniform1Name)); |
| 483 EXPECT_EQ(kUniform2FakeLocation, | 483 EXPECT_EQ(kUniform2FakeLocation, |
| 484 program_info->GetUniformFakeLocation(kUniform2Name)); | 484 program_info->GetUniformFakeLocation(kUniform2Name)); |
| 485 EXPECT_EQ(kUniform3FakeLocation, | 485 EXPECT_EQ(kUniform3FakeLocation, |
| 486 program_info->GetUniformFakeLocation(kUniform3BadName)); | 486 program_info->GetUniformFakeLocation(kUniform3BadName)); |
| 487 // Check we can get uniform2 as "uniform2" even though the name is | 487 // Check we can get uniform2 as "uniform2" even though the name is |
| 488 // "uniform2[0]" | 488 // "uniform2[0]" |
| 489 EXPECT_EQ(kUniform2FakeLocation, | 489 EXPECT_EQ(kUniform2FakeLocation, |
| 490 program_info->GetUniformFakeLocation("uniform2")); | 490 program_info->GetUniformFakeLocation("uniform2")); |
| 491 // Check we can get uniform3 as "uniform3[0]" even though we simulated GL | 491 // Check we can get uniform3 as "uniform3[0]" even though we simulated GL |
| 492 // returning "uniform3" | 492 // returning "uniform3" |
| 493 EXPECT_EQ(kUniform3FakeLocation, | 493 EXPECT_EQ(kUniform3FakeLocation, |
| 494 program_info->GetUniformFakeLocation(kUniform3GoodName)); | 494 program_info->GetUniformFakeLocation(kUniform3GoodName)); |
| 495 // Check that we can get the locations of the array elements > 1 | 495 // Check that we can get the locations of the array elements > 1 |
| 496 EXPECT_EQ(ProgramManager::MakeFakeLocation(kUniform2FakeLocation, 1), | 496 EXPECT_EQ(ProgramManager::MakeFakeLocation(kUniform2FakeLocation, 1), |
| 497 program_info->GetUniformFakeLocation("uniform2[1]")); | 497 program_info->GetUniformFakeLocation("uniform2[1]")); |
| 498 EXPECT_EQ(ProgramManager::MakeFakeLocation(kUniform2FakeLocation, 2), | 498 EXPECT_EQ(ProgramManager::MakeFakeLocation(kUniform2FakeLocation, 2), |
| 499 program_info->GetUniformFakeLocation("uniform2[2]")); | 499 program_info->GetUniformFakeLocation("uniform2[2]")); |
| 500 EXPECT_EQ(-1, program_info->GetUniformFakeLocation("uniform2[3]")); | 500 EXPECT_EQ(-1, program_info->GetUniformFakeLocation("uniform2[3]")); |
| 501 EXPECT_EQ(ProgramManager::MakeFakeLocation(kUniform3FakeLocation, 1), | 501 EXPECT_EQ(ProgramManager::MakeFakeLocation(kUniform3FakeLocation, 1), |
| 502 program_info->GetUniformFakeLocation("uniform3[1]")); | 502 program_info->GetUniformFakeLocation("uniform3[1]")); |
| 503 EXPECT_EQ(-1, program_info->GetUniformFakeLocation("uniform3[2]")); | 503 EXPECT_EQ(-1, program_info->GetUniformFakeLocation("uniform3[2]")); |
| 504 } | 504 } |
| 505 | 505 |
| 506 TEST_F(ProgramManagerWithShaderTest, GetUniformInfoByFakeLocation) { | 506 TEST_F(ProgramManagerWithShaderTest, GetUniformInfoByFakeLocation) { |
| 507 const GLint kInvalidLocation = 1234; | 507 const GLint kInvalidLocation = 1234; |
| 508 const ProgramManager::ProgramInfo::UniformInfo* info; | 508 const Program::UniformInfo* info; |
| 509 const ProgramManager::ProgramInfo* program_info = | 509 const Program* program_info = |
| 510 manager_.GetProgramInfo(kClientProgramId); | 510 manager_.GetProgram(kClientProgramId); |
| 511 GLint real_location = -1; | 511 GLint real_location = -1; |
| 512 GLint array_index = -1; | 512 GLint array_index = -1; |
| 513 ASSERT_TRUE(program_info != NULL); | 513 ASSERT_TRUE(program_info != NULL); |
| 514 info = program_info->GetUniformInfoByFakeLocation( | 514 info = program_info->GetUniformInfoByFakeLocation( |
| 515 kUniform2FakeLocation, &real_location, &array_index); | 515 kUniform2FakeLocation, &real_location, &array_index); |
| 516 EXPECT_EQ(kUniform2RealLocation, real_location); | 516 EXPECT_EQ(kUniform2RealLocation, real_location); |
| 517 EXPECT_EQ(0, array_index); | 517 EXPECT_EQ(0, array_index); |
| 518 ASSERT_TRUE(info != NULL); | 518 ASSERT_TRUE(info != NULL); |
| 519 EXPECT_EQ(kUniform2Type, info->type); | 519 EXPECT_EQ(kUniform2Type, info->type); |
| 520 real_location = -1; | 520 real_location = -1; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 }; | 565 }; |
| 566 const size_t kNumUniforms = arraysize(kUniforms); | 566 const size_t kNumUniforms = arraysize(kUniforms); |
| 567 static const GLuint kClientProgramId = 1234; | 567 static const GLuint kClientProgramId = 1234; |
| 568 static const GLuint kServiceProgramId = 5679; | 568 static const GLuint kServiceProgramId = 5679; |
| 569 const GLuint kVShaderClientId = 2001; | 569 const GLuint kVShaderClientId = 2001; |
| 570 const GLuint kFShaderClientId = 2002; | 570 const GLuint kFShaderClientId = 2002; |
| 571 const GLuint kVShaderServiceId = 3001; | 571 const GLuint kVShaderServiceId = 3001; |
| 572 const GLuint kFShaderServiceId = 3002; | 572 const GLuint kFShaderServiceId = 3002; |
| 573 SetupShader( | 573 SetupShader( |
| 574 kAttribs, kNumAttribs, kUniforms, kNumUniforms, kServiceProgramId); | 574 kAttribs, kNumAttribs, kUniforms, kNumUniforms, kServiceProgramId); |
| 575 ShaderManager::ShaderInfo* vshader = shader_manager_.CreateShaderInfo( | 575 Shader* vshader = shader_manager_.CreateShader( |
| 576 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); | 576 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); |
| 577 ASSERT_TRUE(vshader != NULL); | 577 ASSERT_TRUE(vshader != NULL); |
| 578 vshader->SetStatus(true, "", NULL); | 578 vshader->SetStatus(true, "", NULL); |
| 579 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( | 579 Shader* fshader = shader_manager_.CreateShader( |
| 580 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); | 580 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); |
| 581 ASSERT_TRUE(fshader != NULL); | 581 ASSERT_TRUE(fshader != NULL); |
| 582 fshader->SetStatus(true, "", NULL); | 582 fshader->SetStatus(true, "", NULL); |
| 583 ProgramManager::ProgramInfo* program_info = | 583 Program* program_info = |
| 584 manager_.CreateProgramInfo(kClientProgramId, kServiceProgramId); | 584 manager_.CreateProgram(kClientProgramId, kServiceProgramId); |
| 585 ASSERT_TRUE(program_info != NULL); | 585 ASSERT_TRUE(program_info != NULL); |
| 586 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 586 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| 587 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); | 587 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); |
| 588 program_info->Link(NULL, NULL, NULL, NULL); | 588 program_info->Link(NULL, NULL, NULL, NULL); |
| 589 GLint value = 0; | 589 GLint value = 0; |
| 590 program_info->GetProgramiv(GL_ACTIVE_ATTRIBUTES, &value); | 590 program_info->GetProgramiv(GL_ACTIVE_ATTRIBUTES, &value); |
| 591 EXPECT_EQ(3, value); | 591 EXPECT_EQ(3, value); |
| 592 // Check that we skipped the "gl_" uniform. | 592 // Check that we skipped the "gl_" uniform. |
| 593 program_info->GetProgramiv(GL_ACTIVE_UNIFORMS, &value); | 593 program_info->GetProgramiv(GL_ACTIVE_UNIFORMS, &value); |
| 594 EXPECT_EQ(2, value); | 594 EXPECT_EQ(2, value); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 633 }; | 633 }; |
| 634 const size_t kNumUniforms = arraysize(kUniforms); | 634 const size_t kNumUniforms = arraysize(kUniforms); |
| 635 static const GLuint kClientProgramId = 1234; | 635 static const GLuint kClientProgramId = 1234; |
| 636 static const GLuint kServiceProgramId = 5679; | 636 static const GLuint kServiceProgramId = 5679; |
| 637 const GLuint kVShaderClientId = 2001; | 637 const GLuint kVShaderClientId = 2001; |
| 638 const GLuint kFShaderClientId = 2002; | 638 const GLuint kFShaderClientId = 2002; |
| 639 const GLuint kVShaderServiceId = 3001; | 639 const GLuint kVShaderServiceId = 3001; |
| 640 const GLuint kFShaderServiceId = 3002; | 640 const GLuint kFShaderServiceId = 3002; |
| 641 SetupShader( | 641 SetupShader( |
| 642 kAttribs, kNumAttribs, kUniforms, kNumUniforms, kServiceProgramId); | 642 kAttribs, kNumAttribs, kUniforms, kNumUniforms, kServiceProgramId); |
| 643 ShaderManager::ShaderInfo* vshader = shader_manager_.CreateShaderInfo( | 643 Shader* vshader = shader_manager_.CreateShader( |
| 644 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); | 644 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); |
| 645 ASSERT_TRUE(vshader != NULL); | 645 ASSERT_TRUE(vshader != NULL); |
| 646 vshader->SetStatus(true, "", NULL); | 646 vshader->SetStatus(true, "", NULL); |
| 647 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( | 647 Shader* fshader = shader_manager_.CreateShader( |
| 648 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); | 648 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); |
| 649 ASSERT_TRUE(fshader != NULL); | 649 ASSERT_TRUE(fshader != NULL); |
| 650 fshader->SetStatus(true, "", NULL); | 650 fshader->SetStatus(true, "", NULL); |
| 651 ProgramManager::ProgramInfo* program_info = | 651 Program* program_info = |
| 652 manager_.CreateProgramInfo(kClientProgramId, kServiceProgramId); | 652 manager_.CreateProgram(kClientProgramId, kServiceProgramId); |
| 653 ASSERT_TRUE(program_info != NULL); | 653 ASSERT_TRUE(program_info != NULL); |
| 654 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 654 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| 655 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); | 655 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); |
| 656 program_info->Link(NULL, NULL, NULL, NULL); | 656 program_info->Link(NULL, NULL, NULL, NULL); |
| 657 | 657 |
| 658 // Check that we get the correct locations. | 658 // Check that we get the correct locations. |
| 659 EXPECT_EQ(kUniform2FakeLocation, | 659 EXPECT_EQ(kUniform2FakeLocation, |
| 660 program_info->GetUniformFakeLocation(kUniform2Name)); | 660 program_info->GetUniformFakeLocation(kUniform2Name)); |
| 661 EXPECT_EQ(kUniform3FakeLocation, | 661 EXPECT_EQ(kUniform3FakeLocation, |
| 662 program_info->GetUniformFakeLocation(kUniform3Name)); | 662 program_info->GetUniformFakeLocation(kUniform3Name)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 688 .WillRepeatedly(ReturnRef(attrib_map)); | 688 .WillRepeatedly(ReturnRef(attrib_map)); |
| 689 EXPECT_CALL(shader_translator, uniform_map()) | 689 EXPECT_CALL(shader_translator, uniform_map()) |
| 690 .WillRepeatedly(ReturnRef(uniform_map)); | 690 .WillRepeatedly(ReturnRef(uniform_map)); |
| 691 ShaderTranslator::NameMap name_map; | 691 ShaderTranslator::NameMap name_map; |
| 692 EXPECT_CALL(shader_translator, name_map()) | 692 EXPECT_CALL(shader_translator, name_map()) |
| 693 .WillRepeatedly(ReturnRef(name_map)); | 693 .WillRepeatedly(ReturnRef(name_map)); |
| 694 const GLuint kVShaderClientId = 2001; | 694 const GLuint kVShaderClientId = 2001; |
| 695 const GLuint kFShaderClientId = 2002; | 695 const GLuint kFShaderClientId = 2002; |
| 696 const GLuint kVShaderServiceId = 3001; | 696 const GLuint kVShaderServiceId = 3001; |
| 697 const GLuint kFShaderServiceId = 3002; | 697 const GLuint kFShaderServiceId = 3002; |
| 698 ShaderManager::ShaderInfo* vshader = shader_manager_.CreateShaderInfo( | 698 Shader* vshader = shader_manager_.CreateShader( |
| 699 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); | 699 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); |
| 700 ASSERT_TRUE(vshader != NULL); | 700 ASSERT_TRUE(vshader != NULL); |
| 701 vshader->SetStatus(true, "", &shader_translator); | 701 vshader->SetStatus(true, "", &shader_translator); |
| 702 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( | 702 Shader* fshader = shader_manager_.CreateShader( |
| 703 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); | 703 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); |
| 704 ASSERT_TRUE(fshader != NULL); | 704 ASSERT_TRUE(fshader != NULL); |
| 705 fshader->SetStatus(true, "", &shader_translator); | 705 fshader->SetStatus(true, "", &shader_translator); |
| 706 static ProgramManagerWithShaderTest::AttribInfo kAttribs[] = { | 706 static ProgramManagerWithShaderTest::AttribInfo kAttribs[] = { |
| 707 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, | 707 { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, }, |
| 708 { kAttrib2Name, kAttrib2Size, kAttrib2BadType, kAttrib2Location, }, | 708 { kAttrib2Name, kAttrib2Size, kAttrib2BadType, kAttrib2Location, }, |
| 709 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, | 709 { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, }, |
| 710 }; | 710 }; |
| 711 static ProgramManagerWithShaderTest::UniformInfo kUniforms[] = { | 711 static ProgramManagerWithShaderTest::UniformInfo kUniforms[] = { |
| 712 { kUniform1Name, | 712 { kUniform1Name, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 733 kUniform3DesiredLocation, | 733 kUniform3DesiredLocation, |
| 734 kUniform3GoodName, | 734 kUniform3GoodName, |
| 735 }, | 735 }, |
| 736 }; | 736 }; |
| 737 const size_t kNumAttribs= arraysize(kAttribs); | 737 const size_t kNumAttribs= arraysize(kAttribs); |
| 738 const size_t kNumUniforms = arraysize(kUniforms); | 738 const size_t kNumUniforms = arraysize(kUniforms); |
| 739 static const GLuint kClientProgramId = 1234; | 739 static const GLuint kClientProgramId = 1234; |
| 740 static const GLuint kServiceProgramId = 5679; | 740 static const GLuint kServiceProgramId = 5679; |
| 741 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, | 741 SetupShader(kAttribs, kNumAttribs, kUniforms, kNumUniforms, |
| 742 kServiceProgramId); | 742 kServiceProgramId); |
| 743 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( | 743 Program* program_info = manager_.CreateProgram( |
| 744 kClientProgramId, kServiceProgramId); | 744 kClientProgramId, kServiceProgramId); |
| 745 ASSERT_TRUE(program_info != NULL); | 745 ASSERT_TRUE(program_info != NULL); |
| 746 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 746 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| 747 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); | 747 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); |
| 748 program_info->Link(NULL, NULL, NULL, NULL); | 748 program_info->Link(NULL, NULL, NULL, NULL); |
| 749 // Check that we got the good type, not the bad. | 749 // Check that we got the good type, not the bad. |
| 750 // Check Attribs | 750 // Check Attribs |
| 751 for (unsigned index = 0; index < kNumAttribs; ++index) { | 751 for (unsigned index = 0; index < kNumAttribs; ++index) { |
| 752 const ProgramManager::ProgramInfo::VertexAttribInfo* attrib_info = | 752 const Program::VertexAttrib* attrib_info = |
| 753 program_info->GetAttribInfo(index); | 753 program_info->GetAttribInfo(index); |
| 754 ASSERT_TRUE(attrib_info != NULL); | 754 ASSERT_TRUE(attrib_info != NULL); |
| 755 ShaderTranslator::VariableMap::const_iterator it = attrib_map.find( | 755 ShaderTranslator::VariableMap::const_iterator it = attrib_map.find( |
| 756 attrib_info->name); | 756 attrib_info->name); |
| 757 ASSERT_TRUE(it != attrib_map.end()); | 757 ASSERT_TRUE(it != attrib_map.end()); |
| 758 EXPECT_EQ(it->first, attrib_info->name); | 758 EXPECT_EQ(it->first, attrib_info->name); |
| 759 EXPECT_EQ(static_cast<GLenum>(it->second.type), attrib_info->type); | 759 EXPECT_EQ(static_cast<GLenum>(it->second.type), attrib_info->type); |
| 760 EXPECT_EQ(it->second.size, attrib_info->size); | 760 EXPECT_EQ(it->second.size, attrib_info->size); |
| 761 EXPECT_EQ(it->second.name, attrib_info->name); | 761 EXPECT_EQ(it->second.name, attrib_info->name); |
| 762 } | 762 } |
| 763 // Check Uniforms | 763 // Check Uniforms |
| 764 for (unsigned index = 0; index < kNumUniforms; ++index) { | 764 for (unsigned index = 0; index < kNumUniforms; ++index) { |
| 765 const ProgramManager::ProgramInfo::UniformInfo* uniform_info = | 765 const Program::UniformInfo* uniform_info = |
| 766 program_info->GetUniformInfo(index); | 766 program_info->GetUniformInfo(index); |
| 767 ASSERT_TRUE(uniform_info != NULL); | 767 ASSERT_TRUE(uniform_info != NULL); |
| 768 ShaderTranslator::VariableMap::const_iterator it = uniform_map.find( | 768 ShaderTranslator::VariableMap::const_iterator it = uniform_map.find( |
| 769 uniform_info->name); | 769 uniform_info->name); |
| 770 ASSERT_TRUE(it != uniform_map.end()); | 770 ASSERT_TRUE(it != uniform_map.end()); |
| 771 EXPECT_EQ(it->first, uniform_info->name); | 771 EXPECT_EQ(it->first, uniform_info->name); |
| 772 EXPECT_EQ(static_cast<GLenum>(it->second.type), uniform_info->type); | 772 EXPECT_EQ(static_cast<GLenum>(it->second.type), uniform_info->type); |
| 773 EXPECT_EQ(it->second.size, uniform_info->size); | 773 EXPECT_EQ(it->second.size, uniform_info->size); |
| 774 EXPECT_EQ(it->second.name, uniform_info->name); | 774 EXPECT_EQ(it->second.name, uniform_info->name); |
| 775 } | 775 } |
| 776 } | 776 } |
| 777 | 777 |
| 778 TEST_F(ProgramManagerWithShaderTest, ProgramInfoUseCount) { | 778 TEST_F(ProgramManagerWithShaderTest, ProgramInfoUseCount) { |
| 779 static const GLuint kClientProgramId = 124; | 779 static const GLuint kClientProgramId = 124; |
| 780 static const GLuint kServiceProgramId = 457; | 780 static const GLuint kServiceProgramId = 457; |
| 781 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( | 781 Program* program_info = manager_.CreateProgram( |
| 782 kClientProgramId, kServiceProgramId); | 782 kClientProgramId, kServiceProgramId); |
| 783 ASSERT_TRUE(program_info != NULL); | 783 ASSERT_TRUE(program_info != NULL); |
| 784 EXPECT_FALSE(program_info->CanLink()); | 784 EXPECT_FALSE(program_info->CanLink()); |
| 785 const GLuint kVShaderClientId = 2001; | 785 const GLuint kVShaderClientId = 2001; |
| 786 const GLuint kFShaderClientId = 2002; | 786 const GLuint kFShaderClientId = 2002; |
| 787 const GLuint kVShaderServiceId = 3001; | 787 const GLuint kVShaderServiceId = 3001; |
| 788 const GLuint kFShaderServiceId = 3002; | 788 const GLuint kFShaderServiceId = 3002; |
| 789 ShaderManager::ShaderInfo* vshader = shader_manager_.CreateShaderInfo( | 789 Shader* vshader = shader_manager_.CreateShader( |
| 790 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); | 790 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); |
| 791 ASSERT_TRUE(vshader != NULL); | 791 ASSERT_TRUE(vshader != NULL); |
| 792 vshader->SetStatus(true, "", NULL); | 792 vshader->SetStatus(true, "", NULL); |
| 793 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( | 793 Shader* fshader = shader_manager_.CreateShader( |
| 794 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); | 794 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); |
| 795 ASSERT_TRUE(fshader != NULL); | 795 ASSERT_TRUE(fshader != NULL); |
| 796 fshader->SetStatus(true, "", NULL); | 796 fshader->SetStatus(true, "", NULL); |
| 797 EXPECT_FALSE(vshader->InUse()); | 797 EXPECT_FALSE(vshader->InUse()); |
| 798 EXPECT_FALSE(fshader->InUse()); | 798 EXPECT_FALSE(fshader->InUse()); |
| 799 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 799 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| 800 EXPECT_TRUE(vshader->InUse()); | 800 EXPECT_TRUE(vshader->InUse()); |
| 801 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); | 801 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); |
| 802 EXPECT_TRUE(fshader->InUse()); | 802 EXPECT_TRUE(fshader->InUse()); |
| 803 EXPECT_TRUE(program_info->CanLink()); | 803 EXPECT_TRUE(program_info->CanLink()); |
| 804 EXPECT_FALSE(program_info->InUse()); | 804 EXPECT_FALSE(program_info->InUse()); |
| 805 EXPECT_FALSE(program_info->IsDeleted()); | 805 EXPECT_FALSE(program_info->IsDeleted()); |
| 806 manager_.UseProgram(program_info); | 806 manager_.UseProgram(program_info); |
| 807 EXPECT_TRUE(program_info->InUse()); | 807 EXPECT_TRUE(program_info->InUse()); |
| 808 manager_.UseProgram(program_info); | 808 manager_.UseProgram(program_info); |
| 809 EXPECT_TRUE(program_info->InUse()); | 809 EXPECT_TRUE(program_info->InUse()); |
| 810 manager_.MarkAsDeleted(&shader_manager_, program_info); | 810 manager_.MarkAsDeleted(&shader_manager_, program_info); |
| 811 EXPECT_TRUE(program_info->IsDeleted()); | 811 EXPECT_TRUE(program_info->IsDeleted()); |
| 812 ProgramManager::ProgramInfo* info2 = | 812 Program* info2 = |
| 813 manager_.GetProgramInfo(kClientProgramId); | 813 manager_.GetProgram(kClientProgramId); |
| 814 EXPECT_EQ(program_info, info2); | 814 EXPECT_EQ(program_info, info2); |
| 815 manager_.UnuseProgram(&shader_manager_, program_info); | 815 manager_.UnuseProgram(&shader_manager_, program_info); |
| 816 EXPECT_TRUE(program_info->InUse()); | 816 EXPECT_TRUE(program_info->InUse()); |
| 817 // this should delete the info. | 817 // this should delete the info. |
| 818 EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId)) | 818 EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId)) |
| 819 .Times(1) | 819 .Times(1) |
| 820 .RetiresOnSaturation(); | 820 .RetiresOnSaturation(); |
| 821 manager_.UnuseProgram(&shader_manager_, program_info); | 821 manager_.UnuseProgram(&shader_manager_, program_info); |
| 822 info2 = manager_.GetProgramInfo(kClientProgramId); | 822 info2 = manager_.GetProgram(kClientProgramId); |
| 823 EXPECT_TRUE(info2 == NULL); | 823 EXPECT_TRUE(info2 == NULL); |
| 824 EXPECT_FALSE(vshader->InUse()); | 824 EXPECT_FALSE(vshader->InUse()); |
| 825 EXPECT_FALSE(fshader->InUse()); | 825 EXPECT_FALSE(fshader->InUse()); |
| 826 } | 826 } |
| 827 | 827 |
| 828 TEST_F(ProgramManagerWithShaderTest, ProgramInfoUseCount2) { | 828 TEST_F(ProgramManagerWithShaderTest, ProgramInfoUseCount2) { |
| 829 static const GLuint kClientProgramId = 124; | 829 static const GLuint kClientProgramId = 124; |
| 830 static const GLuint kServiceProgramId = 457; | 830 static const GLuint kServiceProgramId = 457; |
| 831 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( | 831 Program* program_info = manager_.CreateProgram( |
| 832 kClientProgramId, kServiceProgramId); | 832 kClientProgramId, kServiceProgramId); |
| 833 ASSERT_TRUE(program_info != NULL); | 833 ASSERT_TRUE(program_info != NULL); |
| 834 EXPECT_FALSE(program_info->CanLink()); | 834 EXPECT_FALSE(program_info->CanLink()); |
| 835 const GLuint kVShaderClientId = 2001; | 835 const GLuint kVShaderClientId = 2001; |
| 836 const GLuint kFShaderClientId = 2002; | 836 const GLuint kFShaderClientId = 2002; |
| 837 const GLuint kVShaderServiceId = 3001; | 837 const GLuint kVShaderServiceId = 3001; |
| 838 const GLuint kFShaderServiceId = 3002; | 838 const GLuint kFShaderServiceId = 3002; |
| 839 ShaderManager::ShaderInfo* vshader = shader_manager_.CreateShaderInfo( | 839 Shader* vshader = shader_manager_.CreateShader( |
| 840 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); | 840 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); |
| 841 ASSERT_TRUE(vshader != NULL); | 841 ASSERT_TRUE(vshader != NULL); |
| 842 vshader->SetStatus(true, "", NULL); | 842 vshader->SetStatus(true, "", NULL); |
| 843 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( | 843 Shader* fshader = shader_manager_.CreateShader( |
| 844 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); | 844 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); |
| 845 ASSERT_TRUE(fshader != NULL); | 845 ASSERT_TRUE(fshader != NULL); |
| 846 fshader->SetStatus(true, "", NULL); | 846 fshader->SetStatus(true, "", NULL); |
| 847 EXPECT_FALSE(vshader->InUse()); | 847 EXPECT_FALSE(vshader->InUse()); |
| 848 EXPECT_FALSE(fshader->InUse()); | 848 EXPECT_FALSE(fshader->InUse()); |
| 849 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 849 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| 850 EXPECT_TRUE(vshader->InUse()); | 850 EXPECT_TRUE(vshader->InUse()); |
| 851 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); | 851 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); |
| 852 EXPECT_TRUE(fshader->InUse()); | 852 EXPECT_TRUE(fshader->InUse()); |
| 853 EXPECT_TRUE(program_info->CanLink()); | 853 EXPECT_TRUE(program_info->CanLink()); |
| 854 EXPECT_FALSE(program_info->InUse()); | 854 EXPECT_FALSE(program_info->InUse()); |
| 855 EXPECT_FALSE(program_info->IsDeleted()); | 855 EXPECT_FALSE(program_info->IsDeleted()); |
| 856 manager_.UseProgram(program_info); | 856 manager_.UseProgram(program_info); |
| 857 EXPECT_TRUE(program_info->InUse()); | 857 EXPECT_TRUE(program_info->InUse()); |
| 858 manager_.UseProgram(program_info); | 858 manager_.UseProgram(program_info); |
| 859 EXPECT_TRUE(program_info->InUse()); | 859 EXPECT_TRUE(program_info->InUse()); |
| 860 manager_.UnuseProgram(&shader_manager_, program_info); | 860 manager_.UnuseProgram(&shader_manager_, program_info); |
| 861 EXPECT_TRUE(program_info->InUse()); | 861 EXPECT_TRUE(program_info->InUse()); |
| 862 manager_.UnuseProgram(&shader_manager_, program_info); | 862 manager_.UnuseProgram(&shader_manager_, program_info); |
| 863 EXPECT_FALSE(program_info->InUse()); | 863 EXPECT_FALSE(program_info->InUse()); |
| 864 ProgramManager::ProgramInfo* info2 = | 864 Program* info2 = |
| 865 manager_.GetProgramInfo(kClientProgramId); | 865 manager_.GetProgram(kClientProgramId); |
| 866 EXPECT_EQ(program_info, info2); | 866 EXPECT_EQ(program_info, info2); |
| 867 // this should delete the program. | 867 // this should delete the program. |
| 868 EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId)) | 868 EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId)) |
| 869 .Times(1) | 869 .Times(1) |
| 870 .RetiresOnSaturation(); | 870 .RetiresOnSaturation(); |
| 871 manager_.MarkAsDeleted(&shader_manager_, program_info); | 871 manager_.MarkAsDeleted(&shader_manager_, program_info); |
| 872 info2 = manager_.GetProgramInfo(kClientProgramId); | 872 info2 = manager_.GetProgram(kClientProgramId); |
| 873 EXPECT_TRUE(info2 == NULL); | 873 EXPECT_TRUE(info2 == NULL); |
| 874 EXPECT_FALSE(vshader->InUse()); | 874 EXPECT_FALSE(vshader->InUse()); |
| 875 EXPECT_FALSE(fshader->InUse()); | 875 EXPECT_FALSE(fshader->InUse()); |
| 876 } | 876 } |
| 877 | 877 |
| 878 TEST_F(ProgramManagerWithShaderTest, ProgramInfoGetProgramInfo) { | 878 TEST_F(ProgramManagerWithShaderTest, ProgramInfoGetProgramInfo) { |
| 879 CommonDecoder::Bucket bucket; | 879 CommonDecoder::Bucket bucket; |
| 880 const ProgramManager::ProgramInfo* program_info = | 880 const Program* program_info = |
| 881 manager_.GetProgramInfo(kClientProgramId); | 881 manager_.GetProgram(kClientProgramId); |
| 882 ASSERT_TRUE(program_info != NULL); | 882 ASSERT_TRUE(program_info != NULL); |
| 883 program_info->GetProgramInfo(&manager_, &bucket); | 883 program_info->GetProgram(&manager_, &bucket); |
| 884 ProgramInfoHeader* header = | 884 ProgramInfoHeader* header = |
| 885 bucket.GetDataAs<ProgramInfoHeader*>(0, sizeof(ProgramInfoHeader)); | 885 bucket.GetDataAs<ProgramInfoHeader*>(0, sizeof(ProgramInfoHeader)); |
| 886 ASSERT_TRUE(header != NULL); | 886 ASSERT_TRUE(header != NULL); |
| 887 EXPECT_EQ(1u, header->link_status); | 887 EXPECT_EQ(1u, header->link_status); |
| 888 EXPECT_EQ(arraysize(kAttribs), header->num_attribs); | 888 EXPECT_EQ(arraysize(kAttribs), header->num_attribs); |
| 889 EXPECT_EQ(arraysize(kUniforms), header->num_uniforms); | 889 EXPECT_EQ(arraysize(kUniforms), header->num_uniforms); |
| 890 const ProgramInput* inputs = bucket.GetDataAs<const ProgramInput*>( | 890 const ProgramInput* inputs = bucket.GetDataAs<const ProgramInput*>( |
| 891 sizeof(*header), | 891 sizeof(*header), |
| 892 sizeof(ProgramInput) * (header->num_attribs + header->num_uniforms)); | 892 sizeof(ProgramInput) * (header->num_attribs + header->num_uniforms)); |
| 893 ASSERT_TRUE(inputs != NULL); | 893 ASSERT_TRUE(inputs != NULL); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 } | 946 } |
| 947 ShaderTranslator::VariableMap uniform_map; | 947 ShaderTranslator::VariableMap uniform_map; |
| 948 EXPECT_CALL(shader_translator, attrib_map()) | 948 EXPECT_CALL(shader_translator, attrib_map()) |
| 949 .WillRepeatedly(ReturnRef(attrib_map)); | 949 .WillRepeatedly(ReturnRef(attrib_map)); |
| 950 EXPECT_CALL(shader_translator, uniform_map()) | 950 EXPECT_CALL(shader_translator, uniform_map()) |
| 951 .WillRepeatedly(ReturnRef(uniform_map)); | 951 .WillRepeatedly(ReturnRef(uniform_map)); |
| 952 ShaderTranslator::NameMap name_map; | 952 ShaderTranslator::NameMap name_map; |
| 953 EXPECT_CALL(shader_translator, name_map()) | 953 EXPECT_CALL(shader_translator, name_map()) |
| 954 .WillRepeatedly(ReturnRef(name_map)); | 954 .WillRepeatedly(ReturnRef(name_map)); |
| 955 // Check we can create shader. | 955 // Check we can create shader. |
| 956 ShaderManager::ShaderInfo* vshader = shader_manager_.CreateShaderInfo( | 956 Shader* vshader = shader_manager_.CreateShader( |
| 957 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); | 957 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); |
| 958 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( | 958 Shader* fshader = shader_manager_.CreateShader( |
| 959 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); | 959 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); |
| 960 // Check shader got created. | 960 // Check shader got created. |
| 961 ASSERT_TRUE(vshader != NULL && fshader != NULL); | 961 ASSERT_TRUE(vshader != NULL && fshader != NULL); |
| 962 // Set Status | 962 // Set Status |
| 963 vshader->SetStatus(true, "", &shader_translator); | 963 vshader->SetStatus(true, "", &shader_translator); |
| 964 // Check attrib infos got copied. | 964 // Check attrib infos got copied. |
| 965 for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin(); | 965 for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin(); |
| 966 it != attrib_map.end(); ++it) { | 966 it != attrib_map.end(); ++it) { |
| 967 const ShaderManager::ShaderInfo::VariableInfo* variable_info = | 967 const Shader::VariableInfo* variable_info = |
| 968 vshader->GetAttribInfo(it->first); | 968 vshader->GetAttribInfo(it->first); |
| 969 ASSERT_TRUE(variable_info != NULL); | 969 ASSERT_TRUE(variable_info != NULL); |
| 970 EXPECT_EQ(it->second.type, variable_info->type); | 970 EXPECT_EQ(it->second.type, variable_info->type); |
| 971 EXPECT_EQ(it->second.size, variable_info->size); | 971 EXPECT_EQ(it->second.size, variable_info->size); |
| 972 EXPECT_EQ(it->second.name, variable_info->name); | 972 EXPECT_EQ(it->second.name, variable_info->name); |
| 973 } | 973 } |
| 974 fshader->SetStatus(true, "", NULL); | 974 fshader->SetStatus(true, "", NULL); |
| 975 | 975 |
| 976 // Set up program | 976 // Set up program |
| 977 const GLuint kClientProgramId = 6666; | 977 const GLuint kClientProgramId = 6666; |
| 978 const GLuint kServiceProgramId = 8888; | 978 const GLuint kServiceProgramId = 8888; |
| 979 ProgramManager::ProgramInfo* program_info = | 979 Program* program_info = |
| 980 manager_.CreateProgramInfo(kClientProgramId, kServiceProgramId); | 980 manager_.CreateProgram(kClientProgramId, kServiceProgramId); |
| 981 ASSERT_TRUE(program_info != NULL); | 981 ASSERT_TRUE(program_info != NULL); |
| 982 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 982 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| 983 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); | 983 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); |
| 984 | 984 |
| 985 EXPECT_FALSE(program_info->DetectAttribLocationBindingConflicts()); | 985 EXPECT_FALSE(program_info->DetectAttribLocationBindingConflicts()); |
| 986 EXPECT_TRUE(LinkAsExpected(program_info, true)); | 986 EXPECT_TRUE(LinkAsExpected(program_info, true)); |
| 987 | 987 |
| 988 program_info->SetAttribLocationBinding(kAttrib1Name, 0); | 988 program_info->SetAttribLocationBinding(kAttrib1Name, 0); |
| 989 EXPECT_FALSE(program_info->DetectAttribLocationBindingConflicts()); | 989 EXPECT_FALSE(program_info->DetectAttribLocationBindingConflicts()); |
| 990 EXPECT_TRUE(LinkAsExpected(program_info, true)); | 990 EXPECT_TRUE(LinkAsExpected(program_info, true)); |
| 991 | 991 |
| 992 program_info->SetAttribLocationBinding("xxx", 0); | 992 program_info->SetAttribLocationBinding("xxx", 0); |
| 993 EXPECT_FALSE(program_info->DetectAttribLocationBindingConflicts()); | 993 EXPECT_FALSE(program_info->DetectAttribLocationBindingConflicts()); |
| 994 EXPECT_TRUE(LinkAsExpected(program_info, true)); | 994 EXPECT_TRUE(LinkAsExpected(program_info, true)); |
| 995 | 995 |
| 996 program_info->SetAttribLocationBinding(kAttrib2Name, 1); | 996 program_info->SetAttribLocationBinding(kAttrib2Name, 1); |
| 997 EXPECT_FALSE(program_info->DetectAttribLocationBindingConflicts()); | 997 EXPECT_FALSE(program_info->DetectAttribLocationBindingConflicts()); |
| 998 EXPECT_TRUE(LinkAsExpected(program_info, true)); | 998 EXPECT_TRUE(LinkAsExpected(program_info, true)); |
| 999 | 999 |
| 1000 program_info->SetAttribLocationBinding(kAttrib2Name, 0); | 1000 program_info->SetAttribLocationBinding(kAttrib2Name, 0); |
| 1001 EXPECT_TRUE(program_info->DetectAttribLocationBindingConflicts()); | 1001 EXPECT_TRUE(program_info->DetectAttribLocationBindingConflicts()); |
| 1002 EXPECT_TRUE(LinkAsExpected(program_info, false)); | 1002 EXPECT_TRUE(LinkAsExpected(program_info, false)); |
| 1003 } | 1003 } |
| 1004 | 1004 |
| 1005 TEST_F(ProgramManagerWithShaderTest, ClearWithSamplerTypes) { | 1005 TEST_F(ProgramManagerWithShaderTest, ClearWithSamplerTypes) { |
| 1006 const GLuint kVShaderClientId = 2001; | 1006 const GLuint kVShaderClientId = 2001; |
| 1007 const GLuint kFShaderClientId = 2002; | 1007 const GLuint kFShaderClientId = 2002; |
| 1008 const GLuint kVShaderServiceId = 3001; | 1008 const GLuint kVShaderServiceId = 3001; |
| 1009 const GLuint kFShaderServiceId = 3002; | 1009 const GLuint kFShaderServiceId = 3002; |
| 1010 ShaderManager::ShaderInfo* vshader = shader_manager_.CreateShaderInfo( | 1010 Shader* vshader = shader_manager_.CreateShader( |
| 1011 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); | 1011 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); |
| 1012 ASSERT_TRUE(vshader != NULL); | 1012 ASSERT_TRUE(vshader != NULL); |
| 1013 vshader->SetStatus(true, NULL, NULL); | 1013 vshader->SetStatus(true, NULL, NULL); |
| 1014 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( | 1014 Shader* fshader = shader_manager_.CreateShader( |
| 1015 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); | 1015 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); |
| 1016 ASSERT_TRUE(fshader != NULL); | 1016 ASSERT_TRUE(fshader != NULL); |
| 1017 fshader->SetStatus(true, NULL, NULL); | 1017 fshader->SetStatus(true, NULL, NULL); |
| 1018 static const GLuint kClientProgramId = 1234; | 1018 static const GLuint kClientProgramId = 1234; |
| 1019 static const GLuint kServiceProgramId = 5679; | 1019 static const GLuint kServiceProgramId = 5679; |
| 1020 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( | 1020 Program* program_info = manager_.CreateProgram( |
| 1021 kClientProgramId, kServiceProgramId); | 1021 kClientProgramId, kServiceProgramId); |
| 1022 ASSERT_TRUE(program_info != NULL); | 1022 ASSERT_TRUE(program_info != NULL); |
| 1023 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 1023 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| 1024 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); | 1024 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); |
| 1025 | 1025 |
| 1026 static const GLenum kSamplerTypes[] = { | 1026 static const GLenum kSamplerTypes[] = { |
| 1027 GL_SAMPLER_2D, | 1027 GL_SAMPLER_2D, |
| 1028 GL_SAMPLER_CUBE, | 1028 GL_SAMPLER_CUBE, |
| 1029 GL_SAMPLER_EXTERNAL_OES, | 1029 GL_SAMPLER_EXTERNAL_OES, |
| 1030 GL_SAMPLER_3D_OES, | 1030 GL_SAMPLER_3D_OES, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 TEST_F(ProgramManagerWithShaderTest, BindUniformLocation) { | 1076 TEST_F(ProgramManagerWithShaderTest, BindUniformLocation) { |
| 1077 const GLuint kVShaderClientId = 2001; | 1077 const GLuint kVShaderClientId = 2001; |
| 1078 const GLuint kFShaderClientId = 2002; | 1078 const GLuint kFShaderClientId = 2002; |
| 1079 const GLuint kVShaderServiceId = 3001; | 1079 const GLuint kVShaderServiceId = 3001; |
| 1080 const GLuint kFShaderServiceId = 3002; | 1080 const GLuint kFShaderServiceId = 3002; |
| 1081 | 1081 |
| 1082 const GLint kUniform1DesiredLocation = 10; | 1082 const GLint kUniform1DesiredLocation = 10; |
| 1083 const GLint kUniform2DesiredLocation = -1; | 1083 const GLint kUniform2DesiredLocation = -1; |
| 1084 const GLint kUniform3DesiredLocation = 5; | 1084 const GLint kUniform3DesiredLocation = 5; |
| 1085 | 1085 |
| 1086 ShaderManager::ShaderInfo* vshader = shader_manager_.CreateShaderInfo( | 1086 Shader* vshader = shader_manager_.CreateShader( |
| 1087 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); | 1087 kVShaderClientId, kVShaderServiceId, GL_VERTEX_SHADER); |
| 1088 ASSERT_TRUE(vshader != NULL); | 1088 ASSERT_TRUE(vshader != NULL); |
| 1089 vshader->SetStatus(true, NULL, NULL); | 1089 vshader->SetStatus(true, NULL, NULL); |
| 1090 ShaderManager::ShaderInfo* fshader = shader_manager_.CreateShaderInfo( | 1090 Shader* fshader = shader_manager_.CreateShader( |
| 1091 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); | 1091 kFShaderClientId, kFShaderServiceId, GL_FRAGMENT_SHADER); |
| 1092 ASSERT_TRUE(fshader != NULL); | 1092 ASSERT_TRUE(fshader != NULL); |
| 1093 fshader->SetStatus(true, NULL, NULL); | 1093 fshader->SetStatus(true, NULL, NULL); |
| 1094 static const GLuint kClientProgramId = 1234; | 1094 static const GLuint kClientProgramId = 1234; |
| 1095 static const GLuint kServiceProgramId = 5679; | 1095 static const GLuint kServiceProgramId = 5679; |
| 1096 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( | 1096 Program* program_info = manager_.CreateProgram( |
| 1097 kClientProgramId, kServiceProgramId); | 1097 kClientProgramId, kServiceProgramId); |
| 1098 ASSERT_TRUE(program_info != NULL); | 1098 ASSERT_TRUE(program_info != NULL); |
| 1099 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); | 1099 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, vshader)); |
| 1100 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); | 1100 EXPECT_TRUE(program_info->AttachShader(&shader_manager_, fshader)); |
| 1101 EXPECT_TRUE(program_info->SetUniformLocationBinding( | 1101 EXPECT_TRUE(program_info->SetUniformLocationBinding( |
| 1102 kUniform1Name, kUniform1DesiredLocation)); | 1102 kUniform1Name, kUniform1DesiredLocation)); |
| 1103 EXPECT_TRUE(program_info->SetUniformLocationBinding( | 1103 EXPECT_TRUE(program_info->SetUniformLocationBinding( |
| 1104 kUniform3BadName, kUniform3DesiredLocation)); | 1104 kUniform3BadName, kUniform3DesiredLocation)); |
| 1105 | 1105 |
| 1106 static ProgramManagerWithShaderTest::AttribInfo kAttribs[] = { | 1106 static ProgramManagerWithShaderTest::AttribInfo kAttribs[] = { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1168 virtual ~ProgramManagerWithCacheTest() { | 1168 virtual ~ProgramManagerWithCacheTest() { |
| 1169 manager_.Destroy(false); | 1169 manager_.Destroy(false); |
| 1170 shader_manager_.Destroy(false); | 1170 shader_manager_.Destroy(false); |
| 1171 } | 1171 } |
| 1172 | 1172 |
| 1173 protected: | 1173 protected: |
| 1174 virtual void SetUp() { | 1174 virtual void SetUp() { |
| 1175 gl_.reset(new StrictMock<gfx::MockGLInterface>()); | 1175 gl_.reset(new StrictMock<gfx::MockGLInterface>()); |
| 1176 ::gfx::GLInterface::SetGLInterface(gl_.get()); | 1176 ::gfx::GLInterface::SetGLInterface(gl_.get()); |
| 1177 | 1177 |
| 1178 vertex_shader_ = shader_manager_.CreateShaderInfo( | 1178 vertex_shader_ = shader_manager_.CreateShader( |
| 1179 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER); | 1179 kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER); |
| 1180 fragment_shader_ = shader_manager_.CreateShaderInfo( | 1180 fragment_shader_ = shader_manager_.CreateShader( |
| 1181 kFragmentShaderClientId, kFragmentShaderServiceId, GL_FRAGMENT_SHADER); | 1181 kFragmentShaderClientId, kFragmentShaderServiceId, GL_FRAGMENT_SHADER); |
| 1182 ASSERT_TRUE(vertex_shader_ != NULL); | 1182 ASSERT_TRUE(vertex_shader_ != NULL); |
| 1183 ASSERT_TRUE(fragment_shader_ != NULL); | 1183 ASSERT_TRUE(fragment_shader_ != NULL); |
| 1184 vertex_shader_->UpdateSource("lka asjf bjajsdfj"); | 1184 vertex_shader_->UpdateSource("lka asjf bjajsdfj"); |
| 1185 fragment_shader_->UpdateSource("lka asjf a fasgag 3rdsf3 bjajsdfj"); | 1185 fragment_shader_->UpdateSource("lka asjf a fasgag 3rdsf3 bjajsdfj"); |
| 1186 | 1186 |
| 1187 program_info_ = manager_.CreateProgramInfo( | 1187 program_info_ = manager_.CreateProgram( |
| 1188 kClientProgramId, kServiceProgramId); | 1188 kClientProgramId, kServiceProgramId); |
| 1189 ASSERT_TRUE(program_info_ != NULL); | 1189 ASSERT_TRUE(program_info_ != NULL); |
| 1190 | 1190 |
| 1191 program_info_->AttachShader(&shader_manager_, vertex_shader_); | 1191 program_info_->AttachShader(&shader_manager_, vertex_shader_); |
| 1192 program_info_->AttachShader(&shader_manager_, fragment_shader_); | 1192 program_info_->AttachShader(&shader_manager_, fragment_shader_); |
| 1193 } | 1193 } |
| 1194 | 1194 |
| 1195 virtual void TearDown() { | 1195 virtual void TearDown() { |
| 1196 ::gfx::GLInterface::SetGLInterface(NULL); | 1196 ::gfx::GLInterface::SetGLInterface(NULL); |
| 1197 } | 1197 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1218 &program_info_->bind_attrib_location_map()); | 1218 &program_info_->bind_attrib_location_map()); |
| 1219 } | 1219 } |
| 1220 | 1220 |
| 1221 void SetExpectationsForProgramCached() { | 1221 void SetExpectationsForProgramCached() { |
| 1222 SetExpectationsForProgramCached(program_info_, | 1222 SetExpectationsForProgramCached(program_info_, |
| 1223 vertex_shader_, | 1223 vertex_shader_, |
| 1224 fragment_shader_); | 1224 fragment_shader_); |
| 1225 } | 1225 } |
| 1226 | 1226 |
| 1227 void SetExpectationsForProgramCached( | 1227 void SetExpectationsForProgramCached( |
| 1228 ProgramManager::ProgramInfo* program_info, | 1228 Program* program_info, |
| 1229 ShaderManager::ShaderInfo* vertex_shader, | 1229 Shader* vertex_shader, |
| 1230 ShaderManager::ShaderInfo* fragment_shader) { | 1230 Shader* fragment_shader) { |
| 1231 EXPECT_CALL(*cache_.get(), SaveLinkedProgram( | 1231 EXPECT_CALL(*cache_.get(), SaveLinkedProgram( |
| 1232 program_info->service_id(), | 1232 program_info->service_id(), |
| 1233 vertex_shader, | 1233 vertex_shader, |
| 1234 fragment_shader, | 1234 fragment_shader, |
| 1235 &program_info->bind_attrib_location_map())).Times(1); | 1235 &program_info->bind_attrib_location_map())).Times(1); |
| 1236 } | 1236 } |
| 1237 | 1237 |
| 1238 void SetExpectationsForNotCachingProgram() { | 1238 void SetExpectationsForNotCachingProgram() { |
| 1239 SetExpectationsForNotCachingProgram(program_info_, | 1239 SetExpectationsForNotCachingProgram(program_info_, |
| 1240 vertex_shader_, | 1240 vertex_shader_, |
| 1241 fragment_shader_); | 1241 fragment_shader_); |
| 1242 } | 1242 } |
| 1243 | 1243 |
| 1244 void SetExpectationsForNotCachingProgram( | 1244 void SetExpectationsForNotCachingProgram( |
| 1245 ProgramManager::ProgramInfo* program_info, | 1245 Program* program_info, |
| 1246 ShaderManager::ShaderInfo* vertex_shader, | 1246 Shader* vertex_shader, |
| 1247 ShaderManager::ShaderInfo* fragment_shader) { | 1247 Shader* fragment_shader) { |
| 1248 EXPECT_CALL(*cache_.get(), SaveLinkedProgram( | 1248 EXPECT_CALL(*cache_.get(), SaveLinkedProgram( |
| 1249 program_info->service_id(), | 1249 program_info->service_id(), |
| 1250 vertex_shader, | 1250 vertex_shader, |
| 1251 fragment_shader, | 1251 fragment_shader, |
| 1252 &program_info->bind_attrib_location_map())).Times(0); | 1252 &program_info->bind_attrib_location_map())).Times(0); |
| 1253 } | 1253 } |
| 1254 | 1254 |
| 1255 void SetExpectationsForProgramLoad(ProgramCache::ProgramLoadResult result) { | 1255 void SetExpectationsForProgramLoad(ProgramCache::ProgramLoadResult result) { |
| 1256 SetExpectationsForProgramLoad(kServiceProgramId, | 1256 SetExpectationsForProgramLoad(kServiceProgramId, |
| 1257 program_info_, | 1257 program_info_, |
| 1258 vertex_shader_, | 1258 vertex_shader_, |
| 1259 fragment_shader_, | 1259 fragment_shader_, |
| 1260 result); | 1260 result); |
| 1261 } | 1261 } |
| 1262 | 1262 |
| 1263 void SetExpectationsForProgramLoad( | 1263 void SetExpectationsForProgramLoad( |
| 1264 GLuint service_program_id, | 1264 GLuint service_program_id, |
| 1265 ProgramManager::ProgramInfo* program_info, | 1265 Program* program_info, |
| 1266 ShaderManager::ShaderInfo* vertex_shader, | 1266 Shader* vertex_shader, |
| 1267 ShaderManager::ShaderInfo* fragment_shader, | 1267 Shader* fragment_shader, |
| 1268 ProgramCache::ProgramLoadResult result) { | 1268 ProgramCache::ProgramLoadResult result) { |
| 1269 EXPECT_CALL(*cache_.get(), | 1269 EXPECT_CALL(*cache_.get(), |
| 1270 LoadLinkedProgram(service_program_id, | 1270 LoadLinkedProgram(service_program_id, |
| 1271 vertex_shader, | 1271 vertex_shader, |
| 1272 fragment_shader, | 1272 fragment_shader, |
| 1273 &program_info->bind_attrib_location_map())) | 1273 &program_info->bind_attrib_location_map())) |
| 1274 .WillOnce(Return(result)); | 1274 .WillOnce(Return(result)); |
| 1275 } | 1275 } |
| 1276 | 1276 |
| 1277 void SetExpectationsForProgramLoadSuccess() { | 1277 void SetExpectationsForProgramLoadSuccess() { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1295 TestHelper::SetupShader(gl_.get(), NULL, 0, NULL, 0, service_program_id); | 1295 TestHelper::SetupShader(gl_.get(), NULL, 0, NULL, 0, service_program_id); |
| 1296 if (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary) { | 1296 if (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary) { |
| 1297 EXPECT_CALL(*gl_.get(), | 1297 EXPECT_CALL(*gl_.get(), |
| 1298 ProgramParameteri(service_program_id, | 1298 ProgramParameteri(service_program_id, |
| 1299 PROGRAM_BINARY_RETRIEVABLE_HINT, | 1299 PROGRAM_BINARY_RETRIEVABLE_HINT, |
| 1300 GL_TRUE)).Times(1); | 1300 GL_TRUE)).Times(1); |
| 1301 } | 1301 } |
| 1302 } | 1302 } |
| 1303 | 1303 |
| 1304 void SetExpectationsForSuccessCompile( | 1304 void SetExpectationsForSuccessCompile( |
| 1305 const ShaderManager::ShaderInfo* shader) { | 1305 const Shader* shader) { |
| 1306 const GLuint shader_id = shader->service_id(); | 1306 const GLuint shader_id = shader->service_id(); |
| 1307 const char* src = shader->source()->c_str(); | 1307 const char* src = shader->source()->c_str(); |
| 1308 EXPECT_CALL(*gl_.get(), | 1308 EXPECT_CALL(*gl_.get(), |
| 1309 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1); | 1309 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1); |
| 1310 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1); | 1310 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1); |
| 1311 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) | 1311 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) |
| 1312 .WillOnce(SetArgumentPointee<2>(GL_TRUE)); | 1312 .WillOnce(SetArgumentPointee<2>(GL_TRUE)); |
| 1313 } | 1313 } |
| 1314 | 1314 |
| 1315 void SetExpectationsForNoCompile(const ShaderManager::ShaderInfo* shader) { | 1315 void SetExpectationsForNoCompile(const Shader* shader) { |
| 1316 const GLuint shader_id = shader->service_id(); | 1316 const GLuint shader_id = shader->service_id(); |
| 1317 const char* src = shader->source()->c_str(); | 1317 const char* src = shader->source()->c_str(); |
| 1318 EXPECT_CALL(*gl_.get(), | 1318 EXPECT_CALL(*gl_.get(), |
| 1319 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(0); | 1319 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(0); |
| 1320 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(0); | 1320 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(0); |
| 1321 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) | 1321 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) |
| 1322 .Times(0); | 1322 .Times(0); |
| 1323 } | 1323 } |
| 1324 | 1324 |
| 1325 void SetExpectationsForErrorCompile(const ShaderManager::ShaderInfo* shader) { | 1325 void SetExpectationsForErrorCompile(const Shader* shader) { |
| 1326 const GLuint shader_id = shader->service_id(); | 1326 const GLuint shader_id = shader->service_id(); |
| 1327 const char* src = shader->source()->c_str(); | 1327 const char* src = shader->source()->c_str(); |
| 1328 EXPECT_CALL(*gl_.get(), | 1328 EXPECT_CALL(*gl_.get(), |
| 1329 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1); | 1329 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1); |
| 1330 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1); | 1330 EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1); |
| 1331 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) | 1331 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _)) |
| 1332 .WillOnce(SetArgumentPointee<2>(GL_FALSE)); | 1332 .WillOnce(SetArgumentPointee<2>(GL_FALSE)); |
| 1333 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_INFO_LOG_LENGTH, _)) | 1333 EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_INFO_LOG_LENGTH, _)) |
| 1334 .WillOnce(SetArgumentPointee<2>(0)); | 1334 .WillOnce(SetArgumentPointee<2>(0)); |
| 1335 EXPECT_CALL(*gl_.get(), GetShaderInfoLog(shader_id, 0, _, _)) | 1335 EXPECT_CALL(*gl_.get(), GetShaderInfoLog(shader_id, 0, _, _)) |
| 1336 .Times(1); | 1336 .Times(1); |
| 1337 } | 1337 } |
| 1338 | 1338 |
| 1339 scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_; | 1339 scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_; |
| 1340 | 1340 |
| 1341 scoped_ptr<MockProgramCache> cache_; | 1341 scoped_ptr<MockProgramCache> cache_; |
| 1342 ProgramManager manager_; | 1342 ProgramManager manager_; |
| 1343 | 1343 |
| 1344 ShaderManager::ShaderInfo* vertex_shader_; | 1344 Shader* vertex_shader_; |
| 1345 ShaderManager::ShaderInfo* fragment_shader_; | 1345 Shader* fragment_shader_; |
| 1346 ProgramManager::ProgramInfo* program_info_; | 1346 Program* program_info_; |
| 1347 ShaderManager shader_manager_; | 1347 ShaderManager shader_manager_; |
| 1348 }; | 1348 }; |
| 1349 | 1349 |
| 1350 // GCC requires these declarations, but MSVC requires they not be present | 1350 // GCC requires these declarations, but MSVC requires they not be present |
| 1351 #ifndef COMPILER_MSVC | 1351 #ifndef COMPILER_MSVC |
| 1352 const GLuint ProgramManagerWithCacheTest::kClientProgramId; | 1352 const GLuint ProgramManagerWithCacheTest::kClientProgramId; |
| 1353 const GLuint ProgramManagerWithCacheTest::kServiceProgramId; | 1353 const GLuint ProgramManagerWithCacheTest::kServiceProgramId; |
| 1354 const GLuint ProgramManagerWithCacheTest::kVertexShaderClientId; | 1354 const GLuint ProgramManagerWithCacheTest::kVertexShaderClientId; |
| 1355 const GLuint ProgramManagerWithCacheTest::kFragmentShaderClientId; | 1355 const GLuint ProgramManagerWithCacheTest::kFragmentShaderClientId; |
| 1356 const GLuint ProgramManagerWithCacheTest::kVertexShaderServiceId; | 1356 const GLuint ProgramManagerWithCacheTest::kVertexShaderServiceId; |
| 1357 const GLuint ProgramManagerWithCacheTest::kFragmentShaderServiceId; | 1357 const GLuint ProgramManagerWithCacheTest::kFragmentShaderServiceId; |
| 1358 #endif | 1358 #endif |
| 1359 | 1359 |
| 1360 TEST_F(ProgramManagerWithCacheTest, CacheSuccessAfterShaderCompile) { | 1360 TEST_F(ProgramManagerWithCacheTest, CacheSuccessAfterShaderCompile) { |
| 1361 SetExpectationsForSuccessCompile(vertex_shader_); | 1361 SetExpectationsForSuccessCompile(vertex_shader_); |
| 1362 FeatureInfo::Ref info(new FeatureInfo()); | 1362 scoped_refptr<FeatureInfo> info(new FeatureInfo()); |
| 1363 manager_.DoCompileShader(vertex_shader_, NULL, info.get()); | 1363 manager_.DoCompileShader(vertex_shader_, NULL, info.get()); |
| 1364 EXPECT_EQ(ProgramCache::COMPILATION_SUCCEEDED, | 1364 EXPECT_EQ(ProgramCache::COMPILATION_SUCCEEDED, |
| 1365 cache_->GetShaderCompilationStatus(*vertex_shader_->source())); | 1365 cache_->GetShaderCompilationStatus(*vertex_shader_->source())); |
| 1366 } | 1366 } |
| 1367 | 1367 |
| 1368 TEST_F(ProgramManagerWithCacheTest, CacheUnknownAfterShaderError) { | 1368 TEST_F(ProgramManagerWithCacheTest, CacheUnknownAfterShaderError) { |
| 1369 SetExpectationsForErrorCompile(vertex_shader_); | 1369 SetExpectationsForErrorCompile(vertex_shader_); |
| 1370 FeatureInfo::Ref info(new FeatureInfo()); | 1370 scoped_refptr<FeatureInfo> info(new FeatureInfo()); |
| 1371 manager_.DoCompileShader(vertex_shader_, NULL, info.get()); | 1371 manager_.DoCompileShader(vertex_shader_, NULL, info.get()); |
| 1372 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN, | 1372 EXPECT_EQ(ProgramCache::COMPILATION_UNKNOWN, |
| 1373 cache_->GetShaderCompilationStatus(*vertex_shader_->source())); | 1373 cache_->GetShaderCompilationStatus(*vertex_shader_->source())); |
| 1374 } | 1374 } |
| 1375 | 1375 |
| 1376 TEST_F(ProgramManagerWithCacheTest, NoCompileWhenShaderCached) { | 1376 TEST_F(ProgramManagerWithCacheTest, NoCompileWhenShaderCached) { |
| 1377 cache_->ShaderCompilationSucceeded(vertex_shader_->source()->c_str()); | 1377 cache_->ShaderCompilationSucceeded(vertex_shader_->source()->c_str()); |
| 1378 SetExpectationsForNoCompile(vertex_shader_); | 1378 SetExpectationsForNoCompile(vertex_shader_); |
| 1379 FeatureInfo::Ref info(new FeatureInfo()); | 1379 scoped_refptr<FeatureInfo> info(new FeatureInfo()); |
| 1380 manager_.DoCompileShader(vertex_shader_, NULL, info.get()); | 1380 manager_.DoCompileShader(vertex_shader_, NULL, info.get()); |
| 1381 } | 1381 } |
| 1382 | 1382 |
| 1383 TEST_F(ProgramManagerWithCacheTest, CacheProgramOnSuccessfulLink) { | 1383 TEST_F(ProgramManagerWithCacheTest, CacheProgramOnSuccessfulLink) { |
| 1384 SetShadersCompiled(); | 1384 SetShadersCompiled(); |
| 1385 SetExpectationsForProgramLink(); | 1385 SetExpectationsForProgramLink(); |
| 1386 SetExpectationsForProgramCached(); | 1386 SetExpectationsForProgramCached(); |
| 1387 EXPECT_TRUE(program_info_->Link(NULL, NULL, NULL, NULL)); | 1387 EXPECT_TRUE(program_info_->Link(NULL, NULL, NULL, NULL)); |
| 1388 } | 1388 } |
| 1389 | 1389 |
| 1390 TEST_F(ProgramManagerWithCacheTest, CompileShaderOnLinkCacheMiss) { | 1390 TEST_F(ProgramManagerWithCacheTest, CompileShaderOnLinkCacheMiss) { |
| 1391 SetShadersCompiled(); | 1391 SetShadersCompiled(); |
| 1392 vertex_shader_->FlagSourceAsCompiled(false); | 1392 vertex_shader_->FlagSourceAsCompiled(false); |
| 1393 | 1393 |
| 1394 FeatureInfo::Ref info(new FeatureInfo()); | 1394 scoped_refptr<FeatureInfo> info(new FeatureInfo()); |
| 1395 | 1395 |
| 1396 SetExpectationsForSuccessCompile(vertex_shader_); | 1396 SetExpectationsForSuccessCompile(vertex_shader_); |
| 1397 SetExpectationsForProgramLink(); | 1397 SetExpectationsForProgramLink(); |
| 1398 SetExpectationsForProgramCached(); | 1398 SetExpectationsForProgramCached(); |
| 1399 EXPECT_TRUE(program_info_->Link(&shader_manager_, NULL, NULL, info.get())); | 1399 EXPECT_TRUE(program_info_->Link(&shader_manager_, NULL, NULL, info.get())); |
| 1400 } | 1400 } |
| 1401 | 1401 |
| 1402 TEST_F(ProgramManagerWithCacheTest, LoadProgramOnProgramCacheHit) { | 1402 TEST_F(ProgramManagerWithCacheTest, LoadProgramOnProgramCacheHit) { |
| 1403 SetShadersNotCompiledButCached(); | 1403 SetShadersNotCompiledButCached(); |
| 1404 SetProgramCached(); | 1404 SetProgramCached(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1415 TEST_F(ProgramManagerWithCacheTest, CompileAndLinkOnProgramCacheError) { | 1415 TEST_F(ProgramManagerWithCacheTest, CompileAndLinkOnProgramCacheError) { |
| 1416 SetShadersNotCompiledButCached(); | 1416 SetShadersNotCompiledButCached(); |
| 1417 SetProgramCached(); | 1417 SetProgramCached(); |
| 1418 | 1418 |
| 1419 SetExpectationsForSuccessCompile(vertex_shader_); | 1419 SetExpectationsForSuccessCompile(vertex_shader_); |
| 1420 SetExpectationsForSuccessCompile(fragment_shader_); | 1420 SetExpectationsForSuccessCompile(fragment_shader_); |
| 1421 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_FAILURE); | 1421 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_FAILURE); |
| 1422 SetExpectationsForProgramLink(); | 1422 SetExpectationsForProgramLink(); |
| 1423 SetExpectationsForProgramCached(); | 1423 SetExpectationsForProgramCached(); |
| 1424 | 1424 |
| 1425 FeatureInfo::Ref info(new FeatureInfo()); | 1425 scoped_refptr<FeatureInfo> info(new FeatureInfo()); |
| 1426 EXPECT_TRUE(program_info_->Link(&shader_manager_, NULL, NULL, info.get())); | 1426 EXPECT_TRUE(program_info_->Link(&shader_manager_, NULL, NULL, info.get())); |
| 1427 } | 1427 } |
| 1428 | 1428 |
| 1429 TEST_F(ProgramManagerWithCacheTest, CorrectCompileOnSourceChangeNoCompile) { | 1429 TEST_F(ProgramManagerWithCacheTest, CorrectCompileOnSourceChangeNoCompile) { |
| 1430 SetShadersNotCompiledButCached(); | 1430 SetShadersNotCompiledButCached(); |
| 1431 SetProgramCached(); | 1431 SetProgramCached(); |
| 1432 | 1432 |
| 1433 const GLuint kNewShaderClientId = 4; | 1433 const GLuint kNewShaderClientId = 4; |
| 1434 const GLuint kNewShaderServiceId = 40; | 1434 const GLuint kNewShaderServiceId = 40; |
| 1435 const GLuint kNewProgramClientId = 5; | 1435 const GLuint kNewProgramClientId = 5; |
| 1436 const GLuint kNewProgramServiceId = 50; | 1436 const GLuint kNewProgramServiceId = 50; |
| 1437 | 1437 |
| 1438 ShaderManager::ShaderInfo* new_vertex_shader = | 1438 Shader* new_vertex_shader = |
| 1439 shader_manager_.CreateShaderInfo(kNewShaderClientId, | 1439 shader_manager_.CreateShader(kNewShaderClientId, |
| 1440 kNewShaderServiceId, | 1440 kNewShaderServiceId, |
| 1441 GL_VERTEX_SHADER); | 1441 GL_VERTEX_SHADER); |
| 1442 | 1442 |
| 1443 const std::string original_source = *vertex_shader_->source(); | 1443 const std::string original_source = *vertex_shader_->source(); |
| 1444 new_vertex_shader->UpdateSource(original_source.c_str()); | 1444 new_vertex_shader->UpdateSource(original_source.c_str()); |
| 1445 | 1445 |
| 1446 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( | 1446 Program* program_info = manager_.CreateProgram( |
| 1447 kNewProgramClientId, kNewProgramServiceId); | 1447 kNewProgramClientId, kNewProgramServiceId); |
| 1448 ASSERT_TRUE(program_info != NULL); | 1448 ASSERT_TRUE(program_info != NULL); |
| 1449 program_info->AttachShader(&shader_manager_, new_vertex_shader); | 1449 program_info->AttachShader(&shader_manager_, new_vertex_shader); |
| 1450 program_info->AttachShader(&shader_manager_, fragment_shader_); | 1450 program_info->AttachShader(&shader_manager_, fragment_shader_); |
| 1451 | 1451 |
| 1452 SetExpectationsForNoCompile(new_vertex_shader); | 1452 SetExpectationsForNoCompile(new_vertex_shader); |
| 1453 | 1453 |
| 1454 manager_.DoCompileShader(new_vertex_shader, NULL, NULL); | 1454 manager_.DoCompileShader(new_vertex_shader, NULL, NULL); |
| 1455 EXPECT_EQ(ShaderManager::ShaderInfo::PENDING_DEFERRED_COMPILE, | 1455 EXPECT_EQ(Shader::PENDING_DEFERRED_COMPILE, |
| 1456 new_vertex_shader->compilation_status()); | 1456 new_vertex_shader->compilation_status()); |
| 1457 | 1457 |
| 1458 new_vertex_shader->UpdateSource("different!"); | 1458 new_vertex_shader->UpdateSource("different!"); |
| 1459 EXPECT_EQ(original_source, | 1459 EXPECT_EQ(original_source, |
| 1460 *new_vertex_shader->deferred_compilation_source()); | 1460 *new_vertex_shader->deferred_compilation_source()); |
| 1461 | 1461 |
| 1462 EXPECT_EQ(ShaderManager::ShaderInfo::PENDING_DEFERRED_COMPILE, | 1462 EXPECT_EQ(Shader::PENDING_DEFERRED_COMPILE, |
| 1463 new_vertex_shader->compilation_status()); | 1463 new_vertex_shader->compilation_status()); |
| 1464 EXPECT_EQ(ShaderManager::ShaderInfo::PENDING_DEFERRED_COMPILE, | 1464 EXPECT_EQ(Shader::PENDING_DEFERRED_COMPILE, |
| 1465 fragment_shader_->compilation_status()); | 1465 fragment_shader_->compilation_status()); |
| 1466 | 1466 |
| 1467 SetExpectationsForNoCompile(fragment_shader_); | 1467 SetExpectationsForNoCompile(fragment_shader_); |
| 1468 SetExpectationsForNotCachingProgram(program_info, | 1468 SetExpectationsForNotCachingProgram(program_info, |
| 1469 new_vertex_shader, | 1469 new_vertex_shader, |
| 1470 fragment_shader_); | 1470 fragment_shader_); |
| 1471 SetExpectationsForProgramLoad(kNewProgramServiceId, | 1471 SetExpectationsForProgramLoad(kNewProgramServiceId, |
| 1472 program_info, | 1472 program_info, |
| 1473 new_vertex_shader, | 1473 new_vertex_shader, |
| 1474 fragment_shader_, | 1474 fragment_shader_, |
| 1475 ProgramCache::PROGRAM_LOAD_SUCCESS); | 1475 ProgramCache::PROGRAM_LOAD_SUCCESS); |
| 1476 SetExpectationsForProgramLoadSuccess(kNewProgramServiceId); | 1476 SetExpectationsForProgramLoadSuccess(kNewProgramServiceId); |
| 1477 | 1477 |
| 1478 FeatureInfo::Ref info(new FeatureInfo()); | 1478 scoped_refptr<FeatureInfo> info(new FeatureInfo()); |
| 1479 EXPECT_TRUE(program_info->Link(&shader_manager_, NULL, NULL, info.get())); | 1479 EXPECT_TRUE(program_info->Link(&shader_manager_, NULL, NULL, info.get())); |
| 1480 } | 1480 } |
| 1481 | 1481 |
| 1482 TEST_F(ProgramManagerWithCacheTest, CorrectCompileOnSourceChangeWithCompile) { | 1482 TEST_F(ProgramManagerWithCacheTest, CorrectCompileOnSourceChangeWithCompile) { |
| 1483 SetShadersNotCompiledButCached(); | 1483 SetShadersNotCompiledButCached(); |
| 1484 SetProgramCached(); | 1484 SetProgramCached(); |
| 1485 | 1485 |
| 1486 const GLuint kNewShaderClientId = 4; | 1486 const GLuint kNewShaderClientId = 4; |
| 1487 const GLuint kNewShaderServiceId = 40; | 1487 const GLuint kNewShaderServiceId = 40; |
| 1488 const GLuint kNewProgramClientId = 5; | 1488 const GLuint kNewProgramClientId = 5; |
| 1489 const GLuint kNewProgramServiceId = 50; | 1489 const GLuint kNewProgramServiceId = 50; |
| 1490 | 1490 |
| 1491 ShaderManager::ShaderInfo* new_vertex_shader = | 1491 Shader* new_vertex_shader = |
| 1492 shader_manager_.CreateShaderInfo(kNewShaderClientId, | 1492 shader_manager_.CreateShader(kNewShaderClientId, |
| 1493 kNewShaderServiceId, | 1493 kNewShaderServiceId, |
| 1494 GL_VERTEX_SHADER); | 1494 GL_VERTEX_SHADER); |
| 1495 | 1495 |
| 1496 new_vertex_shader->UpdateSource(vertex_shader_->source()->c_str()); | 1496 new_vertex_shader->UpdateSource(vertex_shader_->source()->c_str()); |
| 1497 | 1497 |
| 1498 ProgramManager::ProgramInfo* program_info = manager_.CreateProgramInfo( | 1498 Program* program_info = manager_.CreateProgram( |
| 1499 kNewProgramClientId, kNewProgramServiceId); | 1499 kNewProgramClientId, kNewProgramServiceId); |
| 1500 ASSERT_TRUE(program_info != NULL); | 1500 ASSERT_TRUE(program_info != NULL); |
| 1501 program_info->AttachShader(&shader_manager_, new_vertex_shader); | 1501 program_info->AttachShader(&shader_manager_, new_vertex_shader); |
| 1502 program_info->AttachShader(&shader_manager_, fragment_shader_); | 1502 program_info->AttachShader(&shader_manager_, fragment_shader_); |
| 1503 | 1503 |
| 1504 SetExpectationsForNoCompile(new_vertex_shader); | 1504 SetExpectationsForNoCompile(new_vertex_shader); |
| 1505 | 1505 |
| 1506 manager_.DoCompileShader(new_vertex_shader, NULL, NULL); | 1506 manager_.DoCompileShader(new_vertex_shader, NULL, NULL); |
| 1507 | 1507 |
| 1508 const std::string differentSource = "different!"; | 1508 const std::string differentSource = "different!"; |
| 1509 new_vertex_shader->UpdateSource(differentSource.c_str()); | 1509 new_vertex_shader->UpdateSource(differentSource.c_str()); |
| 1510 SetExpectationsForSuccessCompile(new_vertex_shader); | 1510 SetExpectationsForSuccessCompile(new_vertex_shader); |
| 1511 | 1511 |
| 1512 FeatureInfo::Ref info(new FeatureInfo()); | 1512 scoped_refptr<FeatureInfo> info(new FeatureInfo()); |
| 1513 manager_.DoCompileShader(new_vertex_shader, NULL, info.get()); | 1513 manager_.DoCompileShader(new_vertex_shader, NULL, info.get()); |
| 1514 EXPECT_EQ(differentSource, | 1514 EXPECT_EQ(differentSource, |
| 1515 *new_vertex_shader->deferred_compilation_source()); | 1515 *new_vertex_shader->deferred_compilation_source()); |
| 1516 | 1516 |
| 1517 EXPECT_EQ(ShaderManager::ShaderInfo::COMPILED, | 1517 EXPECT_EQ(Shader::COMPILED, |
| 1518 new_vertex_shader->compilation_status()); | 1518 new_vertex_shader->compilation_status()); |
| 1519 EXPECT_EQ(ShaderManager::ShaderInfo::PENDING_DEFERRED_COMPILE, | 1519 EXPECT_EQ(Shader::PENDING_DEFERRED_COMPILE, |
| 1520 fragment_shader_->compilation_status()); | 1520 fragment_shader_->compilation_status()); |
| 1521 | 1521 |
| 1522 // so we don't recompile because we were pending originally | 1522 // so we don't recompile because we were pending originally |
| 1523 SetExpectationsForNoCompile(new_vertex_shader); | 1523 SetExpectationsForNoCompile(new_vertex_shader); |
| 1524 SetExpectationsForSuccessCompile(fragment_shader_); | 1524 SetExpectationsForSuccessCompile(fragment_shader_); |
| 1525 SetExpectationsForProgramCached(program_info, | 1525 SetExpectationsForProgramCached(program_info, |
| 1526 new_vertex_shader, | 1526 new_vertex_shader, |
| 1527 fragment_shader_); | 1527 fragment_shader_); |
| 1528 SetExpectationsForProgramLink(kNewProgramServiceId); | 1528 SetExpectationsForProgramLink(kNewProgramServiceId); |
| 1529 | 1529 |
| 1530 EXPECT_TRUE(program_info->Link(&shader_manager_, NULL, NULL, info.get())); | 1530 EXPECT_TRUE(program_info->Link(&shader_manager_, NULL, NULL, info.get())); |
| 1531 } | 1531 } |
| 1532 | 1532 |
| 1533 } // namespace gles2 | 1533 } // namespace gles2 |
| 1534 } // namespace gpu | 1534 } // namespace gpu |
| OLD | NEW |