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