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

Unified Diff: gpu/command_buffer/service/program_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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/program_manager_unittest.cc
diff --git a/gpu/command_buffer/service/program_manager_unittest.cc b/gpu/command_buffer/service/program_manager_unittest.cc
index 33da572140cd65b7ae4f6f337c0e7682bb4a8427..99678f4588cd2215300c548b0b6404d423896873 100644
--- a/gpu/command_buffer/service/program_manager_unittest.cc
+++ b/gpu/command_buffer/service/program_manager_unittest.cc
@@ -1324,6 +1324,102 @@ TEST_F(ProgramManagerWithShaderTest,
EXPECT_EQ(0, memcmp(&data, bucket_data, sizeof(Data)));
}
+TEST_F(ProgramManagerWithShaderTest, ProgramInfoGetUniformsES3None) {
+ CommonDecoder::Bucket bucket;
+ const Program* program = manager_.GetProgram(kClientProgramId);
+ ASSERT_TRUE(program != NULL);
+ // The program's previous link failed.
+ EXPECT_CALL(*(gl_.get()),
+ GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+ .WillOnce(SetArgPointee<2>(GL_FALSE))
+ .RetiresOnSaturation();
+ EXPECT_TRUE(program->GetUniformsES3(&bucket));
+ EXPECT_EQ(sizeof(UniformsES3Header), bucket.size());
+ UniformsES3Header* header =
+ bucket.GetDataAs<UniformsES3Header*>(0, sizeof(UniformsES3Header));
+ EXPECT_TRUE(header != NULL);
+ EXPECT_EQ(0u, header->num_uniforms);
+ // Zero uniform blocks.
+ EXPECT_CALL(*(gl_.get()),
+ GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+ .WillOnce(SetArgPointee<2>(GL_TRUE))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*(gl_.get()),
+ GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORMS, _))
+ .WillOnce(SetArgPointee<2>(0))
+ .RetiresOnSaturation();
+ EXPECT_TRUE(program->GetUniformsES3(&bucket));
+ EXPECT_EQ(sizeof(UniformsES3Header), bucket.size());
+ header =
+ bucket.GetDataAs<UniformsES3Header*>(0, sizeof(UniformsES3Header));
+ EXPECT_TRUE(header != NULL);
+ EXPECT_EQ(0u, header->num_uniforms);
+}
+
+TEST_F(ProgramManagerWithShaderTest, ProgramInfoGetUniformsES3Valid) {
+ CommonDecoder::Bucket bucket;
+ const Program* program = manager_.GetProgram(kClientProgramId);
+ ASSERT_TRUE(program != NULL);
+ struct Data {
+ UniformsES3Header header;
+ UniformES3Info entry[2];
+ };
+ Data data;
+ const GLint kBlockIndex[] = { -1, 2 };
+ const GLint kOffset[] = { 3, 4 };
+ const GLint kArrayStride[] = { 7, 8 };
+ const GLint kMatrixStride[] = { 9, 10 };
+ const GLint kIsRowMajor[] = { 0, 1 };
+ data.header.num_uniforms = 2;
+ for (uint32_t ii = 0; ii < data.header.num_uniforms; ++ii) {
+ data.entry[ii].block_index = kBlockIndex[ii];
+ data.entry[ii].offset = kOffset[ii];
+ data.entry[ii].array_stride = kArrayStride[ii];
+ data.entry[ii].matrix_stride = kMatrixStride[ii];
+ data.entry[ii].is_row_major = kIsRowMajor[ii];
+ }
+
+ EXPECT_CALL(*(gl_.get()),
+ GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+ .WillOnce(SetArgPointee<2>(GL_TRUE))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*(gl_.get()),
+ GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORMS, _))
+ .WillOnce(SetArgPointee<2>(data.header.num_uniforms))
+ .RetiresOnSaturation();
+
+ const GLenum kPname[] = {
+ GL_UNIFORM_BLOCK_INDEX,
+ GL_UNIFORM_OFFSET,
+ GL_UNIFORM_ARRAY_STRIDE,
+ GL_UNIFORM_MATRIX_STRIDE,
+ GL_UNIFORM_IS_ROW_MAJOR,
+ };
+ const GLint* kParams[] = {
+ kBlockIndex,
+ kOffset,
+ kArrayStride,
+ kMatrixStride,
+ kIsRowMajor,
+ };
+ const size_t kNumIterations = arraysize(kPname);
+ for (size_t ii = 0; ii < kNumIterations; ++ii) {
+ EXPECT_CALL(*(gl_.get()),
+ GetActiveUniformsiv(
+ kServiceProgramId, data.header.num_uniforms, _,
+ kPname[ii], _))
+ .WillOnce(SetArrayArgument<4>(
+ kParams[ii], kParams[ii] + data.header.num_uniforms))
+ .RetiresOnSaturation();
+ }
+
+ program->GetUniformsES3(&bucket);
+ EXPECT_EQ(sizeof(Data), bucket.size());
+ Data* bucket_data = bucket.GetDataAs<Data*>(0, sizeof(Data));
+ EXPECT_TRUE(bucket_data != NULL);
+ EXPECT_EQ(0, memcmp(&data, bucket_data, sizeof(Data)));
+}
+
// Some drivers optimize out unused uniform array elements, so their
// location would be -1.
TEST_F(ProgramManagerWithShaderTest, UnusedUniformArrayElements) {
« no previous file with comments | « gpu/command_buffer/service/program_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698