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

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

Issue 12326146: Refactor/Rename a bunch of GPU stuff (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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
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/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | gpu/command_buffer/service/query_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698