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

Side by Side Diff: gpu/command_buffer/client/program_info_manager_unittest.cc

Issue 921023002: Add glGetActiveUniformsiv to GPU command buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@uniform
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "gpu/command_buffer/client/program_info_manager.h" 5 #include "gpu/command_buffer/client/program_info_manager.h"
6 #include "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
7 7
8 namespace { 8 namespace {
9 9
10 uint32 ComputeOffset(const void* start, const void* position) { 10 uint32 ComputeOffset(const void* start, const void* position) {
(...skipping 28 matching lines...) Expand all
39 39
40 struct UniformBlocksData { 40 struct UniformBlocksData {
41 UniformBlocksHeader header; 41 UniformBlocksHeader header;
42 UniformBlockInfo entry[2]; 42 UniformBlockInfo entry[2];
43 char name0[4]; 43 char name0[4];
44 uint32_t indices0[2]; 44 uint32_t indices0[2];
45 char name1[8]; 45 char name1[8];
46 uint32_t indices1[1]; 46 uint32_t indices1[1];
47 }; 47 };
48 48
49 struct UniformsES3Data {
50 UniformsES3Header header;
51 UniformES3Info entry[2];
52 };
53
49 struct TransformFeedbackVaryingsData { 54 struct TransformFeedbackVaryingsData {
50 TransformFeedbackVaryingsHeader header; 55 TransformFeedbackVaryingsHeader header;
51 TransformFeedbackVaryingInfo entry[2]; 56 TransformFeedbackVaryingInfo entry[2];
52 char name0[4]; 57 char name0[4];
53 char name1[8]; 58 char name1[8];
54 }; 59 };
55 60
56 void SetUp() override { 61 void SetUp() override {
57 program_info_manager_.reset(new ProgramInfoManager); 62 program_info_manager_.reset(new ProgramInfoManager);
58 program_info_manager_->CreateInfo(kClientProgramId); 63 program_info_manager_->CreateInfo(kClientProgramId);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 data->entry[1].active_uniform_offset = ComputeOffset(data, data->indices1); 123 data->entry[1].active_uniform_offset = ComputeOffset(data, data->indices1);
119 data->entry[1].referenced_by_vertex_shader = static_cast<uint32_t>(false); 124 data->entry[1].referenced_by_vertex_shader = static_cast<uint32_t>(false);
120 data->entry[1].referenced_by_fragment_shader = static_cast<uint32_t>(true); 125 data->entry[1].referenced_by_fragment_shader = static_cast<uint32_t>(true);
121 memcpy(data->name0, kName[0], arraysize(data->name0)); 126 memcpy(data->name0, kName[0], arraysize(data->name0));
122 data->indices0[0] = kIndices[0][0]; 127 data->indices0[0] = kIndices[0][0];
123 data->indices0[1] = kIndices[0][1]; 128 data->indices0[1] = kIndices[0][1];
124 memcpy(data->name1, kName[1], arraysize(data->name1)); 129 memcpy(data->name1, kName[1], arraysize(data->name1));
125 data->indices1[0] = kIndices[1][0]; 130 data->indices1[0] = kIndices[1][0];
126 } 131 }
127 132
133 void SetupUniformsES3Data(UniformsES3Data* data) {
134 data->header.num_uniforms = 2;
135 data->entry[0].block_index = 1;
136 data->entry[0].offset = 2;
137 data->entry[0].array_stride = 3;
138 data->entry[0].matrix_stride = 4;
139 data->entry[0].is_row_major = 0;
140 data->entry[1].block_index = 5;
141 data->entry[1].offset = 6;
142 data->entry[1].array_stride = 7;
143 data->entry[1].matrix_stride = 8;
144 data->entry[1].is_row_major = 1;
145 }
146
128 void SetupTransformFeedbackVaryingsData(TransformFeedbackVaryingsData* data) { 147 void SetupTransformFeedbackVaryingsData(TransformFeedbackVaryingsData* data) {
129 // The names needs to be of size 4*k-1 to avoid padding in the struct Data. 148 // The names needs to be of size 4*k-1 to avoid padding in the struct Data.
130 // This is a testing only problem. 149 // This is a testing only problem.
131 const char* kName[] = { "cow", "chicken" }; 150 const char* kName[] = { "cow", "chicken" };
132 data->header.num_transform_feedback_varyings = 2; 151 data->header.num_transform_feedback_varyings = 2;
133 data->entry[0].size = 1; 152 data->entry[0].size = 1;
134 data->entry[0].type = GL_FLOAT_VEC2; 153 data->entry[0].type = GL_FLOAT_VEC2;
135 data->entry[0].name_offset = ComputeOffset(data, data->name0); 154 data->entry[0].name_offset = ComputeOffset(data, data->name0);
136 data->entry[0].name_length = arraysize(data->name0); 155 data->entry[0].name_length = arraysize(data->name0);
137 data->entry[1].size = 2; 156 data->entry[1].size = 2;
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 const GLsizei kCount = 3; 463 const GLsizei kCount = 3;
445 GLuint indices[kCount]; 464 GLuint indices[kCount];
446 EXPECT_TRUE(program_info_manager_->GetUniformIndices( 465 EXPECT_TRUE(program_info_manager_->GetUniformIndices(
447 NULL, kClientProgramId, kCount, kNames, indices)); 466 NULL, kClientProgramId, kCount, kNames, indices));
448 for (GLsizei ii = 0; ii < kCount; ++ii) { 467 for (GLsizei ii = 0; ii < kCount; ++ii) {
449 EXPECT_EQ(kIndices[ii], indices[ii]); 468 EXPECT_EQ(kIndices[ii], indices[ii]);
450 } 469 }
451 } 470 }
452 } 471 }
453 472
473 TEST_F(ProgramInfoManagerTest, GetActiveUniformsivCached) {
474 // ES3 only parameters.
475 UniformsES3Data data_es3;
476 SetupUniformsES3Data(&data_es3);
477 std::vector<int8> result(sizeof(data_es3));
478 memcpy(&result[0], &data_es3, sizeof(data_es3));
479 EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES3Uniformsiv));
480 program_->UpdateES3Uniformsiv(result);
481 EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES3Uniformsiv));
482
483 uint32_t count = data_es3.header.num_uniforms;
484 std::vector<GLuint> indices(count);
485 for (uint32_t ii = 0; ii < count; ++ii) {
486 indices[ii] = ii;
487 }
488 std::vector<GLint> block_index(count);
489 EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv(
490 NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0],
491 GL_UNIFORM_BLOCK_INDEX, &block_index[0]));
492 std::vector<GLint> offset(count);
493 EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv(
494 NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0],
495 GL_UNIFORM_OFFSET, &offset[0]));
496 std::vector<GLint> array_stride(count);
497 EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv(
498 NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0],
499 GL_UNIFORM_ARRAY_STRIDE, &array_stride[0]));
500 std::vector<GLint> matrix_stride(count);
501 EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv(
502 NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0],
503 GL_UNIFORM_MATRIX_STRIDE, &matrix_stride[0]));
504 std::vector<GLint> is_row_major(count);
505 EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv(
506 NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0],
507 GL_UNIFORM_IS_ROW_MAJOR, &is_row_major[0]));
508
509 for (uint32_t ii = 0; ii < count; ++ii) {
510 EXPECT_EQ(data_es3.entry[ii].block_index, block_index[ii]);
511 EXPECT_EQ(data_es3.entry[ii].offset, offset[ii]);
512 EXPECT_EQ(data_es3.entry[ii].array_stride, array_stride[ii]);
513 EXPECT_EQ(data_es3.entry[ii].matrix_stride, matrix_stride[ii]);
514 EXPECT_EQ(data_es3.entry[ii].is_row_major, is_row_major[ii]);
515 }
516
517 // ES2 parameters.
518 ProgramES2Data data_es2;
519 SetupProgramES2Data(&data_es2);
520 result.resize(sizeof(data_es2));
521 memcpy(&result[0], &data_es2, sizeof(data_es2));
522 EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES2));
523 program_->UpdateES2(result);
524 EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES2));
525
526 std::vector<GLint> size(count);
527 EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv(
528 NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0],
529 GL_UNIFORM_SIZE, &size[0]));
530 std::vector<GLint> type(count);
531 EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv(
532 NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0],
533 GL_UNIFORM_TYPE, &type[0]));
534 std::vector<GLint> name_length(count);
535 EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv(
536 NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0],
537 GL_UNIFORM_NAME_LENGTH, &name_length[0]));
538
539 for (uint32_t ii = 0; ii < count; ++ii) {
540 EXPECT_EQ(data_es2.uniforms[ii].size, size[ii]);
541 EXPECT_EQ(data_es2.uniforms[ii].type, static_cast<uint32_t>(type[ii]));
542 EXPECT_EQ(data_es2.uniforms[ii].name_length + 1,
543 static_cast<uint32_t>(name_length[ii]));
544 }
545 }
546
454 } // namespace gles2 547 } // namespace gles2
455 } // namespace gpu 548 } // namespace gpu
456 549
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/program_info_manager.cc ('k') | gpu/command_buffer/cmd_buffer_functions.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698