| Index: gpu/command_buffer/service/shader_manager_unittest.cc
|
| diff --git a/gpu/command_buffer/service/shader_manager_unittest.cc b/gpu/command_buffer/service/shader_manager_unittest.cc
|
| index b5b7b383984d2dbd45e61bbe485ca520900f4fc2..d6236f7fef95232b7e7f8dc1e3f778141043ed90 100644
|
| --- a/gpu/command_buffer/service/shader_manager_unittest.cc
|
| +++ b/gpu/command_buffer/service/shader_manager_unittest.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "gpu/command_buffer/service/gpu_service_test.h"
|
| #include "gpu/command_buffer/service/mocks.h"
|
| +#include "gpu/command_buffer/service/test_helper.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/gl/gl_mock.h"
|
|
|
| @@ -86,41 +87,11 @@ TEST_F(ShaderManagerTest, DeleteBug) {
|
| EXPECT_FALSE(manager_.IsOwned(shader2.get()));
|
| }
|
|
|
| -TEST_F(ShaderManagerTest, Shader) {
|
| +TEST_F(ShaderManagerTest, DoCompile) {
|
| const GLuint kClient1Id = 1;
|
| const GLuint kService1Id = 11;
|
| const GLenum kShader1Type = GL_VERTEX_SHADER;
|
| const char* kClient1Source = "hello world";
|
| - // Check we can create shader.
|
| - Shader* shader1 = manager_.CreateShader(
|
| - kClient1Id, kService1Id, kShader1Type);
|
| - // Check shader got created.
|
| - ASSERT_TRUE(shader1 != NULL);
|
| - EXPECT_EQ(kService1Id, shader1->service_id());
|
| - // Check if the shader has correct type.
|
| - EXPECT_EQ(kShader1Type, shader1->shader_type());
|
| - EXPECT_FALSE(shader1->IsValid());
|
| - EXPECT_FALSE(shader1->InUse());
|
| - EXPECT_TRUE(shader1->source() == NULL);
|
| - EXPECT_TRUE(shader1->log_info() == NULL);
|
| - const char* kLog = "foo";
|
| - shader1->SetStatus(true, kLog, NULL);
|
| - EXPECT_TRUE(shader1->IsValid());
|
| - EXPECT_STREQ(kLog, shader1->log_info()->c_str());
|
| - // Check we can set its source.
|
| - shader1->UpdateSource(kClient1Source);
|
| - EXPECT_STREQ(kClient1Source, shader1->source()->c_str());
|
| - EXPECT_EQ(NULL, shader1->translated_source());
|
| - // Check we can set its translated source.
|
| - shader1->UpdateTranslatedSource(kClient1Source);
|
| - EXPECT_STREQ(kClient1Source,
|
| - shader1->translated_source()->c_str());
|
| -}
|
| -
|
| -TEST_F(ShaderManagerTest, GetInfo) {
|
| - const GLuint kClient1Id = 1;
|
| - const GLuint kService1Id = 11;
|
| - const GLenum kShader1Type = GL_VERTEX_SHADER;
|
| const GLenum kAttrib1Type = GL_FLOAT_VEC2;
|
| const GLsizei kAttrib1Size = 2;
|
| const int kAttrib1Precision = SH_PRECISION_MEDIUMP;
|
| @@ -140,8 +111,40 @@ TEST_F(ShaderManagerTest, GetInfo) {
|
| const int kUniform2Precision = SH_PRECISION_MEDIUMP;
|
| const int kUniform2StaticUse = 0;
|
| const char* kUniform2Name = "uni2";
|
| + const GLenum kVarying1Type = GL_FLOAT_VEC4;
|
| + const GLsizei kVarying1Size = 1;
|
| + const int kVarying1Precision = SH_PRECISION_HIGHP;
|
| + const int kVarying1StaticUse = 0;
|
| + const char* kVarying1Name = "varying1";
|
| +
|
| + // Check we can create shader.
|
| + Shader* shader1 = manager_.CreateShader(
|
| + kClient1Id, kService1Id, kShader1Type);
|
| + // Check shader got created.
|
| + ASSERT_TRUE(shader1 != NULL);
|
| + EXPECT_EQ(kService1Id, shader1->service_id());
|
| + // Check if the shader has correct type.
|
| + EXPECT_EQ(kShader1Type, shader1->shader_type());
|
| + EXPECT_FALSE(shader1->valid());
|
| + EXPECT_FALSE(shader1->InUse());
|
| + EXPECT_TRUE(shader1->source().empty());
|
| + EXPECT_TRUE(shader1->log_info().empty());
|
| + EXPECT_TRUE(shader1->signature_source().empty());
|
| + EXPECT_TRUE(shader1->translated_source().empty());
|
| + EXPECT_EQ(0u, shader1->attrib_map().size());
|
| + EXPECT_EQ(0u, shader1->uniform_map().size());
|
| + EXPECT_EQ(0u, shader1->varying_map().size());
|
| +
|
| + // Check we can set its source.
|
| + shader1->set_source(kClient1Source);
|
| + EXPECT_STREQ(kClient1Source, shader1->source().c_str());
|
| + EXPECT_TRUE(shader1->signature_source().empty());
|
| +
|
| + // Check DoCompile() will set compilation states, log, translated source,
|
| + // shader variables, and name mapping.
|
| + const std::string kLog = "foo";
|
| + const std::string kTranslatedSource = "poo";
|
|
|
| - MockShaderTranslator shader_translator;
|
| ShaderTranslator::VariableMap attrib_map;
|
| attrib_map[kAttrib1Name] = ShaderTranslatorInterface::VariableInfo(
|
| kAttrib1Type, kAttrib1Size, kAttrib1Precision,
|
| @@ -156,24 +159,22 @@ TEST_F(ShaderManagerTest, GetInfo) {
|
| uniform_map[kUniform2Name] = ShaderTranslatorInterface::VariableInfo(
|
| kUniform2Type, kUniform2Size, kUniform2Precision,
|
| kUniform2StaticUse, kUniform2Name);
|
| - EXPECT_CALL(shader_translator, attrib_map())
|
| - .WillRepeatedly(ReturnRef(attrib_map));
|
| - EXPECT_CALL(shader_translator, uniform_map())
|
| - .WillRepeatedly(ReturnRef(uniform_map));
|
| ShaderTranslator::VariableMap varying_map;
|
| - EXPECT_CALL(shader_translator, varying_map())
|
| - .WillRepeatedly(ReturnRef(varying_map));
|
| - ShaderTranslator::NameMap name_map;
|
| - EXPECT_CALL(shader_translator, name_map())
|
| - .WillRepeatedly(ReturnRef(name_map));
|
| - // Check we can create shader.
|
| - Shader* shader1 = manager_.CreateShader(
|
| - kClient1Id, kService1Id, kShader1Type);
|
| - // Check shader got created.
|
| - ASSERT_TRUE(shader1 != NULL);
|
| - // Set Status
|
| - shader1->SetStatus(true, "", &shader_translator);
|
| - // Check attrib and uniform infos got copied.
|
| + varying_map[kVarying1Name] = ShaderTranslatorInterface::VariableInfo(
|
| + kVarying1Type, kVarying1Size, kVarying1Precision,
|
| + kVarying1StaticUse, kVarying1Name);
|
| +
|
| + TestHelper::SetShaderStates(
|
| + gl_.get(), shader1, true, &kLog, &kTranslatedSource,
|
| + &attrib_map, &uniform_map, &varying_map, NULL);
|
| + EXPECT_TRUE(shader1->valid());
|
| + // When compilation succeeds, no log is recorded.
|
| + EXPECT_STREQ("", shader1->log_info().c_str());
|
| + EXPECT_STREQ(kClient1Source, shader1->signature_source().c_str());
|
| + EXPECT_STREQ(kTranslatedSource.c_str(), shader1->translated_source().c_str());
|
| +
|
| + // Check varying infos got copied.
|
| + EXPECT_EQ(attrib_map.size(), shader1->attrib_map().size());
|
| for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin();
|
| it != attrib_map.end(); ++it) {
|
| const Shader::VariableInfo* variable_info =
|
| @@ -183,8 +184,10 @@ TEST_F(ShaderManagerTest, GetInfo) {
|
| EXPECT_EQ(it->second.size, variable_info->size);
|
| EXPECT_EQ(it->second.precision, variable_info->precision);
|
| EXPECT_EQ(it->second.static_use, variable_info->static_use);
|
| - EXPECT_EQ(it->second.name, variable_info->name);
|
| + EXPECT_STREQ(it->second.name.c_str(), variable_info->name.c_str());
|
| }
|
| + // Check uniform infos got copied.
|
| + EXPECT_EQ(uniform_map.size(), shader1->uniform_map().size());
|
| for (ShaderTranslator::VariableMap::const_iterator it = uniform_map.begin();
|
| it != uniform_map.end(); ++it) {
|
| const Shader::VariableInfo* variable_info =
|
| @@ -194,23 +197,32 @@ TEST_F(ShaderManagerTest, GetInfo) {
|
| EXPECT_EQ(it->second.size, variable_info->size);
|
| EXPECT_EQ(it->second.precision, variable_info->precision);
|
| EXPECT_EQ(it->second.static_use, variable_info->static_use);
|
| - EXPECT_EQ(it->second.name, variable_info->name);
|
| - }
|
| - // Check attrib and uniform get cleared.
|
| - shader1->SetStatus(true, NULL, NULL);
|
| - EXPECT_TRUE(shader1->log_info() == NULL);
|
| - for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin();
|
| - it != attrib_map.end(); ++it) {
|
| - const Shader::VariableInfo* variable_info =
|
| - shader1->GetAttribInfo(it->first);
|
| - EXPECT_TRUE(variable_info == NULL);
|
| + EXPECT_STREQ(it->second.name.c_str(), variable_info->name.c_str());
|
| }
|
| - for (ShaderTranslator::VariableMap::const_iterator it = uniform_map.begin();
|
| - it != uniform_map.end(); ++it) {
|
| + // Check varying infos got copied.
|
| + EXPECT_EQ(varying_map.size(), shader1->varying_map().size());
|
| + for (ShaderTranslator::VariableMap::const_iterator it = varying_map.begin();
|
| + it != varying_map.end(); ++it) {
|
| const Shader::VariableInfo* variable_info =
|
| - shader1->GetUniformInfo(it->first);
|
| - ASSERT_TRUE(variable_info == NULL);
|
| + shader1->GetVaryingInfo(it->first);
|
| + ASSERT_TRUE(variable_info != NULL);
|
| + EXPECT_EQ(it->second.type, variable_info->type);
|
| + EXPECT_EQ(it->second.size, variable_info->size);
|
| + EXPECT_EQ(it->second.precision, variable_info->precision);
|
| + EXPECT_EQ(it->second.static_use, variable_info->static_use);
|
| + EXPECT_STREQ(it->second.name.c_str(), variable_info->name.c_str());
|
| }
|
| +
|
| + // Compile failure case.
|
| + TestHelper::SetShaderStates(
|
| + gl_.get(), shader1, false, &kLog, &kTranslatedSource,
|
| + &attrib_map, &uniform_map, &varying_map, NULL);
|
| + EXPECT_FALSE(shader1->valid());
|
| + EXPECT_STREQ(kLog.c_str(), shader1->log_info().c_str());
|
| + EXPECT_STREQ("", shader1->translated_source().c_str());
|
| + EXPECT_TRUE(shader1->attrib_map().empty());
|
| + EXPECT_TRUE(shader1->uniform_map().empty());
|
| + EXPECT_TRUE(shader1->varying_map().empty());
|
| }
|
|
|
| TEST_F(ShaderManagerTest, ShaderInfoUseCount) {
|
|
|