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

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.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
Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
index 58f2b9a26d35e09afef8062d53cfbcb9a3a72bf7..afb9fc76558dac8a15fc15b2c4b612aa6b2a950a 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
@@ -121,6 +121,47 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformBlocksCHROMIUMInvalidArgs) {
EXPECT_EQ(0u, header->num_uniform_blocks);
}
+TEST_P(GLES2DecoderWithShaderTest, GetUniformsES3CHROMIUMValidArgs) {
+ const uint32 kBucketId = 123;
+ GetUniformsES3CHROMIUM cmd;
+ cmd.Init(client_program_id_, kBucketId);
+ EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+ .WillOnce(SetArgPointee<2>(GL_TRUE))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORMS, _))
+ .WillOnce(SetArgPointee<2>(0))
+ .RetiresOnSaturation();
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
+ EXPECT_EQ(sizeof(UniformsES3Header), bucket->size());
+ UniformsES3Header* header =
+ bucket->GetDataAs<UniformsES3Header*>(0, sizeof(UniformsES3Header));
+ EXPECT_TRUE(header != NULL);
+ EXPECT_EQ(0u, header->num_uniforms);
+ decoder_->set_unsafe_es3_apis_enabled(false);
+ EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformsES3CHROMIUMInvalidArgs) {
+ const uint32 kBucketId = 123;
+ CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
+ EXPECT_TRUE(bucket == NULL);
+ GetUniformsES3CHROMIUM cmd;
+ cmd.Init(kInvalidClientId, kBucketId);
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ bucket = decoder_->GetBucket(kBucketId);
+ ASSERT_TRUE(bucket != NULL);
+ EXPECT_EQ(sizeof(UniformsES3Header), bucket->size());
+ UniformsES3Header* header =
+ bucket->GetDataAs<UniformsES3Header*>(0, sizeof(UniformsES3Header));
+ ASSERT_TRUE(header != NULL);
+ EXPECT_EQ(0u, header->num_uniforms);
+}
+
TEST_P(GLES2DecoderWithShaderTest,
GetTransformFeedbackVaryingsCHROMIUMValidArgs) {
const uint32 kBucketId = 123;
@@ -1148,6 +1189,154 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformIndicesBadSharedMemoryFails) {
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
}
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivSucceeds) {
+ const uint32 kBucketId = 123;
+ const GLuint kIndices[] = { 1, 2 };
+ const GLint kResults[] = { 1976, 321 };
+ const size_t kCount = arraysize(kIndices);
+ SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
+ GetActiveUniformsiv::Result* result =
+ static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
+ GetActiveUniformsiv cmd;
+ cmd.Init(client_program_id_,
+ kBucketId,
+ GL_UNIFORM_TYPE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_,
+ GetActiveUniformsiv(
+ kServiceProgramId, kCount, _, GL_UNIFORM_TYPE, _))
+ .WillOnce(SetArrayArgument<4>(kResults, kResults + kCount))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+ .WillOnce(SetArgPointee<2>(GL_TRUE))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ result->size = 0;
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(kCount, static_cast<size_t>(result->GetNumResults()));
+ for (size_t ii = 0; ii < kCount; ++ii) {
+ EXPECT_EQ(kResults[ii], result->GetData()[ii]);
+ }
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ decoder_->set_unsafe_es3_apis_enabled(false);
+ EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivBadProgramFails) {
+ const uint32 kBucketId = 123;
+ const GLuint kIndices[] = { 1, 2 };
+ const size_t kCount = arraysize(kIndices);
+ SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
+ GetActiveUniformsiv::Result* result =
+ static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ GetActiveUniformsiv cmd;
+ // None-existant program
+ cmd.Init(kInvalidClientId,
+ kBucketId,
+ GL_UNIFORM_TYPE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ result->size = 0;
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0, result->GetNumResults());
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ // Unlinked program.
+ cmd.Init(client_program_id_,
+ kBucketId,
+ GL_UNIFORM_TYPE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+ .WillOnce(SetArgPointee<2>(GL_FALSE))
+ .RetiresOnSaturation();
+ result->size = 0;
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0, result->GetNumResults());
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivBadParamsFails) {
+ const uint32 kBucketId = 123;
+ const GLuint kIndices[] = { 1, 2 };
+ const GLint kResults[] = { 1976, 321 };
+ const size_t kCount = arraysize(kIndices);
+ SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
+ GetActiveUniformsiv::Result* result =
+ static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
+ GetActiveUniformsiv cmd;
+ cmd.Init(client_program_id_,
+ kBucketId,
+ GL_UNIFORM_TYPE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_,
+ GetActiveUniformsiv(
+ kServiceProgramId, kCount, _, GL_UNIFORM_TYPE, _))
+ .WillOnce(SetArrayArgument<4>(kResults, kResults + kCount))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+ .WillOnce(SetArgPointee<2>(GL_TRUE))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_INVALID_VALUE))
+ .RetiresOnSaturation();
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ result->size = 0;
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0, result->GetNumResults());
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivResultNotInitFails) {
+ const uint32 kBucketId = 123;
+ const GLuint kIndices[] = { 1, 2 };
+ const size_t kCount = arraysize(kIndices);
+ SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
+ GetActiveUniformsiv::Result* result =
+ static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
+ GetActiveUniformsiv cmd;
+ cmd.Init(client_program_id_,
+ kBucketId,
+ GL_UNIFORM_TYPE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ result->size = 1976; // Any value other than 0.
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformsivBadSharedMemoryFails) {
+ const uint32 kBucketId = 123;
+ const GLuint kIndices[] = { 1, 2 };
+ const size_t kCount = arraysize(kIndices);
+ SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
+ GetActiveUniformsiv::Result* result =
+ static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
+ GetActiveUniformsiv cmd;
+ decoder_->set_unsafe_es3_apis_enabled(true);
+ result->size = 0;
+ cmd.Init(client_program_id_,
+ kBucketId,
+ GL_UNIFORM_TYPE,
+ kInvalidSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ result->size = 0;
+ cmd.Init(client_program_id_,
+ kBucketId,
+ GL_UNIFORM_TYPE,
+ kSharedMemoryId,
+ kInvalidSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
TEST_P(GLES2DecoderWithShaderTest, GetShaderInfoLogValidArgs) {
const char* kInfo = "hello";
const uint32 kBucketId = 123;

Powered by Google App Engine
This is Rietveld 408576698