Index: gpu/command_buffer/client/program_info_manager_unittest.cc |
diff --git a/gpu/command_buffer/client/program_info_manager_unittest.cc b/gpu/command_buffer/client/program_info_manager_unittest.cc |
index 9aa685ef0265c55b1f5112136e2a651ed8050ef3..f9c6b00320a68bd81f35e19a3345300d9c8b4512 100644 |
--- a/gpu/command_buffer/client/program_info_manager_unittest.cc |
+++ b/gpu/command_buffer/client/program_info_manager_unittest.cc |
@@ -46,6 +46,11 @@ class ProgramInfoManagerTest : public testing::Test { |
uint32_t indices1[1]; |
}; |
+ struct UniformsES3Data { |
+ UniformsES3Header header; |
+ UniformES3Info entry[2]; |
+ }; |
+ |
struct TransformFeedbackVaryingsData { |
TransformFeedbackVaryingsHeader header; |
TransformFeedbackVaryingInfo entry[2]; |
@@ -125,6 +130,20 @@ class ProgramInfoManagerTest : public testing::Test { |
data->indices1[0] = kIndices[1][0]; |
} |
+ void SetupUniformsES3Data(UniformsES3Data* data) { |
+ data->header.num_uniforms = 2; |
+ data->entry[0].block_index = 1; |
+ data->entry[0].offset = 2; |
+ data->entry[0].array_stride = 3; |
+ data->entry[0].matrix_stride = 4; |
+ data->entry[0].is_row_major = 0; |
+ data->entry[1].block_index = 5; |
+ data->entry[1].offset = 6; |
+ data->entry[1].array_stride = 7; |
+ data->entry[1].matrix_stride = 8; |
+ data->entry[1].is_row_major = 1; |
+ } |
+ |
void SetupTransformFeedbackVaryingsData(TransformFeedbackVaryingsData* data) { |
// The names needs to be of size 4*k-1 to avoid padding in the struct Data. |
// This is a testing only problem. |
@@ -451,6 +470,80 @@ TEST_F(ProgramInfoManagerTest, GetUniformIndices) { |
} |
} |
+TEST_F(ProgramInfoManagerTest, GetActiveUniformsivCached) { |
+ // ES3 only parameters. |
+ UniformsES3Data data_es3; |
+ SetupUniformsES3Data(&data_es3); |
+ std::vector<int8> result(sizeof(data_es3)); |
+ memcpy(&result[0], &data_es3, sizeof(data_es3)); |
+ EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES3Uniformsiv)); |
+ program_->UpdateES3Uniformsiv(result); |
+ EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES3Uniformsiv)); |
+ |
+ uint32_t count = data_es3.header.num_uniforms; |
+ std::vector<GLuint> indices(count); |
+ for (uint32_t ii = 0; ii < count; ++ii) { |
+ indices[ii] = ii; |
+ } |
+ std::vector<GLint> block_index(count); |
+ EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv( |
+ NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0], |
+ GL_UNIFORM_BLOCK_INDEX, &block_index[0])); |
+ std::vector<GLint> offset(count); |
+ EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv( |
+ NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0], |
+ GL_UNIFORM_OFFSET, &offset[0])); |
+ std::vector<GLint> array_stride(count); |
+ EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv( |
+ NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0], |
+ GL_UNIFORM_ARRAY_STRIDE, &array_stride[0])); |
+ std::vector<GLint> matrix_stride(count); |
+ EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv( |
+ NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0], |
+ GL_UNIFORM_MATRIX_STRIDE, &matrix_stride[0])); |
+ std::vector<GLint> is_row_major(count); |
+ EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv( |
+ NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0], |
+ GL_UNIFORM_IS_ROW_MAJOR, &is_row_major[0])); |
+ |
+ for (uint32_t ii = 0; ii < count; ++ii) { |
+ EXPECT_EQ(data_es3.entry[ii].block_index, block_index[ii]); |
+ EXPECT_EQ(data_es3.entry[ii].offset, offset[ii]); |
+ EXPECT_EQ(data_es3.entry[ii].array_stride, array_stride[ii]); |
+ EXPECT_EQ(data_es3.entry[ii].matrix_stride, matrix_stride[ii]); |
+ EXPECT_EQ(data_es3.entry[ii].is_row_major, is_row_major[ii]); |
+ } |
+ |
+ // ES2 parameters. |
+ ProgramES2Data data_es2; |
+ SetupProgramES2Data(&data_es2); |
+ result.resize(sizeof(data_es2)); |
+ memcpy(&result[0], &data_es2, sizeof(data_es2)); |
+ EXPECT_FALSE(program_->IsCached(ProgramInfoManager::kES2)); |
+ program_->UpdateES2(result); |
+ EXPECT_TRUE(program_->IsCached(ProgramInfoManager::kES2)); |
+ |
+ std::vector<GLint> size(count); |
+ EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv( |
+ NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0], |
+ GL_UNIFORM_SIZE, &size[0])); |
+ std::vector<GLint> type(count); |
+ EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv( |
+ NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0], |
+ GL_UNIFORM_TYPE, &type[0])); |
+ std::vector<GLint> name_length(count); |
+ EXPECT_TRUE(program_info_manager_->GetActiveUniformsiv( |
+ NULL, kClientProgramId, static_cast<GLsizei>(count), &indices[0], |
+ GL_UNIFORM_NAME_LENGTH, &name_length[0])); |
+ |
+ for (uint32_t ii = 0; ii < count; ++ii) { |
+ EXPECT_EQ(data_es2.uniforms[ii].size, size[ii]); |
+ EXPECT_EQ(data_es2.uniforms[ii].type, static_cast<uint32_t>(type[ii])); |
+ EXPECT_EQ(data_es2.uniforms[ii].name_length + 1, |
+ static_cast<uint32_t>(name_length[ii])); |
+ } |
+} |
+ |
} // namespace gles2 |
} // namespace gpu |