OLD | NEW |
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 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 <stddef.h> |
| 6 #include <stdint.h> |
| 7 |
5 #include "gpu/command_buffer/client/program_info_manager.h" | 8 #include "gpu/command_buffer/client/program_info_manager.h" |
6 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
7 | 10 |
8 namespace { | 11 namespace { |
9 | 12 |
10 uint32 ComputeOffset(const void* start, const void* position) { | 13 uint32_t ComputeOffset(const void* start, const void* position) { |
11 return static_cast<const uint8*>(position) - | 14 return static_cast<const uint8_t*>(position) - |
12 static_cast<const uint8*>(start); | 15 static_cast<const uint8_t*>(start); |
13 } | 16 } |
14 | 17 |
15 const GLuint kClientProgramId = 321; | 18 const GLuint kClientProgramId = 321; |
16 | 19 |
17 } // namespace anonymous | 20 } // namespace anonymous |
18 | 21 |
19 namespace gpu { | 22 namespace gpu { |
20 namespace gles2 { | 23 namespace gles2 { |
21 | 24 |
22 class ProgramInfoManagerTest : public testing::Test { | 25 class ProgramInfoManagerTest : public testing::Test { |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 | 167 |
165 scoped_ptr<ProgramInfoManager> program_info_manager_; | 168 scoped_ptr<ProgramInfoManager> program_info_manager_; |
166 Program* program_; | 169 Program* program_; |
167 }; | 170 }; |
168 | 171 |
169 TEST_F(ProgramInfoManagerTest, UpdateES2) { | 172 TEST_F(ProgramInfoManagerTest, UpdateES2) { |
170 ProgramES2Data data; | 173 ProgramES2Data data; |
171 SetupProgramES2Data(&data); | 174 SetupProgramES2Data(&data); |
172 const std::string kNames[] = { data.uniform_name0, data.uniform_name1 }; | 175 const std::string kNames[] = { data.uniform_name0, data.uniform_name1 }; |
173 const int32_t* kLocs[] = { data.uniform_loc0, data.uniform_loc1 }; | 176 const int32_t* kLocs[] = { data.uniform_loc0, data.uniform_loc1 }; |
174 std::vector<int8> result(sizeof(data)); | 177 std::vector<int8_t> result(sizeof(data)); |
175 memcpy(&result[0], &data, sizeof(data)); | 178 memcpy(&result[0], &data, sizeof(data)); |
176 EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES2)); | 179 EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES2)); |
177 program_->UpdateES2(result); | 180 program_->UpdateES2(result); |
178 EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES2)); | 181 EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES2)); |
179 | 182 |
180 GLint params = 0; | 183 GLint params = 0; |
181 EXPECT_TRUE(program_->GetProgramiv(GL_LINK_STATUS, ¶ms)); | 184 EXPECT_TRUE(program_->GetProgramiv(GL_LINK_STATUS, ¶ms)); |
182 EXPECT_TRUE(params); | 185 EXPECT_TRUE(params); |
183 | 186 |
184 params = 0; | 187 params = 0; |
(...skipping 25 matching lines...) Expand all Loading... |
210 EXPECT_EQ(kLocs[ii][uu], info->element_locations[uu]); | 213 EXPECT_EQ(kLocs[ii][uu], info->element_locations[uu]); |
211 } | 214 } |
212 } | 215 } |
213 } | 216 } |
214 | 217 |
215 TEST_F(ProgramInfoManagerTest, UpdateES3UniformBlocks) { | 218 TEST_F(ProgramInfoManagerTest, UpdateES3UniformBlocks) { |
216 UniformBlocksData data; | 219 UniformBlocksData data; |
217 SetupUniformBlocksData(&data); | 220 SetupUniformBlocksData(&data); |
218 const std::string kName[] = { data.name0, data.name1 }; | 221 const std::string kName[] = { data.name0, data.name1 }; |
219 const uint32_t* kIndices[] = { data.indices0, data.indices1 }; | 222 const uint32_t* kIndices[] = { data.indices0, data.indices1 }; |
220 std::vector<int8> result(sizeof(data)); | 223 std::vector<int8_t> result(sizeof(data)); |
221 memcpy(&result[0], &data, sizeof(data)); | 224 memcpy(&result[0], &data, sizeof(data)); |
222 EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES3UniformBlocks)); | 225 EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES3UniformBlocks)); |
223 program_->UpdateES3UniformBlocks(result); | 226 program_->UpdateES3UniformBlocks(result); |
224 EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES3UniformBlocks)); | 227 EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES3UniformBlocks)); |
225 | 228 |
226 GLint uniform_block_count = 0; | 229 GLint uniform_block_count = 0; |
227 EXPECT_TRUE(program_->GetProgramiv( | 230 EXPECT_TRUE(program_->GetProgramiv( |
228 GL_ACTIVE_UNIFORM_BLOCKS, &uniform_block_count)); | 231 GL_ACTIVE_UNIFORM_BLOCKS, &uniform_block_count)); |
229 EXPECT_EQ(data.header.num_uniform_blocks, | 232 EXPECT_EQ(data.header.num_uniform_blocks, |
230 static_cast<uint32_t>(uniform_block_count)); | 233 static_cast<uint32_t>(uniform_block_count)); |
(...skipping 20 matching lines...) Expand all Loading... |
251 } | 254 } |
252 | 255 |
253 EXPECT_EQ(GL_INVALID_INDEX, program_->GetUniformBlockIndex("BadName")); | 256 EXPECT_EQ(GL_INVALID_INDEX, program_->GetUniformBlockIndex("BadName")); |
254 EXPECT_EQ(NULL, program_->GetUniformBlock(data.header.num_uniform_blocks)); | 257 EXPECT_EQ(NULL, program_->GetUniformBlock(data.header.num_uniform_blocks)); |
255 } | 258 } |
256 | 259 |
257 TEST_F(ProgramInfoManagerTest, UpdateES3TransformFeedbackVaryings) { | 260 TEST_F(ProgramInfoManagerTest, UpdateES3TransformFeedbackVaryings) { |
258 TransformFeedbackVaryingsData data; | 261 TransformFeedbackVaryingsData data; |
259 SetupTransformFeedbackVaryingsData(&data); | 262 SetupTransformFeedbackVaryingsData(&data); |
260 const std::string kName[] = { data.name0, data.name1 }; | 263 const std::string kName[] = { data.name0, data.name1 }; |
261 std::vector<int8> result(sizeof(data)); | 264 std::vector<int8_t> result(sizeof(data)); |
262 memcpy(&result[0], &data, sizeof(data)); | 265 memcpy(&result[0], &data, sizeof(data)); |
263 EXPECT_FALSE(program_->IsCached( | 266 EXPECT_FALSE(program_->IsCached( |
264 ProgramInfoManager::kES3TransformFeedbackVaryings)); | 267 ProgramInfoManager::kES3TransformFeedbackVaryings)); |
265 program_->UpdateES3TransformFeedbackVaryings(result); | 268 program_->UpdateES3TransformFeedbackVaryings(result); |
266 EXPECT_TRUE(program_->IsCached( | 269 EXPECT_TRUE(program_->IsCached( |
267 ProgramInfoManager::kES3TransformFeedbackVaryings)); | 270 ProgramInfoManager::kES3TransformFeedbackVaryings)); |
268 | 271 |
269 GLint transform_feedback_buffer_mode = 0; | 272 GLint transform_feedback_buffer_mode = 0; |
270 EXPECT_TRUE(program_->GetProgramiv( | 273 EXPECT_TRUE(program_->GetProgramiv( |
271 GL_TRANSFORM_FEEDBACK_BUFFER_MODE, &transform_feedback_buffer_mode)); | 274 GL_TRANSFORM_FEEDBACK_BUFFER_MODE, &transform_feedback_buffer_mode)); |
(...skipping 17 matching lines...) Expand all Loading... |
289 EXPECT_EQ(kName[ii], varying->name); | 292 EXPECT_EQ(kName[ii], varying->name); |
290 EXPECT_GE(max_name_length, static_cast<GLint>(varying->name.size()) + 1); | 293 EXPECT_GE(max_name_length, static_cast<GLint>(varying->name.size()) + 1); |
291 } | 294 } |
292 EXPECT_EQ(NULL, program_->GetTransformFeedbackVarying( | 295 EXPECT_EQ(NULL, program_->GetTransformFeedbackVarying( |
293 data.header.num_transform_feedback_varyings)); | 296 data.header.num_transform_feedback_varyings)); |
294 } | 297 } |
295 | 298 |
296 TEST_F(ProgramInfoManagerTest, GetUniformBlockIndexCached) { | 299 TEST_F(ProgramInfoManagerTest, GetUniformBlockIndexCached) { |
297 UniformBlocksData data; | 300 UniformBlocksData data; |
298 SetupUniformBlocksData(&data); | 301 SetupUniformBlocksData(&data); |
299 std::vector<int8> result(sizeof(data)); | 302 std::vector<int8_t> result(sizeof(data)); |
300 memcpy(&result[0], &data, sizeof(data)); | 303 memcpy(&result[0], &data, sizeof(data)); |
301 program_->UpdateES3UniformBlocks(result); | 304 program_->UpdateES3UniformBlocks(result); |
302 | 305 |
303 EXPECT_EQ(0u, program_info_manager_->GetUniformBlockIndex( | 306 EXPECT_EQ(0u, program_info_manager_->GetUniformBlockIndex( |
304 NULL, kClientProgramId, data.name0)); | 307 NULL, kClientProgramId, data.name0)); |
305 EXPECT_EQ(1u, program_info_manager_->GetUniformBlockIndex( | 308 EXPECT_EQ(1u, program_info_manager_->GetUniformBlockIndex( |
306 NULL, kClientProgramId, data.name1)); | 309 NULL, kClientProgramId, data.name1)); |
307 EXPECT_EQ(GL_INVALID_INDEX, program_info_manager_->GetUniformBlockIndex( | 310 EXPECT_EQ(GL_INVALID_INDEX, program_info_manager_->GetUniformBlockIndex( |
308 NULL, kClientProgramId, "BadName")); | 311 NULL, kClientProgramId, "BadName")); |
309 } | 312 } |
310 | 313 |
311 TEST_F(ProgramInfoManagerTest, GetActiveUniformBlockNameCached) { | 314 TEST_F(ProgramInfoManagerTest, GetActiveUniformBlockNameCached) { |
312 UniformBlocksData data; | 315 UniformBlocksData data; |
313 SetupUniformBlocksData(&data); | 316 SetupUniformBlocksData(&data); |
314 std::vector<int8> result(sizeof(data)); | 317 std::vector<int8_t> result(sizeof(data)); |
315 memcpy(&result[0], &data, sizeof(data)); | 318 memcpy(&result[0], &data, sizeof(data)); |
316 program_->UpdateES3UniformBlocks(result); | 319 program_->UpdateES3UniformBlocks(result); |
317 | 320 |
318 GLsizei buf_size = std::max(strlen(data.name0), strlen(data.name1)) + 1; | 321 GLsizei buf_size = std::max(strlen(data.name0), strlen(data.name1)) + 1; |
319 std::vector<char> buffer(buf_size); | 322 std::vector<char> buffer(buf_size); |
320 GLsizei length = 0; | 323 GLsizei length = 0; |
321 EXPECT_EQ(true, program_info_manager_->GetActiveUniformBlockName( | 324 EXPECT_EQ(true, program_info_manager_->GetActiveUniformBlockName( |
322 NULL, kClientProgramId, 0, buf_size, &length, &buffer[0])); | 325 NULL, kClientProgramId, 0, buf_size, &length, &buffer[0])); |
323 EXPECT_EQ(static_cast<GLsizei>(strlen(data.name0)), length); | 326 EXPECT_EQ(static_cast<GLsizei>(strlen(data.name0)), length); |
324 EXPECT_STREQ(data.name0, &buffer[0]); | 327 EXPECT_STREQ(data.name0, &buffer[0]); |
(...skipping 17 matching lines...) Expand all Loading... |
342 buf_size = strlen(data.name0); | 345 buf_size = strlen(data.name0); |
343 EXPECT_EQ(true, program_info_manager_->GetActiveUniformBlockName( | 346 EXPECT_EQ(true, program_info_manager_->GetActiveUniformBlockName( |
344 NULL, kClientProgramId, 0, buf_size, &length, &buffer[0])); | 347 NULL, kClientProgramId, 0, buf_size, &length, &buffer[0])); |
345 EXPECT_EQ(buf_size, length + 1); | 348 EXPECT_EQ(buf_size, length + 1); |
346 EXPECT_STREQ(std::string(data.name0).substr(0, length).c_str(), &buffer[0]); | 349 EXPECT_STREQ(std::string(data.name0).substr(0, length).c_str(), &buffer[0]); |
347 } | 350 } |
348 | 351 |
349 TEST_F(ProgramInfoManagerTest, GetActiveUniformBlockivCached) { | 352 TEST_F(ProgramInfoManagerTest, GetActiveUniformBlockivCached) { |
350 UniformBlocksData data; | 353 UniformBlocksData data; |
351 SetupUniformBlocksData(&data); | 354 SetupUniformBlocksData(&data); |
352 std::vector<int8> result(sizeof(data)); | 355 std::vector<int8_t> result(sizeof(data)); |
353 memcpy(&result[0], &data, sizeof(data)); | 356 memcpy(&result[0], &data, sizeof(data)); |
354 program_->UpdateES3UniformBlocks(result); | 357 program_->UpdateES3UniformBlocks(result); |
355 const char* kName[] = { data.name0, data.name1 }; | 358 const char* kName[] = { data.name0, data.name1 }; |
356 const uint32_t* kIndices[] = { data.indices0, data.indices1 }; | 359 const uint32_t* kIndices[] = { data.indices0, data.indices1 }; |
357 | 360 |
358 for (uint32_t ii = 0; ii < data.header.num_uniform_blocks; ++ii) { | 361 for (uint32_t ii = 0; ii < data.header.num_uniform_blocks; ++ii) { |
359 ASSERT_GE(2u, data.entry[ii].active_uniforms); | 362 ASSERT_GE(2u, data.entry[ii].active_uniforms); |
360 GLint params[2]; | 363 GLint params[2]; |
361 EXPECT_TRUE(program_info_manager_->GetActiveUniformBlockiv( | 364 EXPECT_TRUE(program_info_manager_->GetActiveUniformBlockiv( |
362 NULL, kClientProgramId, ii, GL_UNIFORM_BLOCK_BINDING, params)); | 365 NULL, kClientProgramId, ii, GL_UNIFORM_BLOCK_BINDING, params)); |
(...skipping 28 matching lines...) Expand all Loading... |
391 NULL, kClientProgramId, ii, | 394 NULL, kClientProgramId, ii, |
392 GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, params)); | 395 GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, params)); |
393 EXPECT_EQ(data.entry[ii].referenced_by_fragment_shader, | 396 EXPECT_EQ(data.entry[ii].referenced_by_fragment_shader, |
394 static_cast<uint32_t>(params[0])); | 397 static_cast<uint32_t>(params[0])); |
395 } | 398 } |
396 } | 399 } |
397 | 400 |
398 TEST_F(ProgramInfoManagerTest, GetTransformFeedbackVaryingCached) { | 401 TEST_F(ProgramInfoManagerTest, GetTransformFeedbackVaryingCached) { |
399 TransformFeedbackVaryingsData data; | 402 TransformFeedbackVaryingsData data; |
400 SetupTransformFeedbackVaryingsData(&data); | 403 SetupTransformFeedbackVaryingsData(&data); |
401 std::vector<int8> result(sizeof(data)); | 404 std::vector<int8_t> result(sizeof(data)); |
402 memcpy(&result[0], &data, sizeof(data)); | 405 memcpy(&result[0], &data, sizeof(data)); |
403 program_->UpdateES3TransformFeedbackVaryings(result); | 406 program_->UpdateES3TransformFeedbackVaryings(result); |
404 const char* kName[] = { data.name0, data.name1 }; | 407 const char* kName[] = { data.name0, data.name1 }; |
405 GLsizei buf_size = std::max(strlen(kName[0]), strlen(kName[1])) + 1; | 408 GLsizei buf_size = std::max(strlen(kName[0]), strlen(kName[1])) + 1; |
406 for (uint32_t ii = 0; ii < data.header.num_transform_feedback_varyings; | 409 for (uint32_t ii = 0; ii < data.header.num_transform_feedback_varyings; |
407 ++ii) { | 410 ++ii) { |
408 std::vector<char> buffer(buf_size); | 411 std::vector<char> buffer(buf_size); |
409 GLsizei length = 0; | 412 GLsizei length = 0; |
410 GLsizei size = 0; | 413 GLsizei size = 0; |
411 GLenum type = 0; | 414 GLenum type = 0; |
412 EXPECT_EQ(true, program_info_manager_->GetTransformFeedbackVarying( | 415 EXPECT_EQ(true, program_info_manager_->GetTransformFeedbackVarying( |
413 NULL, kClientProgramId, ii, buf_size, | 416 NULL, kClientProgramId, ii, buf_size, |
414 &length, &size, &type, &buffer[0])); | 417 &length, &size, &type, &buffer[0])); |
415 EXPECT_EQ(data.entry[ii].size, static_cast<uint32_t>(size)); | 418 EXPECT_EQ(data.entry[ii].size, static_cast<uint32_t>(size)); |
416 EXPECT_EQ(data.entry[ii].type, static_cast<uint32_t>(type)); | 419 EXPECT_EQ(data.entry[ii].type, static_cast<uint32_t>(type)); |
417 EXPECT_STREQ(kName[ii], &buffer[0]); | 420 EXPECT_STREQ(kName[ii], &buffer[0]); |
418 EXPECT_EQ(strlen(kName[ii]), static_cast<size_t>(length)); | 421 EXPECT_EQ(strlen(kName[ii]), static_cast<size_t>(length)); |
419 } | 422 } |
420 } | 423 } |
421 | 424 |
422 TEST_F(ProgramInfoManagerTest, GetUniformIndices) { | 425 TEST_F(ProgramInfoManagerTest, GetUniformIndices) { |
423 ProgramES2Data data; | 426 ProgramES2Data data; |
424 SetupProgramES2Data(&data); | 427 SetupProgramES2Data(&data); |
425 std::vector<int8> result(sizeof(data)); | 428 std::vector<int8_t> result(sizeof(data)); |
426 memcpy(&result[0], &data, sizeof(data)); | 429 memcpy(&result[0], &data, sizeof(data)); |
427 program_->UpdateES2(result); | 430 program_->UpdateES2(result); |
428 | 431 |
429 { // Original order. | 432 { // Original order. |
430 const char* kNames[] = { data.uniform_name0, data.uniform_name1 }; | 433 const char* kNames[] = { data.uniform_name0, data.uniform_name1 }; |
431 const GLuint kIndices[] = { 0, 1 }; | 434 const GLuint kIndices[] = { 0, 1 }; |
432 const GLsizei kCount = 2; | 435 const GLsizei kCount = 2; |
433 GLuint indices[kCount]; | 436 GLuint indices[kCount]; |
434 EXPECT_TRUE(program_info_manager_->GetUniformIndices( | 437 EXPECT_TRUE(program_info_manager_->GetUniformIndices( |
435 NULL, kClientProgramId, kCount, kNames, indices)); | 438 NULL, kClientProgramId, kCount, kNames, indices)); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 for (GLsizei ii = 0; ii < kCount; ++ii) { | 476 for (GLsizei ii = 0; ii < kCount; ++ii) { |
474 EXPECT_EQ(kIndices[ii], indices[ii]); | 477 EXPECT_EQ(kIndices[ii], indices[ii]); |
475 } | 478 } |
476 } | 479 } |
477 } | 480 } |
478 | 481 |
479 TEST_F(ProgramInfoManagerTest, GetActiveUniformsivCached) { | 482 TEST_F(ProgramInfoManagerTest, GetActiveUniformsivCached) { |
480 // ES3 only parameters. | 483 // ES3 only parameters. |
481 UniformsES3Data data_es3; | 484 UniformsES3Data data_es3; |
482 SetupUniformsES3Data(&data_es3); | 485 SetupUniformsES3Data(&data_es3); |
483 std::vector<int8> result(sizeof(data_es3)); | 486 std::vector<int8_t> result(sizeof(data_es3)); |
484 memcpy(&result[0], &data_es3, sizeof(data_es3)); | 487 memcpy(&result[0], &data_es3, sizeof(data_es3)); |
485 EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES3Uniformsiv)); | 488 EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES3Uniformsiv)); |
486 program_->UpdateES3Uniformsiv(result); | 489 program_->UpdateES3Uniformsiv(result); |
487 EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES3Uniformsiv)); | 490 EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES3Uniformsiv)); |
488 | 491 |
489 uint32_t count = data_es3.header.num_uniforms; | 492 uint32_t count = data_es3.header.num_uniforms; |
490 std::vector<GLuint> indices(count); | 493 std::vector<GLuint> indices(count); |
491 for (uint32_t ii = 0; ii < count; ++ii) { | 494 for (uint32_t ii = 0; ii < count; ++ii) { |
492 indices[ii] = ii; | 495 indices[ii] = ii; |
493 } | 496 } |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 EXPECT_EQ(data_es2.uniforms[ii].size, size[ii]); | 549 EXPECT_EQ(data_es2.uniforms[ii].size, size[ii]); |
547 EXPECT_EQ(data_es2.uniforms[ii].type, static_cast<uint32_t>(type[ii])); | 550 EXPECT_EQ(data_es2.uniforms[ii].type, static_cast<uint32_t>(type[ii])); |
548 EXPECT_EQ(data_es2.uniforms[ii].name_length + 1, | 551 EXPECT_EQ(data_es2.uniforms[ii].name_length + 1, |
549 static_cast<uint32_t>(name_length[ii])); | 552 static_cast<uint32_t>(name_length[ii])); |
550 } | 553 } |
551 } | 554 } |
552 | 555 |
553 } // namespace gles2 | 556 } // namespace gles2 |
554 } // namespace gpu | 557 } // namespace gpu |
555 | 558 |
OLD | NEW |