| 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 |