| 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/program_manager.h" | 5 #include "gpu/command_buffer/service/program_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1231 EXPECT_EQ(0, memcmp(&data, bucket_data, sizeof(Data))); | 1231 EXPECT_EQ(0, memcmp(&data, bucket_data, sizeof(Data))); |
| 1232 } | 1232 } |
| 1233 | 1233 |
| 1234 TEST_F(ProgramManagerWithShaderTest, | 1234 TEST_F(ProgramManagerWithShaderTest, |
| 1235 ProgramInfoGetTransformFeedbackVaryingsNone) { | 1235 ProgramInfoGetTransformFeedbackVaryingsNone) { |
| 1236 CommonDecoder::Bucket bucket; | 1236 CommonDecoder::Bucket bucket; |
| 1237 const Program* program = manager_.GetProgram(kClientProgramId); | 1237 const Program* program = manager_.GetProgram(kClientProgramId); |
| 1238 ASSERT_TRUE(program != NULL); | 1238 ASSERT_TRUE(program != NULL); |
| 1239 // The program's previous link failed. | 1239 // The program's previous link failed. |
| 1240 EXPECT_CALL(*(gl_.get()), | 1240 EXPECT_CALL(*(gl_.get()), |
| 1241 GetProgramiv(kServiceProgramId, |
| 1242 GL_TRANSFORM_FEEDBACK_BUFFER_MODE, |
| 1243 _)) |
| 1244 .WillOnce(SetArgPointee<2>(GL_INTERLEAVED_ATTRIBS)) |
| 1245 .RetiresOnSaturation(); |
| 1246 EXPECT_CALL(*(gl_.get()), |
| 1241 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 1247 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 1242 .WillOnce(SetArgPointee<2>(GL_FALSE)) | 1248 .WillOnce(SetArgPointee<2>(GL_FALSE)) |
| 1243 .RetiresOnSaturation(); | 1249 .RetiresOnSaturation(); |
| 1244 EXPECT_TRUE(program->GetTransformFeedbackVaryings(&bucket)); | 1250 EXPECT_TRUE(program->GetTransformFeedbackVaryings(&bucket)); |
| 1245 EXPECT_EQ(sizeof(TransformFeedbackVaryingsHeader), bucket.size()); | 1251 EXPECT_EQ(sizeof(TransformFeedbackVaryingsHeader), bucket.size()); |
| 1246 TransformFeedbackVaryingsHeader* header = | 1252 TransformFeedbackVaryingsHeader* header = |
| 1247 bucket.GetDataAs<TransformFeedbackVaryingsHeader*>( | 1253 bucket.GetDataAs<TransformFeedbackVaryingsHeader*>( |
| 1248 0, sizeof(TransformFeedbackVaryingsHeader)); | 1254 0, sizeof(TransformFeedbackVaryingsHeader)); |
| 1249 EXPECT_TRUE(header != NULL); | 1255 EXPECT_TRUE(header != NULL); |
| 1250 EXPECT_EQ(0u, header->num_transform_feedback_varyings); | 1256 EXPECT_EQ(0u, header->num_transform_feedback_varyings); |
| 1251 // Zero uniform blocks. | 1257 EXPECT_EQ(static_cast<uint32_t>(GL_INTERLEAVED_ATTRIBS), |
| 1258 header->transform_feedback_buffer_mode); |
| 1259 // Zero transform feedback blocks. |
| 1260 EXPECT_CALL(*(gl_.get()), |
| 1261 GetProgramiv(kServiceProgramId, |
| 1262 GL_TRANSFORM_FEEDBACK_BUFFER_MODE, |
| 1263 _)) |
| 1264 .WillOnce(SetArgPointee<2>(GL_SEPARATE_ATTRIBS)) |
| 1265 .RetiresOnSaturation(); |
| 1252 EXPECT_CALL(*(gl_.get()), | 1266 EXPECT_CALL(*(gl_.get()), |
| 1253 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 1267 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 1254 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 1268 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 1255 .RetiresOnSaturation(); | 1269 .RetiresOnSaturation(); |
| 1256 EXPECT_CALL(*(gl_.get()), | 1270 EXPECT_CALL(*(gl_.get()), |
| 1257 GetProgramiv( | 1271 GetProgramiv( |
| 1258 kServiceProgramId, GL_TRANSFORM_FEEDBACK_VARYINGS, _)) | 1272 kServiceProgramId, GL_TRANSFORM_FEEDBACK_VARYINGS, _)) |
| 1259 .WillOnce(SetArgPointee<2>(0)) | 1273 .WillOnce(SetArgPointee<2>(0)) |
| 1260 .RetiresOnSaturation(); | 1274 .RetiresOnSaturation(); |
| 1261 EXPECT_TRUE(program->GetTransformFeedbackVaryings(&bucket)); | 1275 EXPECT_TRUE(program->GetTransformFeedbackVaryings(&bucket)); |
| 1262 EXPECT_EQ(sizeof(TransformFeedbackVaryingsHeader), bucket.size()); | 1276 EXPECT_EQ(sizeof(TransformFeedbackVaryingsHeader), bucket.size()); |
| 1263 header = bucket.GetDataAs<TransformFeedbackVaryingsHeader*>( | 1277 header = bucket.GetDataAs<TransformFeedbackVaryingsHeader*>( |
| 1264 0, sizeof(TransformFeedbackVaryingsHeader)); | 1278 0, sizeof(TransformFeedbackVaryingsHeader)); |
| 1265 EXPECT_TRUE(header != NULL); | 1279 EXPECT_TRUE(header != NULL); |
| 1280 EXPECT_EQ(static_cast<uint32_t>(GL_SEPARATE_ATTRIBS), |
| 1281 header->transform_feedback_buffer_mode); |
| 1266 EXPECT_EQ(0u, header->num_transform_feedback_varyings); | 1282 EXPECT_EQ(0u, header->num_transform_feedback_varyings); |
| 1267 } | 1283 } |
| 1268 | 1284 |
| 1269 TEST_F(ProgramManagerWithShaderTest, | 1285 TEST_F(ProgramManagerWithShaderTest, |
| 1270 ProgramInfoGetTransformFeedbackVaryingsValid) { | 1286 ProgramInfoGetTransformFeedbackVaryingsValid) { |
| 1271 CommonDecoder::Bucket bucket; | 1287 CommonDecoder::Bucket bucket; |
| 1272 const Program* program = manager_.GetProgram(kClientProgramId); | 1288 const Program* program = manager_.GetProgram(kClientProgramId); |
| 1273 ASSERT_TRUE(program != NULL); | 1289 ASSERT_TRUE(program != NULL); |
| 1274 struct Data { | 1290 struct Data { |
| 1275 TransformFeedbackVaryingsHeader header; | 1291 TransformFeedbackVaryingsHeader header; |
| 1276 TransformFeedbackVaryingInfo entry[2]; | 1292 TransformFeedbackVaryingInfo entry[2]; |
| 1277 char name0[4]; | 1293 char name0[4]; |
| 1278 char name1[8]; | 1294 char name1[8]; |
| 1279 }; | 1295 }; |
| 1280 Data data; | 1296 Data data; |
| 1281 // The names needs to be of size 4*k-1 to avoid padding in the struct Data. | 1297 // The names needs to be of size 4*k-1 to avoid padding in the struct Data. |
| 1282 // This is a testing only problem. | 1298 // This is a testing only problem. |
| 1283 const char* kName[] = { "cow", "chicken" }; | 1299 const char* kName[] = { "cow", "chicken" }; |
| 1300 data.header.transform_feedback_buffer_mode = GL_INTERLEAVED_ATTRIBS; |
| 1284 data.header.num_transform_feedback_varyings = 2; | 1301 data.header.num_transform_feedback_varyings = 2; |
| 1285 data.entry[0].size = 1; | 1302 data.entry[0].size = 1; |
| 1286 data.entry[0].type = GL_FLOAT_VEC2; | 1303 data.entry[0].type = GL_FLOAT_VEC2; |
| 1287 data.entry[0].name_offset = ComputeOffset(&data, data.name0); | 1304 data.entry[0].name_offset = ComputeOffset(&data, data.name0); |
| 1288 data.entry[0].name_length = arraysize(data.name0); | 1305 data.entry[0].name_length = arraysize(data.name0); |
| 1289 data.entry[1].size = 2; | 1306 data.entry[1].size = 2; |
| 1290 data.entry[1].type = GL_FLOAT; | 1307 data.entry[1].type = GL_FLOAT; |
| 1291 data.entry[1].name_offset = ComputeOffset(&data, data.name1); | 1308 data.entry[1].name_offset = ComputeOffset(&data, data.name1); |
| 1292 data.entry[1].name_length = arraysize(data.name1); | 1309 data.entry[1].name_length = arraysize(data.name1); |
| 1293 memcpy(data.name0, kName[0], arraysize(data.name0)); | 1310 memcpy(data.name0, kName[0], arraysize(data.name0)); |
| 1294 memcpy(data.name1, kName[1], arraysize(data.name1)); | 1311 memcpy(data.name1, kName[1], arraysize(data.name1)); |
| 1295 | 1312 |
| 1313 |
| 1314 EXPECT_CALL(*(gl_.get()), |
| 1315 GetProgramiv(kServiceProgramId, |
| 1316 GL_TRANSFORM_FEEDBACK_BUFFER_MODE, |
| 1317 _)) |
| 1318 .WillOnce(SetArgPointee<2>(GL_INTERLEAVED_ATTRIBS)) |
| 1319 .RetiresOnSaturation(); |
| 1296 EXPECT_CALL(*(gl_.get()), | 1320 EXPECT_CALL(*(gl_.get()), |
| 1297 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) | 1321 GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _)) |
| 1298 .WillOnce(SetArgPointee<2>(GL_TRUE)) | 1322 .WillOnce(SetArgPointee<2>(GL_TRUE)) |
| 1299 .RetiresOnSaturation(); | 1323 .RetiresOnSaturation(); |
| 1300 EXPECT_CALL(*(gl_.get()), | 1324 EXPECT_CALL(*(gl_.get()), |
| 1301 GetProgramiv( | 1325 GetProgramiv( |
| 1302 kServiceProgramId, GL_TRANSFORM_FEEDBACK_VARYINGS, _)) | 1326 kServiceProgramId, GL_TRANSFORM_FEEDBACK_VARYINGS, _)) |
| 1303 .WillOnce(SetArgPointee<2>(data.header.num_transform_feedback_varyings)) | 1327 .WillOnce(SetArgPointee<2>(data.header.num_transform_feedback_varyings)) |
| 1304 .RetiresOnSaturation(); | 1328 .RetiresOnSaturation(); |
| 1305 GLsizei max_length = 1 + std::max(strlen(kName[0]), strlen(kName[1])); | 1329 GLsizei max_length = 1 + std::max(strlen(kName[0]), strlen(kName[1])); |
| (...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2133 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); | 2157 SetExpectationsForProgramLoad(ProgramCache::PROGRAM_LOAD_SUCCESS); |
| 2134 SetExpectationsForNotCachingProgram(); | 2158 SetExpectationsForNotCachingProgram(); |
| 2135 SetExpectationsForProgramLoadSuccess(); | 2159 SetExpectationsForProgramLoadSuccess(); |
| 2136 | 2160 |
| 2137 EXPECT_TRUE(program_->Link(NULL, Program::kCountOnlyStaticallyUsed, | 2161 EXPECT_TRUE(program_->Link(NULL, Program::kCountOnlyStaticallyUsed, |
| 2138 base::Bind(&ShaderCacheCb))); | 2162 base::Bind(&ShaderCacheCb))); |
| 2139 } | 2163 } |
| 2140 | 2164 |
| 2141 } // namespace gles2 | 2165 } // namespace gles2 |
| 2142 } // namespace gpu | 2166 } // namespace gpu |
| OLD | NEW |