| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "gpu/command_buffer/service/shader_manager.h" | 5 #include "gpu/command_buffer/service/shader_manager.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "gpu/command_buffer/service/gpu_service_test.h" | 8 #include "gpu/command_buffer/service/gpu_service_test.h" |
| 9 #include "gpu/command_buffer/service/mocks.h" | 9 #include "gpu/command_buffer/service/mocks.h" |
| 10 #include "gpu/command_buffer/service/test_helper.h" | 10 #include "gpu/command_buffer/service/test_helper.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 EXPECT_TRUE(manager_.IsOwned(shader1.get())); | 86 EXPECT_TRUE(manager_.IsOwned(shader1.get())); |
| 87 EXPECT_FALSE(manager_.IsOwned(shader2.get())); | 87 EXPECT_FALSE(manager_.IsOwned(shader2.get())); |
| 88 } | 88 } |
| 89 | 89 |
| 90 TEST_F(ShaderManagerTest, DoCompile) { | 90 TEST_F(ShaderManagerTest, DoCompile) { |
| 91 const GLuint kClient1Id = 1; | 91 const GLuint kClient1Id = 1; |
| 92 const GLuint kService1Id = 11; | 92 const GLuint kService1Id = 11; |
| 93 const GLenum kShader1Type = GL_VERTEX_SHADER; | 93 const GLenum kShader1Type = GL_VERTEX_SHADER; |
| 94 const char* kClient1Source = "hello world"; | 94 const char* kClient1Source = "hello world"; |
| 95 const GLenum kAttrib1Type = GL_FLOAT_VEC2; | 95 const GLenum kAttrib1Type = GL_FLOAT_VEC2; |
| 96 const GLsizei kAttrib1Size = 2; | 96 const GLint kAttrib1Size = 2; |
| 97 const int kAttrib1Precision = SH_PRECISION_MEDIUMP; | 97 const GLenum kAttrib1Precision = GL_MEDIUM_FLOAT; |
| 98 const char* kAttrib1Name = "attr1"; | 98 const char* kAttrib1Name = "attr1"; |
| 99 const GLenum kAttrib2Type = GL_FLOAT_VEC3; | 99 const GLenum kAttrib2Type = GL_FLOAT_VEC3; |
| 100 const GLsizei kAttrib2Size = 4; | 100 const GLint kAttrib2Size = 4; |
| 101 const int kAttrib2Precision = SH_PRECISION_HIGHP; | 101 const GLenum kAttrib2Precision = GL_HIGH_FLOAT; |
| 102 const char* kAttrib2Name = "attr2"; | 102 const char* kAttrib2Name = "attr2"; |
| 103 const int kAttribStaticUse = 0; | 103 const bool kAttribStaticUse = false; |
| 104 const GLenum kUniform1Type = GL_FLOAT_MAT2; | 104 const GLenum kUniform1Type = GL_FLOAT_MAT2; |
| 105 const GLsizei kUniform1Size = 3; | 105 const GLint kUniform1Size = 3; |
| 106 const int kUniform1Precision = SH_PRECISION_LOWP; | 106 const GLenum kUniform1Precision = GL_LOW_FLOAT; |
| 107 const int kUniform1StaticUse = 1; | 107 const bool kUniform1StaticUse = true; |
| 108 const char* kUniform1Name = "uni1"; | 108 const char* kUniform1Name = "uni1"; |
| 109 const GLenum kUniform2Type = GL_FLOAT_MAT3; | 109 const GLenum kUniform2Type = GL_FLOAT_MAT3; |
| 110 const GLsizei kUniform2Size = 5; | 110 const GLint kUniform2Size = 5; |
| 111 const int kUniform2Precision = SH_PRECISION_MEDIUMP; | 111 const GLenum kUniform2Precision = GL_MEDIUM_FLOAT; |
| 112 const int kUniform2StaticUse = 0; | 112 const bool kUniform2StaticUse = false; |
| 113 const char* kUniform2Name = "uni2"; | 113 const char* kUniform2Name = "uni2"; |
| 114 const GLenum kVarying1Type = GL_FLOAT_VEC4; | 114 const GLenum kVarying1Type = GL_FLOAT_VEC4; |
| 115 const GLsizei kVarying1Size = 1; | 115 const GLint kVarying1Size = 1; |
| 116 const int kVarying1Precision = SH_PRECISION_HIGHP; | 116 const GLenum kVarying1Precision = GL_HIGH_FLOAT; |
| 117 const int kVarying1StaticUse = 0; | 117 const bool kVarying1StaticUse = false; |
| 118 const char* kVarying1Name = "varying1"; | 118 const char* kVarying1Name = "varying1"; |
| 119 | 119 |
| 120 // Check we can create shader. | 120 // Check we can create shader. |
| 121 Shader* shader1 = manager_.CreateShader( | 121 Shader* shader1 = manager_.CreateShader( |
| 122 kClient1Id, kService1Id, kShader1Type); | 122 kClient1Id, kService1Id, kShader1Type); |
| 123 // Check shader got created. | 123 // Check shader got created. |
| 124 ASSERT_TRUE(shader1 != NULL); | 124 ASSERT_TRUE(shader1 != NULL); |
| 125 EXPECT_EQ(kService1Id, shader1->service_id()); | 125 EXPECT_EQ(kService1Id, shader1->service_id()); |
| 126 // Check if the shader has correct type. | 126 // Check if the shader has correct type. |
| 127 EXPECT_EQ(kShader1Type, shader1->shader_type()); | 127 EXPECT_EQ(kShader1Type, shader1->shader_type()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 138 // Check we can set its source. | 138 // Check we can set its source. |
| 139 shader1->set_source(kClient1Source); | 139 shader1->set_source(kClient1Source); |
| 140 EXPECT_STREQ(kClient1Source, shader1->source().c_str()); | 140 EXPECT_STREQ(kClient1Source, shader1->source().c_str()); |
| 141 EXPECT_TRUE(shader1->signature_source().empty()); | 141 EXPECT_TRUE(shader1->signature_source().empty()); |
| 142 | 142 |
| 143 // Check DoCompile() will set compilation states, log, translated source, | 143 // Check DoCompile() will set compilation states, log, translated source, |
| 144 // shader variables, and name mapping. | 144 // shader variables, and name mapping. |
| 145 const std::string kLog = "foo"; | 145 const std::string kLog = "foo"; |
| 146 const std::string kTranslatedSource = "poo"; | 146 const std::string kTranslatedSource = "poo"; |
| 147 | 147 |
| 148 ShaderTranslator::VariableMap attrib_map; | 148 AttributeMap attrib_map; |
| 149 attrib_map[kAttrib1Name] = ShaderTranslatorInterface::VariableInfo( | 149 attrib_map[kAttrib1Name] = TestHelper::ConstructAttribute( |
| 150 kAttrib1Type, kAttrib1Size, kAttrib1Precision, | 150 kAttrib1Type, kAttrib1Size, kAttrib1Precision, |
| 151 kAttribStaticUse, kAttrib1Name); | 151 kAttribStaticUse, kAttrib1Name); |
| 152 attrib_map[kAttrib2Name] = ShaderTranslatorInterface::VariableInfo( | 152 attrib_map[kAttrib2Name] = TestHelper::ConstructAttribute( |
| 153 kAttrib2Type, kAttrib2Size, kAttrib2Precision, | 153 kAttrib2Type, kAttrib2Size, kAttrib2Precision, |
| 154 kAttribStaticUse, kAttrib2Name); | 154 kAttribStaticUse, kAttrib2Name); |
| 155 ShaderTranslator::VariableMap uniform_map; | 155 UniformMap uniform_map; |
| 156 uniform_map[kUniform1Name] = ShaderTranslatorInterface::VariableInfo( | 156 uniform_map[kUniform1Name] = TestHelper::ConstructUniform( |
| 157 kUniform1Type, kUniform1Size, kUniform1Precision, | 157 kUniform1Type, kUniform1Size, kUniform1Precision, |
| 158 kUniform1StaticUse, kUniform1Name); | 158 kUniform1StaticUse, kUniform1Name); |
| 159 uniform_map[kUniform2Name] = ShaderTranslatorInterface::VariableInfo( | 159 uniform_map[kUniform2Name] = TestHelper::ConstructUniform( |
| 160 kUniform2Type, kUniform2Size, kUniform2Precision, | 160 kUniform2Type, kUniform2Size, kUniform2Precision, |
| 161 kUniform2StaticUse, kUniform2Name); | 161 kUniform2StaticUse, kUniform2Name); |
| 162 ShaderTranslator::VariableMap varying_map; | 162 VaryingMap varying_map; |
| 163 varying_map[kVarying1Name] = ShaderTranslatorInterface::VariableInfo( | 163 varying_map[kVarying1Name] = TestHelper::ConstructVarying( |
| 164 kVarying1Type, kVarying1Size, kVarying1Precision, | 164 kVarying1Type, kVarying1Size, kVarying1Precision, |
| 165 kVarying1StaticUse, kVarying1Name); | 165 kVarying1StaticUse, kVarying1Name); |
| 166 | 166 |
| 167 TestHelper::SetShaderStates( | 167 TestHelper::SetShaderStates( |
| 168 gl_.get(), shader1, true, &kLog, &kTranslatedSource, | 168 gl_.get(), shader1, true, &kLog, &kTranslatedSource, |
| 169 &attrib_map, &uniform_map, &varying_map, NULL); | 169 &attrib_map, &uniform_map, &varying_map, NULL); |
| 170 EXPECT_TRUE(shader1->valid()); | 170 EXPECT_TRUE(shader1->valid()); |
| 171 // When compilation succeeds, no log is recorded. | 171 // When compilation succeeds, no log is recorded. |
| 172 EXPECT_STREQ("", shader1->log_info().c_str()); | 172 EXPECT_STREQ("", shader1->log_info().c_str()); |
| 173 EXPECT_STREQ(kClient1Source, shader1->signature_source().c_str()); | 173 EXPECT_STREQ(kClient1Source, shader1->signature_source().c_str()); |
| 174 EXPECT_STREQ(kTranslatedSource.c_str(), shader1->translated_source().c_str()); | 174 EXPECT_STREQ(kTranslatedSource.c_str(), shader1->translated_source().c_str()); |
| 175 | 175 |
| 176 // Check varying infos got copied. | 176 // Check varying infos got copied. |
| 177 EXPECT_EQ(attrib_map.size(), shader1->attrib_map().size()); | 177 EXPECT_EQ(attrib_map.size(), shader1->attrib_map().size()); |
| 178 for (ShaderTranslator::VariableMap::const_iterator it = attrib_map.begin(); | 178 for (AttributeMap::const_iterator it = attrib_map.begin(); |
| 179 it != attrib_map.end(); ++it) { | 179 it != attrib_map.end(); ++it) { |
| 180 const Shader::VariableInfo* variable_info = | 180 const sh::Attribute* variable_info = shader1->GetAttribInfo(it->first); |
| 181 shader1->GetAttribInfo(it->first); | |
| 182 ASSERT_TRUE(variable_info != NULL); | 181 ASSERT_TRUE(variable_info != NULL); |
| 183 EXPECT_EQ(it->second.type, variable_info->type); | 182 EXPECT_EQ(it->second.type, variable_info->type); |
| 184 EXPECT_EQ(it->second.size, variable_info->size); | 183 EXPECT_EQ(it->second.arraySize, variable_info->arraySize); |
| 185 EXPECT_EQ(it->second.precision, variable_info->precision); | 184 EXPECT_EQ(it->second.precision, variable_info->precision); |
| 186 EXPECT_EQ(it->second.static_use, variable_info->static_use); | 185 EXPECT_EQ(it->second.staticUse, variable_info->staticUse); |
| 187 EXPECT_STREQ(it->second.name.c_str(), variable_info->name.c_str()); | 186 EXPECT_STREQ(it->second.name.c_str(), variable_info->name.c_str()); |
| 188 } | 187 } |
| 189 // Check uniform infos got copied. | 188 // Check uniform infos got copied. |
| 190 EXPECT_EQ(uniform_map.size(), shader1->uniform_map().size()); | 189 EXPECT_EQ(uniform_map.size(), shader1->uniform_map().size()); |
| 191 for (ShaderTranslator::VariableMap::const_iterator it = uniform_map.begin(); | 190 for (UniformMap::const_iterator it = uniform_map.begin(); |
| 192 it != uniform_map.end(); ++it) { | 191 it != uniform_map.end(); ++it) { |
| 193 const Shader::VariableInfo* variable_info = | 192 const sh::Uniform* variable_info = shader1->GetUniformInfo(it->first); |
| 194 shader1->GetUniformInfo(it->first); | |
| 195 ASSERT_TRUE(variable_info != NULL); | 193 ASSERT_TRUE(variable_info != NULL); |
| 196 EXPECT_EQ(it->second.type, variable_info->type); | 194 EXPECT_EQ(it->second.type, variable_info->type); |
| 197 EXPECT_EQ(it->second.size, variable_info->size); | 195 EXPECT_EQ(it->second.arraySize, variable_info->arraySize); |
| 198 EXPECT_EQ(it->second.precision, variable_info->precision); | 196 EXPECT_EQ(it->second.precision, variable_info->precision); |
| 199 EXPECT_EQ(it->second.static_use, variable_info->static_use); | 197 EXPECT_EQ(it->second.staticUse, variable_info->staticUse); |
| 200 EXPECT_STREQ(it->second.name.c_str(), variable_info->name.c_str()); | 198 EXPECT_STREQ(it->second.name.c_str(), variable_info->name.c_str()); |
| 201 } | 199 } |
| 202 // Check varying infos got copied. | 200 // Check varying infos got copied. |
| 203 EXPECT_EQ(varying_map.size(), shader1->varying_map().size()); | 201 EXPECT_EQ(varying_map.size(), shader1->varying_map().size()); |
| 204 for (ShaderTranslator::VariableMap::const_iterator it = varying_map.begin(); | 202 for (VaryingMap::const_iterator it = varying_map.begin(); |
| 205 it != varying_map.end(); ++it) { | 203 it != varying_map.end(); ++it) { |
| 206 const Shader::VariableInfo* variable_info = | 204 const sh::Varying* variable_info = shader1->GetVaryingInfo(it->first); |
| 207 shader1->GetVaryingInfo(it->first); | |
| 208 ASSERT_TRUE(variable_info != NULL); | 205 ASSERT_TRUE(variable_info != NULL); |
| 209 EXPECT_EQ(it->second.type, variable_info->type); | 206 EXPECT_EQ(it->second.type, variable_info->type); |
| 210 EXPECT_EQ(it->second.size, variable_info->size); | 207 EXPECT_EQ(it->second.arraySize, variable_info->arraySize); |
| 211 EXPECT_EQ(it->second.precision, variable_info->precision); | 208 EXPECT_EQ(it->second.precision, variable_info->precision); |
| 212 EXPECT_EQ(it->second.static_use, variable_info->static_use); | 209 EXPECT_EQ(it->second.staticUse, variable_info->staticUse); |
| 213 EXPECT_STREQ(it->second.name.c_str(), variable_info->name.c_str()); | 210 EXPECT_STREQ(it->second.name.c_str(), variable_info->name.c_str()); |
| 214 } | 211 } |
| 215 | 212 |
| 216 // Compile failure case. | 213 // Compile failure case. |
| 217 TestHelper::SetShaderStates( | 214 TestHelper::SetShaderStates( |
| 218 gl_.get(), shader1, false, &kLog, &kTranslatedSource, | 215 gl_.get(), shader1, false, &kLog, &kTranslatedSource, |
| 219 &attrib_map, &uniform_map, &varying_map, NULL); | 216 &attrib_map, &uniform_map, &varying_map, NULL); |
| 220 EXPECT_FALSE(shader1->valid()); | 217 EXPECT_FALSE(shader1->valid()); |
| 221 EXPECT_STREQ(kLog.c_str(), shader1->log_info().c_str()); | 218 EXPECT_STREQ(kLog.c_str(), shader1->log_info().c_str()); |
| 222 EXPECT_STREQ("", shader1->translated_source().c_str()); | 219 EXPECT_STREQ("", shader1->translated_source().c_str()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 EXPECT_FALSE(shader1->InUse()); | 260 EXPECT_FALSE(shader1->InUse()); |
| 264 shader2 = manager_.GetShader(kClient1Id); | 261 shader2 = manager_.GetShader(kClient1Id); |
| 265 EXPECT_EQ(shader1, shader2); | 262 EXPECT_EQ(shader1, shader2); |
| 266 manager_.MarkAsDeleted(shader1); // this should delete the shader. | 263 manager_.MarkAsDeleted(shader1); // this should delete the shader. |
| 267 shader2 = manager_.GetShader(kClient1Id); | 264 shader2 = manager_.GetShader(kClient1Id); |
| 268 EXPECT_TRUE(shader2 == NULL); | 265 EXPECT_TRUE(shader2 == NULL); |
| 269 } | 266 } |
| 270 | 267 |
| 271 } // namespace gles2 | 268 } // namespace gles2 |
| 272 } // namespace gpu | 269 } // namespace gpu |
| OLD | NEW |