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 |